Air框架常见问题解答:新手开发者必知的15个要点

📅 2026/7/22 19:56:44
Air框架常见问题解答:新手开发者必知的15个要点
Air框架常见问题解答新手开发者必知的15个要点【免费下载链接】airThe first web framework designed for AI to write. Built on Python, FastAPI, Pydantic, and HTMX. By the authors of Two Scoops of Django.项目地址: https://gitcode.com/gh_mirrors/air23/airAir框架作为专为AI设计的Python Web框架基于FastAPI、Pydantic和HTMX构建为开发者提供了高效便捷的Web开发体验。本文整理了新手开发者最常遇到的15个问题帮助你快速掌握Air框架的核心要点。1. 如何快速安装Air框架Air框架支持多种安装方式推荐使用uv工具进行环境管理mkdir helloair cd helloair uv venv source .venv/bin/activate uv init uv add air也可以使用pip或condapython -m venv .venv pip install -U air或conda install air -c conda-forge2. 如何创建第一个Air应用创建一个简单的Air应用只需几步创建main.py文件import air app air.Air() app.page def index(): return air.layouts.mvpcss(air.H1(Hello, Air!), air.P(Breathe it in.))运行应用air run访问 http://localhost:8000 即可看到你的第一个Air应用。3. Air框架的路由系统如何工作Air框架的路由系统基于FastAPI构建支持多种HTTP方法和路由定义方式基本路由app.get(/) def index(): return air.layouts.mvpcss(air.H1(Hello, Air!))简化的页面路由使用app.page装饰器可以快速创建GET请求路由app.page # 自动映射到 / 路由 def index(): return air.layouts.mvpcss(air.H1(Home Page)) app.page # 自动映射到 /about-us 路由 def about_us(): return air.layouts.mvpcss(air.H1(About Us))路径参数app.get(/users/{username}) def user_detail(username: str): return air.layouts.mvpcss(air.H1(fUser: {username}))4. 如何在Air中使用查询参数只需在视图函数中定义参数即可自动创建查询参数app.get(/search) def search(q: str air.Query(), page: int air.Query(1)): return air.layouts.mvpcss(air.H1(fSearch results for: {q} (Page {page})))访问 http://localhost:8000/search?qairpage2 即可看到效果。5. Air Tags和Jinja模板有什么区别如何选择Air提供两种HTML生成方式Air Tags直接在Python中创建HTML元素适合生成动态内容和HTMX片段示例air.Div( air.H1(Hello, Air Tags), air.P(This is a paragraph), class_container )Jinja模板使用传统的HTML模板文件适合创建复杂页面布局示例!-- templates/base.html -- !DOCTYPE html html body h1{{ title }}/h1 {{ content|safe }} /body /html最佳实践使用Jinja创建基础布局Air Tags生成动态内容和HTMX片段。6. 如何在Jinja模板中使用Air Tags可以将Air Tags作为变量传递给Jinja模板记得使用|safe过滤器app.get(/avatar) def avatar(request: air.Request): return app.jinja( request, avatar.html, titleHello, Air Benders, fragmentair.Div(air.P(We are fans of the Last Avatar), class_thing), )模板文件!-- templates/avatar.html -- !DOCTYPE html html body main classcontainer h1{{ title }}/h1 {{ fragment|safe }} /main /body /html7. 如何处理表单提交Air提供了两种处理表单的方式基础表单处理app.page def index(): return air.layouts.mvpcss( air.H1(Email form), air.Form( air.Label(Email:, for_email), air.Input(type_email, nameemail, requiredTrue), air.Button(Submit, type_submit), methodPOST, action/submit, ), ) app.post(/submit) async def email_handler(request: air.Request): form await request.form() return air.layouts.mvpcss( air.H1(Email submitted: form.get(email, )) )使用AirFormsPydantic驱动的表单from air import AirField, AirForm, AirModel class ContactModel(AirModel): name: str AirField(min_length2, max_length50) age: int AirField(ge1, le120) email: str AirField(typeemail) class ContactForm(AirForm[ContactModel]): pass app.page async def index(): form ContactForm() return air.layouts.picocss( air.H1(Contact Form), air.Form( form.render(), air.Button(Submit, type_submit), methodpost, action/submit, ), ) app.post(/submit) async def handle_form(request: air.Request): form await ContactForm.from_request(request) if form.is_valid: return air.layouts.picocss(air.H1(Success!)) return air.layouts.picocss(air.H1(Form has errors), form.render())8. 什么时候使用def和async def定义视图函数使用async def当需要await异步操作时如await request.form()使用def同步操作性能更好# 同步视图 app.page def index(): return air.H1(Hello, Air!) # 异步视图 app.post(/submit) async def handle_form(request: air.Request): form await request.form() return air.H1(fReceived: {form})9. 如何生成URL链接Air提供了便捷的URL生成方法app.get(/users/{username}) def user_detail(username: str): return air.H1(username) app.page def index(): return air.layouts.mvpcss( air.H1(Home), air.A(View user profile, hrefuser_detail.url(usernameAang)), )带查询参数的URLapp.get(/search) def search(q: str air.Query(), page: int air.Query(1)): return air.H1(fSearch: {q}) # 生成URL url search.url(query_params{q: air, page: 2}) # 结果: /search?qairpage210. Air框架支持哪些HTTP方法Air支持所有标准HTTP方法app.get(/items) # GET请求 def list_items(): ... app.post(/items) # POST请求 async def create_item(request: air.Request): ... app.put(/items/{id}) # PUT请求 async def replace_item(request: air.Request, id: int): ... app.patch(/items/{id}) # PATCH请求 async def update_item(request: air.Request, id: int): ... app.delete(/items/{id}) # DELETE请求 async def delete_item(id: int): ...11. 如何在Air中使用HTMXAir与HTMX无缝集成无需额外配置app.page def index(): return air.layouts.mvpcss( air.Script(srchttps://cdn.jsdelivr.net/npm/htmx.org2.0.6/dist/htmx.min.js), air.H1(HTMX Demo), air.Button(Click me, hx_get/api/data, hx_target#result), air.Div(idresult) ) app.get(/api/data) def get_data(): return air.P(Hello from HTMX!)12. 如何实现服务器发送事件(SSE)Air简化了SSE的实现import random from asyncio import sleep app.page def index(): return air.layouts.mvpcss( air.Script(srchttps://unpkg.com/htmx-ext-sse2.2.1/sse.js), air.H1(Server Sent Event Demo), air.Section( hx_extsse, sse_connect/lottery-numbers, hx_swapbeforeend show:bottom, sse_swapmessage, ), ) async def lottery_generator(): while True: lottery_numbers , .join([str(random.randint(1, 40)) for _ in range(6)]) yield air.Aside(lottery_numbers) await sleep(1) app.page async def lottery_numbers(): return air.SSEResponse(lottery_generator())13. 如何添加CSS样式Air支持多种添加CSS的方式外部CSSapp.page def index(): return air.Html( air.Head( air.Link(relstylesheet, hrefhttps://unpkg.com/mvp.css), ), air.Body( air.H1(Styled with MVP.css) ), )内置布局Air提供了内置布局app.page def index(): return air.layouts.mvpcss( # 使用MVP.css布局 air.H1(Hello, Air!), air.P(This page uses built-in MVP.css layout) ) # 或使用Picocss布局 app.page def index(): return air.layouts.picocss( air.H1(Hello, Air!), air.P(This page uses built-in Pico.css layout) )内联样式air.Div( air.P(Red text), stylecolor: red; font-size: 20px; )14. 如何运行Air应用Air提供了便捷的命令行工具air run也可以使用FastAPI的开发服务器fastapi dev --entrypoint main:app15. 在哪里可以找到更多Air框架的学习资源Air框架提供了丰富的学习资源官方文档docs/learn/index.mdAPI参考docs/api/index.md代码示例examples/实用指南docs/learn/cookbook/index.md通过这些资源你可以深入了解Air框架的各种功能和最佳实践。【免费下载链接】airThe first web framework designed for AI to write. Built on Python, FastAPI, Pydantic, and HTMX. By the authors of Two Scoops of Django.项目地址: https://gitcode.com/gh_mirrors/air23/air创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考