@@ -104,7 +104,7 @@ q: str
104104代替:
105105
106106``` Python
107- q: str = None
107+ q: Union[ str , None ] = None
108108```
109109
110110但是现在我们正在用 ` Query ` 声明它,例如:
@@ -113,17 +113,51 @@ q: str = None
113113q: Union[str , None ] = Query(default = None , min_length = 3 )
114114```
115115
116- 因此,当你在使用 ` Query ` 且需要声明一个值是必需的时,可以将 ` ... ` 用作第一个参数值 :
116+ 因此,当你在使用 ` Query ` 且需要声明一个值是必需的时,只需不声明默认参数 :
117117
118118``` Python hl_lines="7"
119119{!../ ../ ../ docs_src/ query_params_str_validations/ tutorial006.py!}
120120```
121121
122+ ### 使用省略号(` ... ` )声明必需参数
123+
124+ 有另一种方法可以显式的声明一个值是必需的,即将默认参数的默认值设为 ` ... ` :
125+
126+ ``` Python hl_lines="7"
127+ {!../ ../ ../ docs_src/ query_params_str_validations/ tutorial006b.py!}
128+ ```
129+
122130!!! info
123131 如果你之前没见过 ` ... ` 这种用法:它是一个特殊的单独值,它是 <a href =" https://docs.python.org/3/library/constants.html#Ellipsis " class =" external-link " target =" _blank " >Python 的一部分并且被称为「省略号」</a >。
132+ Pydantic 和 FastAPI 使用它来显式的声明需要一个值。
124133
125134这将使 ** FastAPI** 知道此查询参数是必需的。
126135
136+ ### 使用` None ` 声明必需参数
137+
138+ 你可以声明一个参数可以接收` None ` 值,但它仍然是必需的。这将强制客户端发送一个值,即使该值是` None ` 。
139+
140+ 为此,你可以声明` None ` 是一个有效的类型,并仍然使用` default=... ` :
141+
142+ ``` Python hl_lines="9"
143+ {!../ ../ ../ docs_src/ query_params_str_validations/ tutorial006c.py!}
144+ ```
145+
146+ !!! tip
147+ Pydantic 是 FastAPI 中所有数据验证和序列化的核心,当你在没有设默认值的情况下使用 ` Optional ` 或 ` Union[Something, None] ` 时,它具有特殊行为,你可以在 Pydantic 文档中阅读有关<a href =" https://pydantic-docs.helpmanual.io/usage/models/#required-optional-fields " class =" external-link " target =" _blank " >必需可选字段</a >的更多信息。
148+
149+ ### 使用Pydantic中的` Required ` 代替省略号(` ... ` )
150+
151+ 如果你觉得使用 ` ... ` 不舒服,你也可以从 Pydantic 导入并使用 ` Required ` :
152+
153+ ``` Python hl_lines="2 8"
154+ {!../ ../ ../ docs_src/ query_params_str_validations/ tutorial006d.py!}
155+ ```
156+
157+ !!! tip
158+ 请记住,在大多数情况下,当你需要某些东西时,可以简单地省略 ` default ` 参数,因此你通常不必使用 ` ... ` 或 ` Required `
159+
160+
127161## 查询参数列表 / 多个值
128162
129163当你使用 ` Query ` 显式地定义查询参数时,你还可以声明它去接收一组值,或换句话来说,接收多个值。
0 commit comments