@ -1,5 +1,6 @@
# 高级依赖项 { #advanced-dependencies }
## 参数化的依赖项 { #parameterized-dependencies }
目前我们看到的依赖项都是固定的函数或类。
# 使用数据类 { #using-dataclasses }
FastAPI 基于 **Pydantic** 构建,我已经向你展示过如何使用 Pydantic 模型声明请求与响应。
但 FastAPI 也支持以相同方式使用 [`dataclasses`](https://docs.python.org/3/library/dataclasses.html):
# 生命周期事件 { #lifespan-events }
你可以定义在应用**启动**前执行的逻辑(代码)。这意味着在应用**开始接收请求**之前,这些代码只会被执行**一次**。
同样地,你可以定义在应用**关闭**时应执行的逻辑。在这种情况下,这段代码将在**处理可能的多次请求后**执行**一次**。
# 响应头 { #response-headers }
## 使用 `Response` 参数 { #use-a-response-parameter }
你可以在你的*路径操作函数*中声明一个 `Response` 类型的参数(就像你可以为 cookies 做的那样)。
# 包含 WSGI - Flask,Django,其它 { #including-wsgi-flask-django-others }
您可以挂载 WSGI 应用,正如您在 [子应用 - 挂载](sub-applications.md)、[在代理之后](behind-a-proxy.md) 中所看到的那样。
为此, 您可以使用 `WSGIMiddleware` 来包装你的 WSGI 应用,如:Flask,Django,等等。
# 容器中的 FastAPI - Docker { #fastapi-in-containers-docker }
部署 FastAPI 应用时,常见做法是构建一个**Linux 容器镜像**。通常使用 [**Docker**](https://www.docker.com/) 实现。然后你可以用几种方式之一部署该镜像。
使用 Linux 容器有多种优势,包括**安全性**、**可复制性**、**简单性**等。
# 环境变量 { #environment-variables }
/// tip | 提示
如果你已经知道什么是“环境变量”并且知道如何使用它们,你可以放心跳过这一部分。
# 是否为输入和输出分别生成 OpenAPI JSON Schema { #separate-openapi-schemas-for-input-and-output-or-not }
自从发布了 **Pydantic v2**,生成的 OpenAPI 比之前更精确、更**正确**了。😎
事实上,在某些情况下,对于同一个 Pydantic 模型,OpenAPI 中会根据是否带有**默认值**,为输入和输出分别生成**两个 JSON Schema**。
# FastAPI全栈模板 { #full-stack-fastapi-template }
模板通常带有特定的设置,但它们被设计为灵活且可定制。这样你可以根据项目需求进行修改和调整,使其成为很好的起点。🏁
你可以使用此模板开始,它已经为你完成了大量的初始设置、安全性、数据库以及一些 API 端点。
# 更多模型 { #extra-models }
书接上文,多个关联模型这种情况很常见。
特别是用户模型,因为:
# 第一步 { #first-steps }
最简单的 FastAPI 文件可能像下面这样:
{* ../../docs_src/first_steps/tutorial001_py310.py *}
# 路径操作配置 { #path-operation-configuration }
*路径操作装饰器*支持多种配置参数。
/// warning | 警告
# 查询参数和字符串校验 { #query-parameters-and-string-validations }
**FastAPI** 允许你为参数声明额外的信息和校验。
让我们以下面的应用为例:
# 查询参数 { #query-parameters }
声明的参数不是路径参数时,路径操作函数会把该参数自动解释为“查询”参数。
{* ../../docs_src/query_params/tutorial001_py310.py hl[9] *}
# 安全 - 第一步 { #security-first-steps }
假设你的**后端** API 位于某个域名下。
而**前端**在另一个域名,或同一域名的不同路径(或在移动应用中)。