企业网站建设的实践意义哪里有做网站系统的
news/
2025/9/23 18:51:59/
文章来源:
企业网站建设的实践意义,哪里有做网站系统的,wordpress主题chuxia,淮安营销型网站建设FastAPI 概述
参考文档#xff1a;
中文文档轻松上手Python的Web神器#xff1a;FastAPI教程
介绍
FastAPI 是一个基于 Python 的现代 Web 框架#xff0c;它具有快速构建高性能 API 的特点。
FastAPI 关键特性:
快速#xff1a;可与 NodeJS 和 Go 并肩的极高性能
中文文档轻松上手Python的Web神器FastAPI教程
介绍
FastAPI 是一个基于 Python 的现代 Web 框架它具有快速构建高性能 API 的特点。
FastAPI 关键特性:
快速可与 NodeJS 和 Go 并肩的极高性能归功于 Starlette 和 Pydantic。最快的 Python web 框架之一。高效编码提高功能开发速度约 200 至 300。更少 bug减少约 40 的人为开发者导致错误。智能极佳的编辑器支持。处处皆可自动补全减少调试时间。简单设计的易于使用和学习阅读文档的时间更短。简短使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。健壮生产可用级别的代码。还有自动生成的交互式文档。标准化基于并完全兼容API 的相关开放标准OpenAPI (以前被称为 Swagger) 和 JSON Schema。 常见 Python Web 框架的介绍与区别
性能 Django是一个全功能的框架它提供了许多内置的功能和扩展。虽然它在性能方面相对较低但它非常适合构建大型应用程序。 Flask是一个轻量级的框架它更加注重简洁和灵活性。相比于 DjangoFlask 具有更好的性能表现但它的功能相对较少。 FastAPI是一个高性能的框架它基于异步请求处理和类型注解。FastAPI 比 Django 和 Flask 在性能上更为出色并且它使用 Python 的 asyncio 库来实现高效的并发请求处理。
开发难度
Django是一个全功能的框架它提供了许多现成的功能和组件使得开发更加快速和简单。但是对于初学者来说Django的学习曲线可能相对较陡。Flask是一个简洁而灵活的框架它更多地侧重于自定义和配置。相对于 DjangoFlask 的学习曲线较为平缓适合小型和简单的项目。FastAPI使用了类型注解和自动生成文档的功能使代码更易读和维护。它提供了基于标准的API模式和强大的验证工具减少了开发过程中的错误。
推广程度 Django是最受欢迎和广泛使用的 Python Web 框架之一。它拥有庞大的社区支持和丰富的文档资源可以轻松找到相关的教程、插件和解决方案。 Flask是一个比较受欢迎的框架拥有庞大的社区和丰富的扩展库。虽然它的用户群体相对较小但在小型项目和快速原型开发中非常流行。 FastAPI是一个相对较新的框架但它正在迅速获得开发者的关注。它的高性能和现代特性吸引了许多开发者并且社区正在逐渐扩大。 FastAPI 是一个用于构建 API 的现代、快速高性能的 web 框架使用 Python 3.6 并基于标准的 Python 类型提示。 入门示例 安装 FastAPI 和 uvicorn FastAPI 使用 uvicorn 作为默认的 Web 服务。因此需要在安装 FastAPI 和 uvicorn uvicorn 是一个轻量级的 ASGI异步服务器网关接口服务器 pip install fastapi
pip install uvicorn示例代码 from fastapi import FastAPI
import uvicorn# 创建一个FastAPI应用程序实例
app FastAPI()
# 定义路由使用装饰器将函数绑定到特定的路径和HTTP方法
app.get(/)
async def root():return {message: Hello World}app.get(/items/{item_id})
def read_item(item_id: int, q: str None):return {item_id: item_id, q: q}# 启动程序时使用 uvicorn 允许 FastAPI 应用程序
uvicorn.run(app)
# 默认ip为127.0.0.1默认端口为8000启动 web 服务 方式1uvicorn 内嵌式 在代码中使用 uvicorn.run(app) 启用 uvicorn 服务器运行 python 服务然后使用 python 启动 py 模块 import uvicornapp FastAPI()
uvicorn.run(app)方式2uvicorn 外启式 在命令行输入命令 uvicorn main:app --host 0.0.0.0 --port 80 --reloadmain启动服务的py文件名app服务对象名–-hostip地址–-port端口–-reload代码修改后自动重启服务。仅在开发时使用上线后不要带这个参数会降低性能 uvicorn.run 支持的参数
app 指定应用 app。‘脚本名:FastAPI 实例对象’ 或 FastAPI 实例对象host 字符串允许被访问的形式locahost、127.0.0.1、当前 IP、0.0.0.0。默认为127.0.0.1port 数字应用的端口默认为 8000uds 字符串socket 服务绑定到 UNIX 的域名fd 数字从此文件描述符绑定到socketloop 事件循环模式。选项列表为 [auto|asyncio|uvloop]默认为 autohttp HTTP协议实现。选项列表为 [auto|h11|httptools]默认为autows WebSocket协议实现。选项列表为 [auto|none|websockets|wsproto]默认为autows-max-size 数字WebSocket 最大消息大小字节默认值为 16777216lifespan 生命周期实施。选项列表为 [auto|on|off]默认为autoenv-file PATH环境配置文件log-config PATH日志配置文件。支持的格式.ini、.json、.yaml默认为 fastapi 默认的 log 配置log-level 日志级别。选项列表为 [critical|error|warning|info|debug|trace]默认 infoaccess-log booleanaccess log 日志的开关默认为 Trueuse-colors boolean彩色日志的开关前提需指定log-config默认为 Noneinterface 选择 ASGI3、ASGI2 或 WSGI 作为应用程序接口。选项列表为 [auto|asgi3|asgi2|wsgi]默认为 autodebug 是否使用 debug 模式默认False,reload boolean当代码发生更时是否自动重启默认 False,reload_dirs 字符串设置重新加载目录当没有传这个参数的实时将取当前工作目录reload-delay float每隔多久检测代码是否有变动默认 0.25 秒workers 数字工作进程数。默认为 WEB_CONCURRENCY 环境变量如果可用 或 1。对于 --reload 无效。proxy-headers boolean启用/禁用 X-Forwarded-Proto、X-Forwarded-For、X-Forwarded-Port 以填充远程地址信息默认为 Trueforwarded-allow-ips 字符串用逗号分隔的IP列表以信任代理标头。默认为 FORWARDED_ALLOW_IPS 环境变量如果可用或 None为 None 时代码里面则取 127.0.0.1root-path 字符串为安装在给定 URL 路径下的应用程序设置 ASGI “根路径”。limit-concurrency 数字在发出 HTTP503 响应之前允许的最大并发连接数或任务数。默认为 Nonelimit-max-requests 数字达到多少请求数则终止进程默认为 Nonebacklog 数字等待处理的最大连接数默认为 2048timeout-keep-alive 数字如果在此超时时间内未收到新数据则关闭保持活动状态的连接默认为 5ssl-keyfile 字符串SSL密钥文件默认为 Nonessl-certfile 字符串SSL证书文件默认为 Nonessl-keyfile-password 字符串SSL密钥文件密码默认为 Nonessl-version 数字要使用的 SSL版本详见 stdlib SS L模块默认为 2ssl-cert-reqs 数字是否需要客户端证书详见 stdlib SSL 模块默认为 0ssl-ca-certs 字符串CA 证书文件ssl-ciphers 字符串要使用的 CA 证书文件密码详见 stdlib SSL 模块默认为 TLSv1header 字典自定义响应头信息键值对的形式默认为 None 常用 API
appFastAPI() 创建 FastAPI 应用程序实例 app FastAPI() 是在 FastAPI 中创建应用程序实例的常见做法。这行代码创建了一个 FastAPI 应用程序对象可以在这个对象上定义路由、中间件、异常处理等。 应用程序实例 app 具有许多属性和方法用于配置和管理应用程序的各个方面如路由、中间件、异常处理、依赖注入等。通过创建 app 实例可以在其中定义和组织应用程序的逻辑。 代码示例 from fastapi import FastAPIapp FastAPI()支持参数均为可选传 debug 调试模式True/False。此属性继承自 starlette在 starlette 中使用的是 property 装饰器 routes 路由列表默认值为 None 此属性继承自 starlette类型为 startlette 的 BaseRoute 列表BaseRoute 与 starlette 的基础类型 Scope 有关 title API文档的标题默认值 FastAPI description API文档的描述默认为空 version API 接口的版本号 openapi_url OpenAPI 文件路径默认为 /opanapi.json openapi_prefix OpenAPI 文件路径前缀默认为空 default_response_class 默认响应类型默认为 JSONResponse 此参数继承自 startlette 的 Response有 HTMLResponse、PlainTextResponse、UJSONResponse、RedirectResponse、StreamingResponse、FileResponse 和 JSONResponse 七种使用时需加载 starlette.responses 模块 docs_url 交互式文档路径默认为 /docs redoc_url 可选式文档路径默认为 /redoc swagger_ui_oauth2_redirect_url OAuth 重定向路径默认为 /docs/oauth2-redirect swagger_ui_init_oauth OAuth 重定向字典默认为 None middleware 中间件默认为空 exception_handlers 异常处理方法默认为 None on_startup app 启动时调用的方法列表 on_shutdown app 关闭时调用的方法列表 extra : 额外可选参数 FastAPI() 实例常用 API
get()、post() 等定义 HTTP 请求的路由
在 FastAPI 中app.get() 、app.post()等方法用于定义 HTTP 请求的路由。这些方法接受多个参数用于指定路由的路径、请求处理函数、依赖项等。
以下是主要参数
path必填用于指定路由的路径。这是一个字符串表示 URL 路径可以包含路径参数和查询参数。response_model用于指定响应模型。响应模型是响应数据的数据结构通常使用 Pydantic 模型来定义。summary一个简短的字符串用于描述路由的目的或功能。description用于提供更详细的路由说明。tags一个字符串列表用于标记路由以便在文档中分类和组织路由。dependencies一个列表指定在路由处理函数中需要注入的依赖项。response_description用于指定响应的描述信息。deprecated一个布尔值表示路由是否已被弃用。status_code用于指定响应的 HTTP 状态码。response_model_include 和 response_model_exclude用于指定在响应模型中包含或排除的字段。response_model_by_alias一个布尔值表示是否使用 Pydantic 模型中的别名来序列化响应。response_model_exclude_unset一个布尔值表示在响应中排除未设置的字段。response_model_exclude_defaults一个布尔值表示在响应中排除具有默认值的字段。response_model_exclude_none一个布尔值表示在响应中排除值为 None 的字段。operation_id用于指定操作的唯一标识符。deprecated一个布尔值表示路由是否已被弃用。callbacks一个字典用于指定回调函数。
这些参数可以根据需求来灵活配置。一般来说path 参数是必需的而其他参数则根据需要来选择性地使用。 add_middleware()添加中间件 add_middleware() 函数是 FastAPI 中用于添加中间件的方法。 中间件是一种可以在请求和响应处理过程中进行预处理和后处理的功能。可以使用中间件来实现各种需求如添加全局头部、请求日志记录、异常处理等。 通过 app.add_middleware 方法将自定义中间件添加到应用程序。当请求到达时FastAPI 会依次执行添加的中间件然后再调用路由处理函数。在响应返回时会按照相反的顺序执行中间件的后处理逻辑。 通过添加中间件可以在请求和响应处理过程中实现一些通用的功能而不需要在每个路由中重复编写相同的代码。这有助于保持代码的整洁和可维护性。 常用参数 middleware_class必需一个中间件类希望添加到应用程序的中间件。 中间件类应继承自 fastapi.middleware.base.BaseHTTPMiddleware 或类似的基类。 **options这是中间件的配置选项可以根据中间件的要求传递不同的参数。具体的选项取决于使用的中间件类。通常可以传递任何与中间件相关的自定义参数以便在中间件类中使用。
CORSMiddleware 中间件 FastAPI 内置的中间件用于处理跨源资源共享CORS问题。 CORS 是一种浏览器安全机制用于控制跨域请求。在前端和后端分离的应用中当前端代码在浏览器中运行从一个域向另一个域发出请求时浏览器会执行跨域检查确保只有受信任的域可以访问资源。 CORSMiddleware 可以帮助开发者配置 FastAPI 应用程序以正确处理跨域请求。 配置完中间件后FastAPI 会自动处理跨域请求并在响应中添加适当的头部信息以满足 CORS 安全要求。 请注意CORS 配置涉及到应用程序的安全性。在生产环境中应根据实际需求来配置 allow_origins 和其他参数。 常用参数用于配置跨域策略 allow_origins允许访问资源的域名列表。 可以使用 [*] 表示允许所有域名但这通常不是推荐的做法。 allow_credentials是否允许发送凭据如 cookie、HTTP 认证头部的请求。 如果为 True则需要确保在客户端和服务器端都进行相应的配置且 allow_origins 必须为具体的源不可以是 [*] allow_methods允许的 HTTP 方法列表如 [GET, POST]。默认是 [GET] 可以使用 [*] 表示允许所有方法 allow_headers允许的 HTTP 头部列表如 [Content-Type, Authorization]。默认是 [] 可以使用 [*] 表示允许所有头部 注Accept、Accept-Language、Content-Language 以及 Content-Type 总是被允许的 代码示例 from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddlewareapp FastAPI()# 添加 CORS 中间件
app.add_middleware(CORSMiddleware,allow_origins[http://localhost, https://example.com],allow_credentialsTrue,allow_methods[*],allow_headers[*],
)自定义中间件 方式1自定义中间件类添加自定义中间件时通过 dispatch 参数传递自定义中间件类的对象 from fastapi import FastAPI, Request
from fastapi.middleware.cors import BaseHTTPMiddleware# 自定义中间件
class MyMiddleware:def __init__(self, some_attribute: str None):# some_attribute非必需此处用于演示传参到自定义的中间件self.some_attribute some_attributeasync def __call__(self, request: Request, call_next):# do something with the request object# process the request and get the response response await call_next(request)# do something with the response objectreturn responseapp FastAPI()
# 添加自定义中间件
app.add_middleware(BaseHTTPMiddleware, dispatchMyMiddleware())方式2自定义中间件类继承 BaseHTTPMiddleware 类 # 自定义中间件
class MyMiddleware(BaseHTTPMiddleware):def __init__(self, app, some_attribute: str):super().__init__(app)self.some_attribute some_attributeasync def dispatch(self, request: Request, call_next):# do something with the request object, for examplecontent_type request.headers.get(Content-Type)print(content_type)# process the request and get the response response await call_next(request)return responseapp FastAPI()
# 添加自定义中间件
app.add_middleware(MyMiddleware)方式3app.middleware 装饰器 在 FastAPI 中可以使用 app.middleware 装饰器来添加应用程序范围的中间件。 即使用 app.middleware 装饰器添加的中间件适用于整个 FastAPI 应用程序通常用于执行全局操作例如身份验证、日志记录、异常处理等。这使得您可以在整个应用程序中共享相同的中间件逻辑而不需要为每个路由重复添加相同的中间件。 此装饰器可以接受以下两个参数 middleware_type必需字符串参数用于指定中间件的类型。 在 FastAPI 中中间件可以分为以下两种类型 “http”HTTP 中间件 这种中间件将在每个 HTTP 请求处理期间执行适用于处理 HTTP 请求和响应的操作。 “websocket”WebSocket 中间件 这种中间件将在 WebSocket 连接的处理期间执行适用于处理 WebSocket 请求和响应的操作。 priority可选整数参数用于指定中间件的优先级。 如果应用程序中有多个中间件可以使用此参数来控制它们的执行顺序。 较小的数字表示较高的优先级中间件将按照优先级升序执行。 如果不指定 priority 参数中间件的默认优先级为 50。 app FastAPI()# 自定义中间件处理函数
app.middleware(http)
async def log_requests(request: Request, call_next):logger.info(fIncoming request: {request.method} {request.url})response await call_next(request)logger.info(fOutgoing response: {response.status_code})return responsewebsocket()创建 WebSocket 路由 websocket() 函数创建 WebSocket 路由从而实现与客户端之间的实时双向通信。 WebSocket 是一种在单个长连接上进行全双工通信的协议适用于需要实时更新数据的应用场景例如聊天应用、实时数据展示等。 在客户端可以使用浏览器内置的 WebSocket API 或其他 WebSocket 客户端库来与 FastAPI WebSocket 路由进行通信。 代码示例 from fastapi import FastAPI, WebSocketapp FastAPI()# WebSocket 路由
app.websocket(/ws)
async def websocket_endpoint(websocket: WebSocket):await websocket.accept()while True:data await websocket.receive_text()await websocket.send_text(fYou said: {data})使用 app.websocket() 方法创建了一个 /ws 的 WebSocket 路由。在 WebSocket 连接建立后使用 await websocket.accept() 方法接受连接。然后在一个无限循环中使用 await websocket.receive_text() 方法接收客户端发送的文本消息并使用 await websocket.send_text() 方法将消息返回给客户端。 mount()安装子应用程序静态文件 mount() 函数用于将另一个 ASGI 应用程序安装为 FastAPI 应用程序的子应用程序。 使用 mount 安装子应用程序可以方便的将多个应用程序组合在一起实现更复杂的应用程序逻辑结构。例如将多个 API 应用程序组装成一个网关应用程序将多个应用程序组装成一个单页面应用程序等等。 支持参数 path 类型为字符串必传参数指定 url 访问的路径app 类型为 ASGIApp必传参数挂载的是静态文件对象 directory 指定挂载的是静态文件目录 name 指定 fastapi 内部使用的名称。默认为 None 访问静态文件方式直接在浏览器输入 ip:端口/路径/文件全名.后缀 即可 代码示例配置静态文件路径 import uvicorn
from fastapi import FastAPI
from fastapi.staticfiles import StaticFilesapp FastAPI()
# 配置静态文件路径
app.mount(/static, StaticFiles(directorystatic), namestatic)
uvicorn.run(appmain:app, host0.0.0.0, port8000, reloadTrue)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913532.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!