mirror of
https://github.com/fastapi/fastapi.git
synced 2026-10-10 20:22:41 -04:00
Co-authored-by: pr-submit[bot] <pr-submit[bot]@users.noreply.github.com> Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com> Co-authored-by: pr-push[bot] <pr-push[bot]@users.noreply.github.com>
345 lines
26 KiB
Markdown
345 lines
26 KiB
Markdown
# Response Model - Return Type { #response-model-return-type }
|
|
|
|
рдЖрдк response рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ type рдХреЛ *path operation function* рдХреЗ **return type** рдХреЛ annotate рдХрд░рдХреЗ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
рдЖрдк **type annotations** рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕реА рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдк function **parameters** рдореЗрдВ input data рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк Pydantic models, lists, dictionaries, scalar values рдЬреИрд╕реЗ integers, booleans, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *}
|
|
|
|
FastAPI рдЗрд╕ return type рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛:
|
|
|
|
* рд▓реМрдЯрд╛рдП рдЧрдП data рдХреЛ **Validate** рдХрд░рдирд╛ред
|
|
* рдЕрдЧрд░ data invalid рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдИ field missing рд╣реИ), рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ *рдЖрдкрдХреЗ* app code рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝реА рд╣реИ, рд╡рд╣ рд╡рд╣ data return рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдЬреЛ рдЙрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ incorrect data return рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп server error return рдХрд░реЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдЖрдк рдФрд░ рдЖрдкрдХреЗ clients рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ expected data рдФрд░ data shape рдорд┐рд▓реЗрдЧрд╛ред
|
|
* OpenAPI *path operation* рдореЗрдВ response рдХреЗ рд▓рд┐рдП рдПрдХ **JSON Schema** рдЬреЛрдбрд╝рдирд╛ред
|
|
* рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ **automatic docs** рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
|
|
* рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ automatic client code generation tools рджреНрд╡рд╛рд░рд╛ рднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
|
|
* Pydantic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реМрдЯрд╛рдП рдЧрдП data рдХреЛ JSON рдореЗрдВ **Serialize** рдХрд░рдирд╛, рдЬреЛ **Rust** рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ **рдмрд╣реБрдд рддреЗрдЬрд╝** рд╣реЛрдЧрд╛ред
|
|
|
|
рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг:
|
|
|
|
* рдпрд╣ output data рдХреЛ return type рдореЗрдВ defined data рддрдХ **limit рдФрд░ filter** рдХрд░реЗрдЧрд╛ред
|
|
* рдпрд╣ **security** рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╣рдо рдиреАрдЪреЗ рдЗрд╕рдХрд╛ рдФрд░ рдЕрдзрд┐рдХ рджреЗрдЦреЗрдВрдЧреЗред
|
|
|
|
## `response_model` Parameter { #response-model-parameter }
|
|
|
|
рдХреБрдЫ cases рдРрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХреЛ рдРрд╕рд╛ data return рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЖрдк рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ type рджреНрд╡рд╛рд░рд╛ declare рдХрд┐рдП рдЧрдП data рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ред
|
|
|
|
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк **dictionary return** рдХрд░рдирд╛ рдпрд╛ database object return рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди **рдЙрд╕реЗ Pydantic model рдХреЗ рд░реВрдк рдореЗрдВ declare** рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ Pydantic model рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП object (рдЬреИрд╕реЗ dictionary рдпрд╛ database object) рдХреЗ рд▓рд┐рдП рд╕рднреА data documentation, validation, рдЖрджрд┐ рдХрд░реЗрдЧрд╛ред
|
|
|
|
рдЕрдЧрд░ рдЖрдкрдиреЗ return type annotation рдЬреЛрдбрд╝рд╛, рддреЛ tools рдФрд░ editors рдПрдХ (рд╕рд╣реА) error рдХреЗ рд╕рд╛рде рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдкрдХрд╛ function рдРрд╕рд╛ type (рдЬреИрд╕реЗ dict) return рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ declare рдХрд┐рдП рдЧрдП type (рдЬреИрд╕реЗ Pydantic model) рд╕реЗ рдЕрд▓рдЧ рд╣реИред
|
|
|
|
рдРрд╕реЗ cases рдореЗрдВ, рдЖрдк return type рдХреЗ рдмрдЬрд╛рдп *path operation decorator* parameter `response_model` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
рдЖрдк рдХрд┐рд╕реА рднреА *path operations* рдореЗрдВ `response_model` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
* `@app.get()`
|
|
* `@app.post()`
|
|
* `@app.put()`
|
|
* `@app.delete()`
|
|
* рдЖрджрд┐ред
|
|
|
|
{* ../../docs_src/response_model/tutorial001_py310.py hl[17,22,24:27] *}
|
|
|
|
/// note | рдиреЛрдЯ
|
|
|
|
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ `response_model` "decorator" method (`get`, `post`, рдЖрджрд┐) рдХрд╛ parameter рд╣реИред рдпрд╣ рдЖрдкрдХреЗ *path operation function* рдХрд╛ parameter рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рд╕рднреА parameters рдФрд░ body рд╣реЛрддреЗ рд╣реИрдВред
|
|
|
|
///
|
|
|
|
`response_model` рд╡рд╣реА type receive рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк Pydantic model field рдХреЗ рд▓рд┐рдП declare рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ Pydantic model рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣, рдЬреИрд╕реЗ рдХрд┐ `List[Item]` рдХреА рддрд░рд╣ Pydantic models рдХреА `list` рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
|
|
|
|
FastAPI рдЗрд╕ `response_model` рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА data documentation, validation, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ рдФрд░ output data рдХреЛ рдЗрд╕рдХреЗ type declaration рдореЗрдВ **convert рдФрд░ filter** рднреА рдХрд░реЗрдЧрд╛ред
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
рдЕрдЧрд░ рдЖрдкрдХреЗ editor, mypy, рдЖрджрд┐ рдореЗрдВ strict type checks рд╣реИрдВ, рддреЛ рдЖрдк function return type рдХреЛ `Any` рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
рдЗрд╕ рддрд░рд╣ рдЖрдк editor рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреБрдЫ рднреА return рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди FastAPI рдлрд┐рд░ рднреА `response_model` рдХреЗ рд╕рд╛рде data documentation, validation, filtering, рдЖрджрд┐ рдХрд░реЗрдЧрд╛ред
|
|
|
|
///
|
|
|
|
### `response_model` Priority { #response-model-priority }
|
|
|
|
рдЕрдЧрд░ рдЖрдк return type рдФрд░ `response_model` рджреЛрдиреЛрдВ declare рдХрд░рддреЗ рд╣реИрдВ, рддреЛ `response_model` рдХреЛ priority рдорд┐рд▓реЗрдЧреА рдФрд░ FastAPI рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
|
|
|
|
рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрдкрдиреЗ functions рдореЗрдВ рд╕рд╣реА type annotations рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЖрдк response model рд╕реЗ рдЕрд▓рдЧ type return рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддрд╛рдХрд┐ editor рдФрд░ mypy рдЬреИрд╕реЗ tools рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред рдФрд░ рдлрд┐рд░ рднреА FastAPI `response_model` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ data validation, documentation, рдЖрджрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
|
|
|
|
рдЖрдк рдЙрд╕ *path operation* рдХреЗ рд▓рд┐рдП response model рдмрдирд╛рдирд╛ disable рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `response_model=None` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдРрд╕рд╛ рддрдм рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЙрди рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП type annotations рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реЛрдВ рдЬреЛ valid Pydantic fields рдирд╣реАрдВ рд╣реИрдВ, рдЖрдк рдиреАрдЪреЗ рдХреЗ sections рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВрдЧреЗред
|
|
|
|
## рд╡рд╣реА input data return рдХрд░реЗрдВ { #return-the-same-input-data }
|
|
|
|
рдпрд╣рд╛рдБ рд╣рдо рдПрдХ `UserIn` model declare рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ plaintext password рд╣реЛрдЧрд╛:
|
|
|
|
{* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *}
|
|
|
|
/// note | рдиреЛрдЯ
|
|
|
|
`EmailStr` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ [`email-validator`](https://github.com/JoshData/python-email-validator) install рдХрд░реЗрдВред
|
|
|
|
рдЗрд╕реЗ рдЕрдкрдиреЗ project рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
|
|
|
|
```console
|
|
$ uv add email-validator
|
|
```
|
|
|
|
рдпрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде:
|
|
|
|
```console
|
|
$ uv add "pydantic[email]"
|
|
```
|
|
|
|
///
|
|
|
|
рдФрд░ рд╣рдо рдЗрд╕ model рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ input рдХреЛ declare рдХрд░рдиреЗ рдФрд░ рдЙрд╕реА model рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ output рдХреЛ declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
|
|
|
|
{* ../../docs_src/response_model/tutorial002_py310.py hl[16] *}
|
|
|
|
рдЕрдм, рдЬрдм рднреА рдХреЛрдИ browser password рдХреЗ рд╕рд╛рде user рдмрдирд╛ рд░рд╣рд╛ рд╣реЛрдЧрд╛, API response рдореЗрдВ рд╡рд╣реА password return рдХрд░реЗрдЧреАред
|
|
|
|
рдЗрд╕ case рдореЗрдВ, рдпрд╣ problem рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА, рдХреНрдпреЛрдВрдХрд┐ password рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рд╡рд╣реА user рд╣реИред
|
|
|
|
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЙрд╕реА model рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдФрд░ *path operation* рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдкрдиреЗ user рдХреЗ passwords рд╣рд░ client рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
/// danger | рдЦрддрд░рд╛
|
|
|
|
рдХрднреА рднреА рдХрд┐рд╕реА user рдХрд╛ plain password store рди рдХрд░реЗрдВ рдпрд╛ рдЙрд╕реЗ рдЗрд╕ рддрд░рд╣ response рдореЗрдВ рди рднреЗрдЬреЗрдВ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рд╕рднреА caveats рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
|
|
|
|
///
|
|
|
|
## Output model рдЬреЛрдбрд╝реЗрдВ { #add-an-output-model }
|
|
|
|
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо plaintext password рдХреЗ рд╕рд╛рде рдПрдХ input model рдФрд░ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдПрдХ output model рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
{* ../../docs_src/response_model/tutorial003_py310.py hl[9,11,16] *}
|
|
|
|
рдпрд╣рд╛рдБ, рднрд▓реЗ рд╣реА рд╣рдорд╛рд░рд╛ *path operation function* рд╡рд╣реА input user return рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ password рд╢рд╛рдорд┐рд▓ рд╣реИ:
|
|
|
|
{* ../../docs_src/response_model/tutorial003_py310.py hl[24] *}
|
|
|
|
...рд╣рдордиреЗ `response_model` рдХреЛ рдЕрдкрдирд╛ model `UserOut` declare рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ password рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ:
|
|
|
|
{* ../../docs_src/response_model/tutorial003_py310.py hl[22] *}
|
|
|
|
рдЗрд╕рд▓рд┐рдП, **FastAPI** output model рдореЗрдВ declare рди рдХрд┐рдП рдЧрдП рд╕рднреА data рдХреЛ filter out рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ (Pydantic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
|
|
|
|
### `response_model` рдпрд╛ Return Type { #response-model-or-return-type }
|
|
|
|
рдЗрд╕ case рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ models рдЕрд▓рдЧ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдордиреЗ function return type рдХреЛ `UserOut` рдХреЗ рд░реВрдк рдореЗрдВ annotate рдХрд┐рдпрд╛, рддреЛ editor рдФрд░ tools рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдо invalid type return рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрд▓рдЧ classes рд╣реИрдВред
|
|
|
|
рдЗрд╕реАрд▓рд┐рдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕реЗ `response_model` parameter рдореЗрдВ declare рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
|
|
|
|
...рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреИрд╕реЗ overcome рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред
|
|
|
|
## Return Type рдФрд░ Data Filtering { #return-type-and-data-filtering }
|
|
|
|
рдЖрдЗрдП рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рд╣рдо **function рдХреЛ рдПрдХ type рдХреЗ рд╕рд╛рде annotate** рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рд╣рдо function рд╕реЗ рдРрд╕рд╛ рдХреБрдЫ return рдХрд░ рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ **рдЕрдзрд┐рдХ data** рд╢рд╛рдорд┐рд▓ рд╣реЛред
|
|
|
|
рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ FastAPI response model рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ data рдХреЛ **filter** рдХрд░рддрд╛ рд░рд╣реЗред рддрд╛рдХрд┐ рднрд▓реЗ рд╣реА function рдЕрдзрд┐рдХ data return рдХрд░реЗ, response рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╣реА fields рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдЬреЛ response model рдореЗрдВ declare рдХрд┐рдП рдЧрдП рд╣реИрдВред
|
|
|
|
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ classes рдЕрд▓рдЧ рдереАрдВ, рд╣рдореЗрдВ `response_model` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╣рдореЗрдВ function return type check рдХрд░рдиреЗ рд╡рд╛рд▓реЗ editor рдФрд░ tools рд╕реЗ support рдирд╣реАрдВ рдорд┐рд▓рддрд╛ред
|
|
|
|
рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрддрд░ cases рдореЗрдВ рдЬрд╣рд╛рдБ рд╣рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ model рдмрд╕ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рдХреБрдЫ data рдХреЛ **filter/remove** рдХрд░реЗред
|
|
|
|
рдФрд░ рдЙрди cases рдореЗрдВ, рд╣рдо classes рдФрд░ inheritance рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ function **type annotations** рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ editor рдФрд░ tools рдореЗрдВ рдмреЗрд╣рддрд░ support рдорд┐рд▓реЗ, рдФрд░ рдлрд┐рд░ рднреА FastAPI **data filtering** рдорд┐рд▓ рд╕рдХреЗред
|
|
|
|
{* ../../docs_src/response_model/tutorial003_01_py310.py hl[7:10,13:14,18] *}
|
|
|
|
рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ editors рдФрд░ mypy рд╕реЗ tooling support рдорд┐рд▓рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ code types рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ FastAPI рд╕реЗ data filtering рднреА рдорд┐рд▓рддреА рд╣реИред
|
|
|
|
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдЖрдЗрдП рдЗрд╕реЗ рджреЗрдЦреЗрдВред ЁЯдУ
|
|
|
|
### Type Annotations рдФрд░ Tooling { #type-annotations-and-tooling }
|
|
|
|
рдкрд╣рд▓реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ editors, mypy рдФрд░ рдЕрдиреНрдп tools рдЗрд╕реЗ рдХреИрд╕реЗ рджреЗрдЦреЗрдВрдЧреЗред
|
|
|
|
`BaseUser` рдореЗрдВ base fields рд╣реИрдВред рдлрд┐рд░ `UserIn`, `BaseUser` рд╕реЗ inherit рдХрд░рддрд╛ рд╣реИ рдФрд░ `password` field рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рджреЛрдиреЛрдВ models рдХреЗ рд╕рднреА fields рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
|
|
|
|
рд╣рдо function return type рдХреЛ `BaseUser` рдХреЗ рд░реВрдк рдореЗрдВ annotate рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо `UserIn` instance return рдХрд░ рд░рд╣реЗ рд╣реИрдВред
|
|
|
|
Editor, mypy, рдФрд░ рдЕрдиреНрдп tools рдЗрд╕ рдкрд░ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ typing terms рдореЗрдВ, `UserIn`, `BaseUser` рдХрд╛ subclass рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм expected рдХреБрдЫ рднреА `BaseUser` рд╣реЛ, рддреЛ рдпрд╣ рдПрдХ *valid* type рд╣реИред
|
|
|
|
### FastAPI Data Filtering { #fastapi-data-filtering }
|
|
|
|
рдЕрдм, FastAPI рдХреЗ рд▓рд┐рдП, рдпрд╣ return type рджреЗрдЦреЗрдЧрд╛ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдк рдЬреЛ return рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдореЗрдВ **рдХреЗрд╡рд▓** рд╡рд╣реА fields рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдЬреЛ type рдореЗрдВ declare рдХрд┐рдП рдЧрдП рд╣реИрдВред
|
|
|
|
FastAPI internally Pydantic рдХреЗ рд╕рд╛рде рдХрдИ рдЪреАрдЬрд╝реЗрдВ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ class inheritance рдХреЗ рд╡рд╣реА rules returned data filtering рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рди рдХрд┐рдП рдЬрд╛рдПрдБ, рдирд╣реАрдВ рддреЛ рдЖрдк expected рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ data return рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
рдЗрд╕ рддрд░рд╣, рдЖрдк рджреЛрдиреЛрдВ рджреБрдирд┐рдпрд╛ рдХрд╛ best рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: **tooling support** рдХреЗ рд╕рд╛рде type annotations рдФрд░ **data filtering**ред
|
|
|
|
## рдЗрд╕реЗ docs рдореЗрдВ рджреЗрдЦреЗрдВ { #see-it-in-the-docs }
|
|
|
|
рдЬрдм рдЖрдк automatic docs рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк check рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ input model рдФрд░ output model рджреЛрдиреЛрдВ рдХрд╛ рдЕрдкрдирд╛ JSON Schema рд╣реЛрдЧрд╛:
|
|
|
|
<img src="/img/tutorial/response-model/image01.png">
|
|
|
|
рдФрд░ рджреЛрдиреЛрдВ models interactive API documentation рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдПрдБрдЧреЗ:
|
|
|
|
<img src="/img/tutorial/response-model/image02.png">
|
|
|
|
## рдЕрдиреНрдп Return Type Annotations { #other-return-type-annotations }
|
|
|
|
рдРрд╕реЗ cases рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ return рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ valid Pydantic field рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдЙрд╕реЗ function рдореЗрдВ annotate рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ tooling (editor, mypy, рдЖрджрд┐) рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП support рдХреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
|
|
|
|
### рд╕реАрдзреЗ Response Return рдХрд░реЗрдВ { #return-a-response-directly }
|
|
|
|
рд╕рдмрд╕реЗ common case рд╣реЛрдЧрд╛ [advanced docs рдореЗрдВ рдмрд╛рдж рдореЗрдВ рд╕рдордЭрд╛рдП рдЕрдиреБрд╕рд╛рд░ рд╕реАрдзреЗ Response return рдХрд░рдирд╛](../advanced/response-directly.md)ред
|
|
|
|
{* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *}
|
|
|
|
рдпрд╣ simple case FastAPI рджреНрд╡рд╛рд░рд╛ automatically handle рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ return type annotation `Response` class (рдпрд╛ рдЙрд╕рдХрд╛ subclass) рд╣реИред
|
|
|
|
рдФрд░ tools рднреА рдЦреБрд╢ рд╣реЛрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ `RedirectResponse` рдФрд░ `JSONResponse` рджреЛрдиреЛрдВ `Response` рдХреЗ subclasses рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП type annotation рд╕рд╣реА рд╣реИред
|
|
|
|
### Response Subclass Annotate рдХрд░реЗрдВ { #annotate-a-response-subclass }
|
|
|
|
рдЖрдк type annotation рдореЗрдВ `Response` рдХреЗ subclass рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
{* ../../docs_src/response_model/tutorial003_03_py310.py hl[8:9] *}
|
|
|
|
рдпрд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ `RedirectResponse`, `Response` рдХрд╛ subclass рд╣реИ, рдФрд░ FastAPI рдЗрд╕ simple case рдХреЛ automatically handle рдХрд░реЗрдЧрд╛ред
|
|
|
|
### Invalid Return Type Annotations { #invalid-return-type-annotations }
|
|
|
|
рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдХреЛрдИ рдЕрдиреНрдп arbitrary object return рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ valid Pydantic type рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕реЗ database object) рдФрд░ рдЖрдк рдЙрд╕реЗ function рдореЗрдВ рдЙрд╕реА рддрд░рд╣ annotate рдХрд░рддреЗ рд╣реИрдВ, рддреЛ FastAPI рдЙрд╕ type annotation рд╕реЗ Pydantic response model рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛, рдФрд░ fail рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
|
|
|
|
рдРрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ types рдХреЗ рдмреАрдЪ <dfn title='рдХрдИ types рдХреЗ рдмреАрдЪ union рдХрд╛ рдорддрд▓рдм рд╣реИ "рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА type".'>union</dfn> рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛ рдЬрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ valid Pydantic types рдирд╣реАрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ fail рд╣реЛрдЧрд╛ ЁЯТе:
|
|
|
|
{* ../../docs_src/response_model/tutorial003_04_py310.py hl[8] *}
|
|
|
|
...рдпрд╣ fail рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ type annotation Pydantic type рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ single `Response` class рдпрд╛ subclass рднреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ `Response` рдФрд░ `dict` рдХреЗ рдмреАрдЪ union (рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА) рд╣реИред
|
|
|
|
### Response Model Disable рдХрд░реЗрдВ { #disable-response-model }
|
|
|
|
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП, рдЖрдк рд╢рд╛рдпрдж default data validation, documentation, filtering, рдЖрджрд┐ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реЛрдВ рдЬреЛ FastAPI рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
|
|
|
|
рд▓реЗрдХрд┐рди рдЖрдк рд╢рд╛рдпрдж function рдореЗрдВ return type annotation рдлрд┐рд░ рднреА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реЛрдВ рддрд╛рдХрд┐ editors рдФрд░ type checkers (рдЬреИрд╕реЗ mypy) рдЬреИрд╕реЗ tools рд╕реЗ support рдорд┐рд▓ рд╕рдХреЗред
|
|
|
|
рдЗрд╕ case рдореЗрдВ, рдЖрдк `response_model=None` set рдХрд░рдХреЗ response model generation disable рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
{* ../../docs_src/response_model/tutorial003_05_py310.py hl[7] *}
|
|
|
|
рдЗрд╕рд╕реЗ FastAPI response model generation skip рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рдЖрдк рдЕрдкрдиреА рдЬрд░реВрд░рдд рдХреЗ рдХрд┐рд╕реА рднреА return type annotations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рдХрд┐ рд╡рд╣ рдЖрдкрдХреА FastAPI application рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗред ЁЯдУ
|
|
|
|
## Response Model encoding parameters { #response-model-encoding-parameters }
|
|
|
|
рдЖрдкрдХреЗ response model рдореЗрдВ default values рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
|
|
|
|
{* ../../docs_src/response_model/tutorial004_py310.py hl[9,11:12] *}
|
|
|
|
* `description: Union[str, None] = None` (рдпрд╛ Python 3.10 рдореЗрдВ `str | None = None`) рдХрд╛ default `None` рд╣реИред
|
|
* `tax: float = 10.5` рдХрд╛ default `10.5` рд╣реИред
|
|
* `tags: List[str] = []` рдХрд╛ default рдЦрд╛рд▓реА list рд╣реИ: `[]`ред
|
|
|
|
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ store рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ result рд╕реЗ omit рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ NoSQL database рдореЗрдВ рдХрдИ optional attributes рд╡рд╛рд▓реЗ models рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк default values рд╕реЗ рднрд░реЗ рдмрд╣реБрдд рд▓рдВрдмреЗ JSON responses рдирд╣реАрдВ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗред
|
|
|
|
### `response_model_exclude_unset` parameter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ { #use-the-response-model-exclude-unset-parameter }
|
|
|
|
рдЖрдк *path operation decorator* parameter `response_model_exclude_unset=True` set рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
{* ../../docs_src/response_model/tutorial004_py310.py hl[22] *}
|
|
|
|
рдФрд░ рд╡реЗ default values response рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ set рдХрд┐рдП рдЧрдП values рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
|
|
|
|
рддреЛ, рдЕрдЧрд░ рдЖрдк ID `foo` рд╡рд╛рд▓реЗ item рдХреЗ рд▓рд┐рдП рдЙрд╕ *path operation* рдХреЛ request рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ response (default values рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛) рд╣реЛрдЧрд╛:
|
|
|
|
```JSON
|
|
{
|
|
"name": "Foo",
|
|
"price": 50.2
|
|
}
|
|
```
|
|
|
|
/// note | рдиреЛрдЯ
|
|
|
|
рдЖрдк рдЗрд╕рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
* `response_model_exclude_defaults=True`
|
|
* `response_model_exclude_none=True`
|
|
|
|
рдЬреИрд╕рд╛ рдХрд┐ `exclude_defaults` рдФрд░ `exclude_none` рдХреЗ рд▓рд┐рдП [Pydantic docs](https://pydantic.dev/docs/validation/latest/concepts/serialization/#excluding-and-including-fields-based-on-their-value) рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
|
|
|
|
///
|
|
|
|
#### Defaults рд╡рд╛рд▓реЗ fields рдХреЗ рд▓рд┐рдП values рд╡рд╛рд▓рд╛ data { #data-with-values-for-fields-with-defaults }
|
|
|
|
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ data рдореЗрдВ model рдХреЗ default values рд╡рд╛рд▓реЗ fields рдХреЗ рд▓рд┐рдП values рд╣реИрдВ, рдЬреИрд╕реЗ ID `bar` рд╡рд╛рд▓рд╛ item:
|
|
|
|
```Python hl_lines="3 5"
|
|
{
|
|
"name": "Bar",
|
|
"description": "The bartenders",
|
|
"price": 62,
|
|
"tax": 20.2
|
|
}
|
|
```
|
|
|
|
рддреЛ рд╡реЗ response рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
|
|
|
|
#### Defaults рдЬреИрд╕реЗ рд╣реА values рд╡рд╛рд▓рд╛ data { #data-with-the-same-values-as-the-defaults }
|
|
|
|
рдЕрдЧрд░ data рдореЗрдВ default values рдЬреИрд╕реЗ рд╣реА values рд╣реИрдВ, рдЬреИрд╕реЗ ID `baz` рд╡рд╛рд▓рд╛ item:
|
|
|
|
```Python hl_lines="3 5-6"
|
|
{
|
|
"name": "Baz",
|
|
"description": None,
|
|
"price": 50.2,
|
|
"tax": 10.5,
|
|
"tags": []
|
|
}
|
|
```
|
|
|
|
FastAPI рдЗрддрдирд╛ smart рд╣реИ (рджрд░рдЕрд╕рд▓, Pydantic рдЗрддрдирд╛ smart рд╣реИ) рдХрд┐ рдпрд╣ рд╕рдордЭ рд╕рдХреЗ рдХрд┐, рднрд▓реЗ рд╣реА `description`, `tax`, рдФрд░ `tags` рдХреЗ values defaults рдЬреИрд╕реЗ рд╣реА рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ explicitly set рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (defaults рд╕реЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп)ред
|
|
|
|
рдЗрд╕рд▓рд┐рдП, рд╡реЗ JSON response рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ default values рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ `None` рдирд╣реАрдВред
|
|
|
|
рд╡реЗ list (`[]`), `10.5` рдХрд╛ `float`, рдЖрджрд┐ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
///
|
|
|
|
### `response_model_include` рдФрд░ `response_model_exclude` { #response-model-include-and-response-model-exclude }
|
|
|
|
рдЖрдк *path operation decorator* parameters `response_model_include` рдФрд░ `response_model_exclude` рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
рд╡реЗ include рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП attributes рдХреЗ рдирд╛рдореЛрдВ рд╡рд╛рд▓рд╛ `str` рдХрд╛ `set` рд▓реЗрддреЗ рд╣реИрдВ (рдмрд╛рдХреА рдХреЛ omit рдХрд░рддреЗ рд╣реБрдП) рдпрд╛ exclude рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдмрд╛рдХреА рдХреЛ include рдХрд░рддреЗ рд╣реБрдП)ред
|
|
|
|
рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ Pydantic model рд╣реИ рдФрд░ рдЖрдк output рд╕реЗ рдХреБрдЫ data remove рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ quick shortcut рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрди parameters рдХреЗ рдмрдЬрд╛рдп, multiple classes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдКрдкрд░ рджрд┐рдП рдЧрдП ideas рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА recommendation рд╣реИред
|
|
|
|
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ app рдХреЗ OpenAPI (рдФрд░ docs) рдореЗрдВ generated JSON Schema рдлрд┐рд░ рднреА complete model рдХреЗ рд▓рд┐рдП рд╣реА рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рдЖрдк рдХреБрдЫ attributes omit рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `response_model_include` рдпрд╛ `response_model_exclude` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
|
|
|
|
рдпрд╣ `response_model_by_alias` рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
|
|
|
|
///
|
|
|
|
{* ../../docs_src/response_model/tutorial005_py310.py hl[29,35] *}
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
Syntax `{"name", "description"}` рдЙрди рджреЛ values рдХреЗ рд╕рд╛рде рдПрдХ `set` рдмрдирд╛рддрд╛ рд╣реИред
|
|
|
|
рдпрд╣ `set(["name", "description"])` рдХреЗ equivalent рд╣реИред
|
|
|
|
///
|
|
|
|
#### `set`s рдХреЗ рдмрдЬрд╛рдп `list`s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ { #using-lists-instead-of-sets }
|
|
|
|
рдЕрдЧрд░ рдЖрдк `set` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп `list` рдпрд╛ `tuple` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ FastAPI рдлрд┐рд░ рднреА рдЙрд╕реЗ `set` рдореЗрдВ convert рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдпрд╣ рд╕рд╣реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
|
|
|
|
{* ../../docs_src/response_model/tutorial006_py310.py hl[29,35] *}
|
|
|
|
## Recap { #recap }
|
|
|
|
Response models define рдХрд░рдиреЗ рдФрд░ рдЦрд╛рд╕рдХрд░ private data рдХреЛ filter out рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП *path operation decorator* рдХреЗ parameter `response_model` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
|
|
|
|
рдХреЗрд╡рд▓ explicitly set рдХрд┐рдП рдЧрдП values return рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `response_model_exclude_unset` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
|