Files
fastapi/docs/hi/docs/tutorial/response-model.md
T
452e526877 ЁЯМР Update translations for hi (update-outdated) (#16212)
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>
2026-08-19 10:58:07 +02:00

26 KiB

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

рдХреБрдЫ 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

рдЕрдЧрд░ рдЖрдк 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 рдХрд░реЗрдВ

рдпрд╣рд╛рдБ рд╣рдо рдПрдХ UserIn model declare рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ plaintext password рд╣реЛрдЧрд╛:

{* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *}

/// note | рдиреЛрдЯ

EmailStr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ email-validator install рдХрд░реЗрдВред

рдЗрд╕реЗ рдЕрдкрдиреЗ project рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

$ uv add email-validator

рдпрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде:

$ 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 рдЬреЛрдбрд╝реЗрдВ

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо 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

рдЗрд╕ case рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ models рдЕрд▓рдЧ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдордиреЗ function return type рдХреЛ UserOut рдХреЗ рд░реВрдк рдореЗрдВ annotate рдХрд┐рдпрд╛, рддреЛ editor рдФрд░ tools рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдо invalid type return рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрд▓рдЧ classes рд╣реИрдВред

рдЗрд╕реАрд▓рд┐рдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕реЗ response_model parameter рдореЗрдВ declare рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

...рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХреИрд╕реЗ overcome рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред

Return Type рдФрд░ 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

рдкрд╣рд▓реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ 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 рдХреЗ рд▓рд┐рдП, рдпрд╣ 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 рдореЗрдВ рджреЗрдЦреЗрдВ

рдЬрдм рдЖрдк automatic docs рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк check рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ input model рдФрд░ output model рджреЛрдиреЛрдВ рдХрд╛ рдЕрдкрдирд╛ JSON Schema рд╣реЛрдЧрд╛:

рдФрд░ рджреЛрдиреЛрдВ models interactive API documentation рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдПрдБрдЧреЗ:

рдЕрдиреНрдп Return Type Annotations

рдРрд╕реЗ cases рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ return рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ valid Pydantic field рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдЙрд╕реЗ function рдореЗрдВ annotate рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ tooling (editor, mypy, рдЖрджрд┐) рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП support рдХреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕реАрдзреЗ Response Return рдХрд░реЗрдВ

рд╕рдмрд╕реЗ common case рд╣реЛрдЧрд╛ advanced docs рдореЗрдВ рдмрд╛рдж рдореЗрдВ рд╕рдордЭрд╛рдП рдЕрдиреБрд╕рд╛рд░ рд╕реАрдзреЗ Response return рдХрд░рдирд╛ред

{* ../../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 рдХрд░реЗрдВ

рдЖрдк 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

рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдХреЛрдИ рдЕрдиреНрдп arbitrary object return рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ valid Pydantic type рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕реЗ database object) рдФрд░ рдЖрдк рдЙрд╕реЗ function рдореЗрдВ рдЙрд╕реА рддрд░рд╣ annotate рдХрд░рддреЗ рд╣реИрдВ, рддреЛ FastAPI рдЙрд╕ type annotation рд╕реЗ Pydantic response model рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛, рдФрд░ fail рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдРрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ types рдХреЗ рдмреАрдЪ union рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛ рдЬрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ 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 рдХрд░реЗрдВ

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП, рдЖрдк рд╢рд╛рдпрдж 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 рдореЗрдВ 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдЖрдк 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 рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛) рд╣реЛрдЧрд╛:

{
    "name": "Foo",
    "price": 50.2
}

/// note | рдиреЛрдЯ

рдЖрдк рдЗрд╕рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • response_model_exclude_defaults=True
  • response_model_exclude_none=True

рдЬреИрд╕рд╛ рдХрд┐ exclude_defaults рдФрд░ exclude_none рдХреЗ рд▓рд┐рдП Pydantic docs рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

///

Defaults рд╡рд╛рд▓реЗ fields рдХреЗ рд▓рд┐рдП values рд╡рд╛рд▓рд╛ data

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ data рдореЗрдВ model рдХреЗ default values рд╡рд╛рд▓реЗ fields рдХреЗ рд▓рд┐рдП values рд╣реИрдВ, рдЬреИрд╕реЗ ID bar рд╡рд╛рд▓рд╛ item:

{
    "name": "Bar",
    "description": "The bartenders",
    "price": 62,
    "tax": 20.2
}

рддреЛ рд╡реЗ response рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред

Defaults рдЬреИрд╕реЗ рд╣реА values рд╡рд╛рд▓рд╛ data

рдЕрдЧрд░ data рдореЗрдВ default values рдЬреИрд╕реЗ рд╣реА values рд╣реИрдВ, рдЬреИрд╕реЗ ID baz рд╡рд╛рд▓рд╛ item:

{
    "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

рдЖрдк 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 рд╣реИред

///

sets рдХреЗ рдмрдЬрд╛рдп lists рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЕрдЧрд░ рдЖрдк set рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп list рдпрд╛ tuple рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ FastAPI рдлрд┐рд░ рднреА рдЙрд╕реЗ set рдореЗрдВ convert рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдпрд╣ рд╕рд╣реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

{* ../../docs_src/response_model/tutorial006_py310.py hl[29,35] *}

Recap

Response models define рдХрд░рдиреЗ рдФрд░ рдЦрд╛рд╕рдХрд░ private data рдХреЛ filter out рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП path operation decorator рдХреЗ parameter response_model рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдХреЗрд╡рд▓ explicitly set рдХрд┐рдП рдЧрдП values return рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП response_model_exclude_unset рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред