From 4a6a87674ae049935d73f800768891bba8ed50c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Tue, 16 Dec 2025 12:44:10 -0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A5=20Remove=20translation=20to=20emoj?= =?UTF-8?q?i=20to=20simplify=20the=20new=20setup=20with=20LLM=20autotransl?= =?UTF-8?q?ations=20(#14541)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/em/docs/advanced/additional-responses.md | 247 ------ .../docs/advanced/additional-status-codes.md | 41 - .../em/docs/advanced/advanced-dependencies.md | 65 -- docs/em/docs/advanced/async-tests.md | 93 --- docs/em/docs/advanced/behind-a-proxy.md | 359 --------- docs/em/docs/advanced/custom-response.md | 303 -------- docs/em/docs/advanced/dataclasses.md | 97 --- docs/em/docs/advanced/events.md | 163 ---- docs/em/docs/advanced/generate-clients.md | 238 ------ docs/em/docs/advanced/index.md | 27 - docs/em/docs/advanced/middleware.md | 95 --- docs/em/docs/advanced/openapi-callbacks.md | 186 ----- .../path-operation-advanced-configuration.md | 172 ----- .../advanced/response-change-status-code.md | 31 - docs/em/docs/advanced/response-cookies.md | 51 -- docs/em/docs/advanced/response-directly.md | 65 -- docs/em/docs/advanced/response-headers.md | 41 - .../docs/advanced/security/http-basic-auth.md | 107 --- docs/em/docs/advanced/security/index.md | 19 - .../docs/advanced/security/oauth2-scopes.md | 274 ------- docs/em/docs/advanced/settings.md | 396 ---------- docs/em/docs/advanced/sub-applications.md | 67 -- docs/em/docs/advanced/templates.md | 84 -- docs/em/docs/advanced/testing-dependencies.md | 53 -- docs/em/docs/advanced/testing-events.md | 5 - docs/em/docs/advanced/testing-websockets.md | 13 - .../docs/advanced/using-request-directly.md | 56 -- docs/em/docs/advanced/websockets.md | 186 ----- docs/em/docs/advanced/wsgi.md | 35 - docs/em/docs/alternatives.md | 485 ------------ docs/em/docs/async.md | 442 ----------- docs/em/docs/benchmarks.md | 34 - docs/em/docs/deployment/concepts.md | 323 -------- docs/em/docs/deployment/docker.md | 731 ------------------ docs/em/docs/deployment/https.md | 199 ----- docs/em/docs/deployment/index.md | 21 - docs/em/docs/deployment/manually.md | 159 ---- docs/em/docs/deployment/server-workers.md | 181 ----- docs/em/docs/deployment/versions.md | 93 --- docs/em/docs/features.md | 201 ----- docs/em/docs/help-fastapi.md | 269 ------- docs/em/docs/history-design-future.md | 79 -- docs/em/docs/how-to/conditional-openapi.md | 56 -- .../docs/how-to/custom-request-and-route.md | 109 --- docs/em/docs/how-to/extending-openapi.md | 83 -- docs/em/docs/how-to/graphql.md | 60 -- docs/em/docs/index.md | 474 ------------ docs/em/docs/project-generation.md | 84 -- docs/em/docs/python-types.md | 542 ------------- docs/em/docs/tutorial/background-tasks.md | 84 -- docs/em/docs/tutorial/bigger-applications.md | 530 ------------- docs/em/docs/tutorial/body-fields.md | 60 -- docs/em/docs/tutorial/body-multiple-params.md | 171 ---- docs/em/docs/tutorial/body-nested-models.md | 247 ------ docs/em/docs/tutorial/body-updates.md | 100 --- docs/em/docs/tutorial/body.md | 162 ---- docs/em/docs/tutorial/cookie-params.md | 35 - docs/em/docs/tutorial/cors.md | 85 -- docs/em/docs/tutorial/debugging.md | 113 --- .../dependencies/classes-as-dependencies.md | 180 ----- ...pendencies-in-path-operation-decorators.md | 69 -- .../dependencies/dependencies-with-yield.md | 232 ------ .../dependencies/global-dependencies.md | 15 - docs/em/docs/tutorial/dependencies/index.md | 212 ----- .../tutorial/dependencies/sub-dependencies.md | 86 --- docs/em/docs/tutorial/encoder.md | 35 - docs/em/docs/tutorial/extra-data-types.md | 62 -- docs/em/docs/tutorial/extra-models.md | 211 ----- docs/em/docs/tutorial/first-steps.md | 335 -------- docs/em/docs/tutorial/handling-errors.md | 257 ------ docs/em/docs/tutorial/header-params.md | 91 --- docs/em/docs/tutorial/index.md | 83 -- docs/em/docs/tutorial/metadata.md | 111 --- docs/em/docs/tutorial/middleware.md | 66 -- .../tutorial/path-operation-configuration.md | 107 --- .../path-params-numeric-validations.md | 117 --- docs/em/docs/tutorial/path-params.md | 256 ------ .../tutorial/query-params-str-validations.md | 320 -------- docs/em/docs/tutorial/query-params.md | 187 ----- docs/em/docs/tutorial/request-files.md | 172 ----- .../docs/tutorial/request-forms-and-files.md | 37 - docs/em/docs/tutorial/request-forms.md | 69 -- docs/em/docs/tutorial/response-model.md | 340 -------- docs/em/docs/tutorial/response-status-code.md | 101 --- docs/em/docs/tutorial/schema-extra-example.md | 110 --- docs/em/docs/tutorial/security/first-steps.md | 197 ----- .../tutorial/security/get-current-user.md | 105 --- docs/em/docs/tutorial/security/index.md | 106 --- docs/em/docs/tutorial/security/oauth2-jwt.md | 275 ------- .../docs/tutorial/security/simple-oauth2.md | 289 ------- docs/em/docs/tutorial/static-files.md | 40 - docs/em/docs/tutorial/testing.md | 185 ----- docs/em/mkdocs.yml | 1 - 93 files changed, 14840 deletions(-) delete mode 100644 docs/em/docs/advanced/additional-responses.md delete mode 100644 docs/em/docs/advanced/additional-status-codes.md delete mode 100644 docs/em/docs/advanced/advanced-dependencies.md delete mode 100644 docs/em/docs/advanced/async-tests.md delete mode 100644 docs/em/docs/advanced/behind-a-proxy.md delete mode 100644 docs/em/docs/advanced/custom-response.md delete mode 100644 docs/em/docs/advanced/dataclasses.md delete mode 100644 docs/em/docs/advanced/events.md delete mode 100644 docs/em/docs/advanced/generate-clients.md delete mode 100644 docs/em/docs/advanced/index.md delete mode 100644 docs/em/docs/advanced/middleware.md delete mode 100644 docs/em/docs/advanced/openapi-callbacks.md delete mode 100644 docs/em/docs/advanced/path-operation-advanced-configuration.md delete mode 100644 docs/em/docs/advanced/response-change-status-code.md delete mode 100644 docs/em/docs/advanced/response-cookies.md delete mode 100644 docs/em/docs/advanced/response-directly.md delete mode 100644 docs/em/docs/advanced/response-headers.md delete mode 100644 docs/em/docs/advanced/security/http-basic-auth.md delete mode 100644 docs/em/docs/advanced/security/index.md delete mode 100644 docs/em/docs/advanced/security/oauth2-scopes.md delete mode 100644 docs/em/docs/advanced/settings.md delete mode 100644 docs/em/docs/advanced/sub-applications.md delete mode 100644 docs/em/docs/advanced/templates.md delete mode 100644 docs/em/docs/advanced/testing-dependencies.md delete mode 100644 docs/em/docs/advanced/testing-events.md delete mode 100644 docs/em/docs/advanced/testing-websockets.md delete mode 100644 docs/em/docs/advanced/using-request-directly.md delete mode 100644 docs/em/docs/advanced/websockets.md delete mode 100644 docs/em/docs/advanced/wsgi.md delete mode 100644 docs/em/docs/alternatives.md delete mode 100644 docs/em/docs/async.md delete mode 100644 docs/em/docs/benchmarks.md delete mode 100644 docs/em/docs/deployment/concepts.md delete mode 100644 docs/em/docs/deployment/docker.md delete mode 100644 docs/em/docs/deployment/https.md delete mode 100644 docs/em/docs/deployment/index.md delete mode 100644 docs/em/docs/deployment/manually.md delete mode 100644 docs/em/docs/deployment/server-workers.md delete mode 100644 docs/em/docs/deployment/versions.md delete mode 100644 docs/em/docs/features.md delete mode 100644 docs/em/docs/help-fastapi.md delete mode 100644 docs/em/docs/history-design-future.md delete mode 100644 docs/em/docs/how-to/conditional-openapi.md delete mode 100644 docs/em/docs/how-to/custom-request-and-route.md delete mode 100644 docs/em/docs/how-to/extending-openapi.md delete mode 100644 docs/em/docs/how-to/graphql.md delete mode 100644 docs/em/docs/index.md delete mode 100644 docs/em/docs/project-generation.md delete mode 100644 docs/em/docs/python-types.md delete mode 100644 docs/em/docs/tutorial/background-tasks.md delete mode 100644 docs/em/docs/tutorial/bigger-applications.md delete mode 100644 docs/em/docs/tutorial/body-fields.md delete mode 100644 docs/em/docs/tutorial/body-multiple-params.md delete mode 100644 docs/em/docs/tutorial/body-nested-models.md delete mode 100644 docs/em/docs/tutorial/body-updates.md delete mode 100644 docs/em/docs/tutorial/body.md delete mode 100644 docs/em/docs/tutorial/cookie-params.md delete mode 100644 docs/em/docs/tutorial/cors.md delete mode 100644 docs/em/docs/tutorial/debugging.md delete mode 100644 docs/em/docs/tutorial/dependencies/classes-as-dependencies.md delete mode 100644 docs/em/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md delete mode 100644 docs/em/docs/tutorial/dependencies/dependencies-with-yield.md delete mode 100644 docs/em/docs/tutorial/dependencies/global-dependencies.md delete mode 100644 docs/em/docs/tutorial/dependencies/index.md delete mode 100644 docs/em/docs/tutorial/dependencies/sub-dependencies.md delete mode 100644 docs/em/docs/tutorial/encoder.md delete mode 100644 docs/em/docs/tutorial/extra-data-types.md delete mode 100644 docs/em/docs/tutorial/extra-models.md delete mode 100644 docs/em/docs/tutorial/first-steps.md delete mode 100644 docs/em/docs/tutorial/handling-errors.md delete mode 100644 docs/em/docs/tutorial/header-params.md delete mode 100644 docs/em/docs/tutorial/index.md delete mode 100644 docs/em/docs/tutorial/metadata.md delete mode 100644 docs/em/docs/tutorial/middleware.md delete mode 100644 docs/em/docs/tutorial/path-operation-configuration.md delete mode 100644 docs/em/docs/tutorial/path-params-numeric-validations.md delete mode 100644 docs/em/docs/tutorial/path-params.md delete mode 100644 docs/em/docs/tutorial/query-params-str-validations.md delete mode 100644 docs/em/docs/tutorial/query-params.md delete mode 100644 docs/em/docs/tutorial/request-files.md delete mode 100644 docs/em/docs/tutorial/request-forms-and-files.md delete mode 100644 docs/em/docs/tutorial/request-forms.md delete mode 100644 docs/em/docs/tutorial/response-model.md delete mode 100644 docs/em/docs/tutorial/response-status-code.md delete mode 100644 docs/em/docs/tutorial/schema-extra-example.md delete mode 100644 docs/em/docs/tutorial/security/first-steps.md delete mode 100644 docs/em/docs/tutorial/security/get-current-user.md delete mode 100644 docs/em/docs/tutorial/security/index.md delete mode 100644 docs/em/docs/tutorial/security/oauth2-jwt.md delete mode 100644 docs/em/docs/tutorial/security/simple-oauth2.md delete mode 100644 docs/em/docs/tutorial/static-files.md delete mode 100644 docs/em/docs/tutorial/testing.md delete mode 100644 docs/em/mkdocs.yml diff --git a/docs/em/docs/advanced/additional-responses.md b/docs/em/docs/advanced/additional-responses.md deleted file mode 100644 index 655fc7ab6..000000000 --- a/docs/em/docs/advanced/additional-responses.md +++ /dev/null @@ -1,247 +0,0 @@ -# ๐ŸŒ– ๐Ÿ“จ ๐Ÿ—„ - -/// warning - -๐Ÿ‘‰ ๐Ÿ‘ ๐Ÿง โ”. - -๐Ÿšฅ ๐Ÿ‘† โ–ถ๏ธ โฎ๏ธ **FastAPI**, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšซ ๐Ÿ’ช ๐Ÿ‘‰. - -/// - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ– ๐Ÿ“จ, โฎ๏ธ ๐ŸŒ– ๐Ÿ‘” ๐Ÿ“Ÿ, ๐Ÿ”‰ ๐Ÿ†Ž, ๐Ÿ“›, โ™’๏ธ. - -๐Ÿ‘ˆ ๐ŸŒ– ๐Ÿ“จ ๐Ÿ”œ ๐Ÿ”Œ ๐Ÿ—„ ๐Ÿ”—, ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ˜‘ ๐Ÿ› ๏ธ ๐Ÿฉบ. - -โœ‹๏ธ ๐Ÿ‘ˆ ๐ŸŒ– ๐Ÿ“จ ๐Ÿ‘† โœ”๏ธ โš’ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿ“จ `Response` ๐Ÿ’– `JSONResponse` ๐Ÿ”—, โฎ๏ธ ๐Ÿ‘† ๐Ÿ‘” ๐Ÿ“Ÿ & ๐ŸŽš. - -## ๐ŸŒ– ๐Ÿ“จ โฎ๏ธ `model` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* ๐Ÿ”ข `responses`. - -โšซ๏ธ ๐Ÿ“จ `dict`, ๐Ÿ”‘ ๐Ÿ‘” ๐Ÿ“Ÿ ๐Ÿ”  ๐Ÿ“จ, ๐Ÿ’– `200`, & ๐Ÿ’ฒ ๐ŸŽ `dict`โ“‚ โฎ๏ธ โ„น ๐Ÿ”  ๐Ÿ‘ซ. - -๐Ÿ”  ๐Ÿ‘ˆ ๐Ÿ“จ `dict`โ“‚ ๐Ÿ’ช โœ”๏ธ ๐Ÿ”‘ `model`, โš— Pydantic ๐Ÿท, ๐Ÿ’– `response_model`. - -**FastAPI** ๐Ÿ”œ โœŠ ๐Ÿ‘ˆ ๐Ÿท, ๐Ÿ— ๐Ÿšฎ ๐ŸŽป ๐Ÿ”— & ๐Ÿ”Œ โšซ๏ธ โ˜‘ ๐Ÿฅ‰ ๐Ÿ—„. - -๐Ÿ–ผ, ๐Ÿ“ฃ โž•1๏ธโƒฃ ๐Ÿ“จ โฎ๏ธ ๐Ÿ‘” ๐Ÿ“Ÿ `404` & Pydantic ๐Ÿท `Message`, ๐Ÿ‘† ๐Ÿ’ช โœ: - -{* ../../docs_src/additional_responses/tutorial001.py hl[18,22] *} - -/// note - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿ“จ `JSONResponse` ๐Ÿ”—. - -/// - -/// info - -`model` ๐Ÿ”‘ ๐Ÿšซ ๐Ÿ• ๐Ÿ—„. - -**FastAPI** ๐Ÿ”œ โœŠ Pydantic ๐Ÿท โšช๏ธโžก๏ธ ๐Ÿ“ค, ๐Ÿ— `JSON Schema`, & ๐Ÿšฎ โšซ๏ธ โ˜‘ ๐Ÿฅ‰. - -โ˜‘ ๐Ÿฅ‰: - -* ๐Ÿ”‘ `content`, ๐Ÿ‘ˆ โœ”๏ธ ๐Ÿ’ฒ โž•1๏ธโƒฃ ๐ŸŽป ๐ŸŽš (`dict`) ๐Ÿ‘ˆ ๐Ÿ”Œ: - * ๐Ÿ”‘ โฎ๏ธ ๐Ÿ“ป ๐Ÿ†Ž, โœ… `application/json`, ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ’ฒ โž•1๏ธโƒฃ ๐ŸŽป ๐ŸŽš, ๐Ÿ‘ˆ ๐Ÿ”Œ: - * ๐Ÿ”‘ `schema`, ๐Ÿ‘ˆ โœ”๏ธ ๐Ÿ’ฒ ๐ŸŽป ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿท, ๐Ÿ“ฅ โ˜‘ ๐Ÿฅ‰. - * **FastAPI** ๐Ÿšฎ ๐Ÿ”— ๐Ÿ“ฅ ๐ŸŒ ๐ŸŽป ๐Ÿ”— โž•1๏ธโƒฃ ๐Ÿฅ‰ ๐Ÿ‘† ๐Ÿ—„ โ†ฉ๏ธ โœ… โšซ๏ธ ๐Ÿ”—. ๐Ÿ‘‰ ๐ŸŒŒ, ๐ŸŽ ๐Ÿˆธ & ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ˆ ๐ŸŽป ๐Ÿ”— ๐Ÿ”—, ๐Ÿšš ๐Ÿ‘ป ๐Ÿ“Ÿ โšก ๐Ÿงฐ, โ™’๏ธ. - -/// - -๐Ÿ— ๐Ÿ“จ ๐Ÿ—„ ๐Ÿ‘‰ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”œ: - -```JSON hl_lines="3-12" -{ - "responses": { - "404": { - "description": "Additional Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Message" - } - } - } - }, - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Item" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } -} -``` - -๐Ÿ”— ๐Ÿ”— โž•1๏ธโƒฃ ๐Ÿฅ‰ ๐Ÿ”˜ ๐Ÿ—„ ๐Ÿ”—: - -```JSON hl_lines="4-16" -{ - "components": { - "schemas": { - "Message": { - "title": "Message", - "required": [ - "message" - ], - "type": "object", - "properties": { - "message": { - "title": "Message", - "type": "string" - } - } - }, - "Item": { - "title": "Item", - "required": [ - "id", - "value" - ], - "type": "object", - "properties": { - "id": { - "title": "Id", - "type": "string" - }, - "value": { - "title": "Value", - "type": "string" - } - } - }, - "ValidationError": { - "title": "ValidationError", - "required": [ - "loc", - "msg", - "type" - ], - "type": "object", - "properties": { - "loc": { - "title": "Location", - "type": "array", - "items": { - "type": "string" - } - }, - "msg": { - "title": "Message", - "type": "string" - }, - "type": { - "title": "Error Type", - "type": "string" - } - } - }, - "HTTPValidationError": { - "title": "HTTPValidationError", - "type": "object", - "properties": { - "detail": { - "title": "Detail", - "type": "array", - "items": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - } - } - } -} -``` - -## ๐ŸŒ– ๐Ÿ”‰ ๐Ÿ†Ž ๐Ÿ‘‘ ๐Ÿ“จ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘‰ ๐ŸŽ `responses` ๐Ÿ”ข ๐Ÿšฎ ๐ŸŽ ๐Ÿ”‰ ๐Ÿ†Ž ๐ŸŽ ๐Ÿ‘‘ ๐Ÿ“จ. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐ŸŒ– ๐Ÿ“ป ๐Ÿ†Ž `image/png`, ๐Ÿ“ฃ ๐Ÿ‘ˆ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* ๐Ÿ’ช ๐Ÿ“จ ๐ŸŽป ๐ŸŽš (โฎ๏ธ ๐Ÿ“ป ๐Ÿ†Ž `application/json`) โš–๏ธ ๐Ÿ‡ฉ๐Ÿ‡ด ๐Ÿ–ผ: - -{* ../../docs_src/additional_responses/tutorial002.py hl[19:24,28] *} - -/// note - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿ“จ ๐Ÿ–ผ โš™๏ธ `FileResponse` ๐Ÿ”—. - -/// - -/// info - -๐Ÿšฅ ๐Ÿ‘† โœ” ๐ŸŽ ๐Ÿ“ป ๐Ÿ†Ž ๐ŸŽฏ ๐Ÿ‘† `responses` ๐Ÿ”ข, FastAPI ๐Ÿ”œ ๐Ÿค” ๐Ÿ“จ โœ”๏ธ ๐ŸŽ ๐Ÿ“ป ๐Ÿ†Ž ๐Ÿ‘‘ ๐Ÿ“จ ๐ŸŽ“ (๐Ÿ”ข `application/json`). - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ โœ” ๐Ÿ›ƒ ๐Ÿ“จ ๐ŸŽ“ โฎ๏ธ `None` ๐Ÿšฎ ๐Ÿ“ป ๐Ÿ†Ž, FastAPI ๐Ÿ”œ โš™๏ธ `application/json` ๐Ÿ™† ๐ŸŒ– ๐Ÿ“จ ๐Ÿ‘ˆ โœ”๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿท. - -/// - -## ๐ŸŒ€ โ„น - -๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ€ ๐Ÿ“จ โ„น โšช๏ธโžก๏ธ ๐Ÿ’— ๐Ÿฅ‰, ๐Ÿ”Œ `response_model`, `status_code`, & `responses` ๐Ÿ”ข. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ `response_model`, โš™๏ธ ๐Ÿ”ข ๐Ÿ‘” ๐Ÿ“Ÿ `200` (โš–๏ธ ๐Ÿ›ƒ 1๏ธโƒฃ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช), & โคด๏ธ ๐Ÿ“ฃ ๐ŸŒ– โ„น ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿ“จ `responses`, ๐Ÿ”— ๐Ÿ—„ ๐Ÿ”—. - -**FastAPI** ๐Ÿ”œ ๐Ÿšง ๐ŸŒ– โ„น โšช๏ธโžก๏ธ `responses`, & ๐ŸŒ€ โšซ๏ธ โฎ๏ธ ๐ŸŽป ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ‘† ๐Ÿท. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“จ โฎ๏ธ ๐Ÿ‘” ๐Ÿ“Ÿ `404` ๐Ÿ‘ˆ โš™๏ธ Pydantic ๐Ÿท & โœ”๏ธ ๐Ÿ›ƒ `description`. - -& ๐Ÿ“จ โฎ๏ธ ๐Ÿ‘” ๐Ÿ“Ÿ `200` ๐Ÿ‘ˆ โš™๏ธ ๐Ÿ‘† `response_model`, โœ‹๏ธ ๐Ÿ”Œ ๐Ÿ›ƒ `example`: - -{* ../../docs_src/additional_responses/tutorial003.py hl[20:31] *} - -โšซ๏ธ ๐Ÿ”œ ๐ŸŒ ๐ŸŒ€ & ๐Ÿ”Œ ๐Ÿ‘† ๐Ÿ—„, & ๐ŸŽฆ ๐Ÿ› ๏ธ ๐Ÿฉบ: - - - -## ๐ŸŒ€ ๐Ÿ”ข ๐Ÿ“จ & ๐Ÿ›ƒ ๐Ÿ• - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š โœ”๏ธ ๐Ÿ” ๐Ÿ“จ ๐Ÿ‘ˆ โœ” ๐Ÿ“š *โžก ๐Ÿ› ๏ธ*, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’š ๐ŸŒ€ ๐Ÿ‘ซ โฎ๏ธ ๐Ÿ›ƒ ๐Ÿ“จ ๐Ÿ’š ๐Ÿ”  *โžก ๐Ÿ› ๏ธ*. - -๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ โš’ "๐Ÿ—" `dict` โฎ๏ธ `**dict_to_unpack`: - -```Python -old_dict = { - "old key": "old value", - "second old key": "second old value", -} -new_dict = {**old_dict, "new key": "new value"} -``` - -๐Ÿ“ฅ, `new_dict` ๐Ÿ”œ ๐Ÿ”Œ ๐ŸŒ ๐Ÿ”‘-๐Ÿ’ฒ ๐Ÿ‘ซ โšช๏ธโžก๏ธ `old_dict` โž• ๐Ÿ†• ๐Ÿ”‘-๐Ÿ’ฒ ๐Ÿ‘ซ: - -```Python -{ - "old key": "old value", - "second old key": "second old value", - "new key": "new value", -} -``` - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ˆ โš’ ๐Ÿค-โš™๏ธ ๐Ÿ”ข ๐Ÿ“จ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* & ๐ŸŒ€ ๐Ÿ‘ซ โฎ๏ธ ๐ŸŒ– ๐Ÿ›ƒ ๐Ÿ•. - -๐Ÿ–ผ: - -{* ../../docs_src/additional_responses/tutorial004.py hl[13:17,26] *} - -## ๐ŸŒ– โ„น ๐Ÿ”ƒ ๐Ÿ—„ ๐Ÿ“จ - -๐Ÿ‘€ โšซ๏ธโ” โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”Œ ๐Ÿ“จ, ๐Ÿ‘† ๐Ÿ’ช โœ… ๐Ÿ‘‰ ๐Ÿ“„ ๐Ÿ—„ ๐Ÿ”ง: - -* ๐Ÿ—„ ๐Ÿ“จ ๐ŸŽš, โšซ๏ธ ๐Ÿ”Œ `Response Object`. -* ๐Ÿ—„ ๐Ÿ“จ ๐ŸŽš, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”Œ ๐Ÿ•ณ โšช๏ธโžก๏ธ ๐Ÿ‘‰ ๐Ÿ”— ๐Ÿ”  ๐Ÿ“จ ๐Ÿ”˜ ๐Ÿ‘† `responses` ๐Ÿ”ข. โœ… `description`, `headers`, `content` (๐Ÿ”˜ ๐Ÿ‘‰ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ“ฃ ๐ŸŽ ๐Ÿ”‰ ๐Ÿ†Ž & ๐ŸŽป ๐Ÿ”—), & `links`. diff --git a/docs/em/docs/advanced/additional-status-codes.md b/docs/em/docs/advanced/additional-status-codes.md deleted file mode 100644 index 907c7e68e..000000000 --- a/docs/em/docs/advanced/additional-status-codes.md +++ /dev/null @@ -1,41 +0,0 @@ -# ๐ŸŒ– ๐Ÿ‘” ๐Ÿ“Ÿ - -๐Ÿ”ข, **FastAPI** ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“จ โš™๏ธ `JSONResponse`, ๐Ÿšฎ ๐ŸŽš ๐Ÿ‘† ๐Ÿ“จ โšช๏ธโžก๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* ๐Ÿ”˜ ๐Ÿ‘ˆ `JSONResponse`. - -โšซ๏ธ ๐Ÿ”œ โš™๏ธ ๐Ÿ”ข ๐Ÿ‘” ๐Ÿ“Ÿ โš–๏ธ 1๏ธโƒฃ ๐Ÿ‘† โš’ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. - -## ๐ŸŒ– ๐Ÿ‘” ๐Ÿ“Ÿ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ“จ ๐ŸŒ– ๐Ÿ‘” ๐Ÿ“Ÿ โ†–๏ธ โšช๏ธโžก๏ธ ๐Ÿ‘‘ 1๏ธโƒฃ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘ˆ ๐Ÿ›ฌ `Response` ๐Ÿ”—, ๐Ÿ’– `JSONResponse`, & โš’ ๐ŸŒ– ๐Ÿ‘” ๐Ÿ“Ÿ ๐Ÿ”—. - -๐Ÿ–ผ, โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š โœ”๏ธ *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ โœ” โ„น ๐Ÿฌ, & ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ 2๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ "๐Ÿ‘Œ" ๐Ÿ•โ” ๐Ÿ†. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’š โšซ๏ธ ๐Ÿšซ ๐Ÿ†• ๐Ÿฌ. & ๐Ÿ•โ” ๐Ÿฌ ๐Ÿšซ ๐Ÿ”€ โญ, โšซ๏ธ โœ ๐Ÿ‘ซ, & ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ 2๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ "โœ". - -๐Ÿ† ๐Ÿ‘ˆ, ๐Ÿ—„ `JSONResponse`, & ๐Ÿ“จ ๐Ÿ‘† ๐ŸŽš ๐Ÿ“ค ๐Ÿ”—, โš’ `status_code` ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š: - -{* ../../docs_src/additional_status_codes/tutorial001.py hl[4,25] *} - -/// warning - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“จ `Response` ๐Ÿ”—, ๐Ÿ’– ๐Ÿ–ผ ๐Ÿ”›, โšซ๏ธ ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ”—. - -โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐ŸŽป โฎ๏ธ ๐Ÿท, โ™’๏ธ. - -โš’ ๐Ÿ’ญ โšซ๏ธ โœ”๏ธ ๐Ÿ“Š ๐Ÿ‘† ๐Ÿ’š โšซ๏ธ โœ”๏ธ, & ๐Ÿ‘ˆ ๐Ÿ’ฒ โ˜‘ ๐ŸŽป (๐Ÿšฅ ๐Ÿ‘† โš™๏ธ `JSONResponse`). - -/// - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.responses import JSONResponse`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.responses` `fastapi.responses` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. ๐ŸŽ โฎ๏ธ `status`. - -/// - -## ๐Ÿ—„ & ๐Ÿ› ๏ธ ๐Ÿฉบ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“จ ๐ŸŒ– ๐Ÿ‘” ๐Ÿ“Ÿ & ๐Ÿ“จ ๐Ÿ”—, ๐Ÿ‘ซ ๐Ÿ† ๐Ÿšซ ๐Ÿ”Œ ๐Ÿ—„ ๐Ÿ”— (๐Ÿ› ๏ธ ๐Ÿฉบ), โ†ฉ๏ธ FastAPI ๐Ÿšซ โœ”๏ธ ๐ŸŒŒ ๐Ÿ’ญ โช โšซ๏ธโ” ๐Ÿ‘† ๐Ÿšถ ๐Ÿ“จ. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“„ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ“Ÿ, โš™๏ธ: [๐ŸŒ– ๐Ÿ“จ](additional-responses.md){.internal-link target=_blank}. diff --git a/docs/em/docs/advanced/advanced-dependencies.md b/docs/em/docs/advanced/advanced-dependencies.md deleted file mode 100644 index 3404c2687..000000000 --- a/docs/em/docs/advanced/advanced-dependencies.md +++ /dev/null @@ -1,65 +0,0 @@ -# ๐Ÿง ๐Ÿ”— - -## ๐Ÿ”— ๐Ÿ”— - -๐ŸŒ ๐Ÿ”— ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ‘€ ๐Ÿ”ง ๐Ÿ”ข โš–๏ธ ๐ŸŽ“. - -โœ‹๏ธ ๐Ÿ“ค ๐Ÿ’ช ๐Ÿ’ผ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’š ๐Ÿ’ช โš’ ๐Ÿ”ข ๐Ÿ”› ๐Ÿ”—, ๐Ÿต โœ”๏ธ ๐Ÿ“ฃ ๐Ÿ“š ๐ŸŽ ๐Ÿ”ข โš–๏ธ ๐ŸŽ“. - -โžก๏ธ ๐ŸŒˆ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ’š โœ”๏ธ ๐Ÿ”— ๐Ÿ‘ˆ โœ… ๐Ÿšฅ ๐Ÿ”ข ๐Ÿ”ข `q` ๐Ÿ”Œ ๐Ÿ”ง ๐ŸŽš. - -โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿ’š ๐Ÿ’ช ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ”ง ๐ŸŽš. - -## "๐Ÿ‡ง๐Ÿ‡ฒ" ๐Ÿ‘ - -๐Ÿ ๐Ÿ“ค ๐ŸŒŒ โš’ ๐Ÿ‘ ๐ŸŽ“ "๐Ÿ‡ง๐Ÿ‡ฒ". - -๐Ÿšซ ๐ŸŽ“ โšซ๏ธ (โ” โช ๐Ÿ‡ง๐Ÿ‡ฒ), โœ‹๏ธ ๐Ÿ‘ ๐Ÿ‘ˆ ๐ŸŽ“. - -๐Ÿ‘ˆ, ๐Ÿ‘ฅ ๐Ÿ“ฃ ๐Ÿ‘ฉโ€๐Ÿ”ฌ `__call__`: - -{* ../../docs_src/dependencies/tutorial011.py hl[10] *} - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘‰ `__call__` โšซ๏ธโ” **FastAPI** ๐Ÿ”œ โš™๏ธ โœ… ๐ŸŒ– ๐Ÿ”ข & ๐ŸŽง-๐Ÿ”—, & ๐Ÿ‘‰ โšซ๏ธโ” ๐Ÿ”œ ๐Ÿค™ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ’ฒ ๐Ÿ”ข ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* โช. - -## ๐Ÿ”— ๐Ÿ‘ - -& ๐Ÿ”œ, ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ `__init__` ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ‘ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ "๐Ÿ”—" ๐Ÿ”—: - -{* ../../docs_src/dependencies/tutorial011.py hl[7] *} - -๐Ÿ‘‰ ๐Ÿ’ผ, **FastAPI** ๐Ÿ† ๐Ÿšซ โฑ ๐Ÿ‘† โš–๏ธ ๐Ÿ’… ๐Ÿ”ƒ `__init__`, ๐Ÿ‘ฅ ๐Ÿ”œ โš™๏ธ โšซ๏ธ ๐Ÿ”— ๐Ÿ‘† ๐Ÿ“Ÿ. - -## โœ ๐Ÿ‘ - -๐Ÿ‘ฅ ๐Ÿ’ช โœ ๐Ÿ‘ ๐Ÿ‘‰ ๐ŸŽ“ โฎ๏ธ: - -{* ../../docs_src/dependencies/tutorial011.py hl[16] *} - -& ๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘ฅ ๐Ÿ’ช "๐Ÿ”—" ๐Ÿ‘† ๐Ÿ”—, ๐Ÿ‘ˆ ๐Ÿ”œ โœ”๏ธ `"bar"` ๐Ÿ”˜ โšซ๏ธ, ๐Ÿ”ข `checker.fixed_content`. - -## โš™๏ธ ๐Ÿ‘ ๐Ÿ”— - -โคด๏ธ, ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ ๐Ÿ‘‰ `checker` `Depends(checker)`, โ†ฉ๏ธ `Depends(FixedContentQueryChecker)`, โ†ฉ๏ธ ๐Ÿ”— ๐Ÿ‘, `checker`, ๐Ÿšซ ๐ŸŽ“ โšซ๏ธ. - -& ๐Ÿ•โ” โŽ ๐Ÿ”—, **FastAPI** ๐Ÿ”œ ๐Ÿค™ ๐Ÿ‘‰ `checker` ๐Ÿ’–: - -```Python -checker(q="somequery") -``` - -...& ๐Ÿšถโ€โ™€๏ธ โšซ๏ธโ” ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ’ฒ ๐Ÿ”— ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”ข `fixed_content_included`: - -{* ../../docs_src/dependencies/tutorial011.py hl[20] *} - -/// tip - -๐ŸŒ ๐Ÿ‘‰ ๐Ÿ’ช ๐Ÿ˜‘ ๐ŸŽญ. & โšซ๏ธ ๐Ÿ’ช ๐Ÿšซ ๐Ÿ“ถ ๐Ÿ†‘ โ” โšซ๏ธ โš . - -๐Ÿ‘ซ ๐Ÿ–ผ ๐Ÿ˜ซ ๐Ÿ™…, โœ‹๏ธ ๐ŸŽฆ โ” โšซ๏ธ ๐ŸŒ ๐Ÿ‘ท. - -๐Ÿ“ƒ ๐Ÿ”ƒ ๐Ÿ’‚โ€โ™‚, ๐Ÿ“ค ๐Ÿš™ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿ‘‰ ๐ŸŽ ๐ŸŒŒ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿค” ๐ŸŒ ๐Ÿ‘‰, ๐Ÿ‘† โช ๐Ÿ’ญ โ” ๐Ÿ‘ˆ ๐Ÿš™ ๐Ÿงฐ ๐Ÿ’‚โ€โ™‚ ๐Ÿ‘ท ๐Ÿ”˜. - -/// diff --git a/docs/em/docs/advanced/async-tests.md b/docs/em/docs/advanced/async-tests.md deleted file mode 100644 index 283d4aa09..000000000 --- a/docs/em/docs/advanced/async-tests.md +++ /dev/null @@ -1,93 +0,0 @@ -# ๐Ÿ” ๐Ÿ’ฏ - -๐Ÿ‘† โœ”๏ธ โช ๐Ÿ‘€ โ” ๐Ÿ’ฏ ๐Ÿ‘† **FastAPI** ๐Ÿˆธ โš™๏ธ ๐Ÿšš `TestClient`. ๐Ÿ†™ ๐Ÿ”œ, ๐Ÿ‘† โœ”๏ธ ๐Ÿ•ด ๐Ÿ‘€ โ” โœ ๐Ÿ” ๐Ÿ’ฏ, ๐Ÿต โš™๏ธ `async` ๐Ÿ”ข. - -โž– ๐Ÿ’ช โš™๏ธ ๐Ÿ” ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ’ฏ ๐Ÿ’ช โš , ๐Ÿ–ผ, ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ”ฌ ๐Ÿ‘† ๐Ÿ’ฝ ๐Ÿ”. ๐ŸŒˆ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ’ฏ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ‘† FastAPI ๐Ÿˆธ & โคด๏ธ โœ” ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป โช โœ โ˜‘ ๐Ÿ’ฝ ๐Ÿ’ฝ, โช โš™๏ธ ๐Ÿ” ๐Ÿ’ฝ ๐Ÿ—ƒ. - -โžก๏ธ ๐Ÿ‘€ โ” ๐Ÿ‘ฅ ๐Ÿ’ช โš’ ๐Ÿ‘ˆ ๐Ÿ‘ท. - -## pytest.mark.anyio - -๐Ÿšฅ ๐Ÿ‘ฅ ๐Ÿ’š ๐Ÿค™ ๐Ÿ” ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ’ฏ, ๐Ÿ‘† ๐Ÿ’ฏ ๐Ÿ”ข โœ”๏ธ ๐Ÿ”. AnyIO ๐Ÿšš ๐Ÿ‘Œ ๐Ÿ“ ๐Ÿ‘‰, ๐Ÿ‘ˆ โœ” ๐Ÿ‘ฅ โœ” ๐Ÿ‘ˆ ๐Ÿ’ฏ ๐Ÿ”ข ๐Ÿค™ ๐Ÿ”. - -## ๐Ÿ‡ธ๐Ÿ‡ฒ - -๐Ÿšฅ ๐Ÿ‘† **FastAPI** ๐Ÿˆธ โš™๏ธ ๐Ÿ˜ `def` ๐Ÿ”ข โ†ฉ๏ธ `async def`, โšซ๏ธ `async` ๐Ÿˆธ ๐Ÿ”˜. - -`TestClient` ๐Ÿ”จ ๐ŸŽฑ ๐Ÿ”˜ ๐Ÿค™ ๐Ÿ” FastAPI ๐Ÿˆธ ๐Ÿ‘† ๐Ÿ˜ `def` ๐Ÿ’ฏ ๐Ÿ”ข, โš™๏ธ ๐Ÿฉ โœณ. โœ‹๏ธ ๐Ÿ‘ˆ ๐ŸŽฑ ๐Ÿšซ ๐Ÿ‘ท ๐Ÿšซ๐Ÿ”œ ๐Ÿ•โ” ๐Ÿ‘ฅ โš™๏ธ โšซ๏ธ ๐Ÿ”˜ ๐Ÿ” ๐Ÿ”ข. ๐Ÿƒ ๐Ÿ‘† ๐Ÿ’ฏ ๐Ÿ”, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ™…โ€โ™‚ ๐Ÿ“ โš™๏ธ `TestClient` ๐Ÿ”˜ ๐Ÿ‘† ๐Ÿ’ฏ ๐Ÿ”ข. - -`TestClient` โš“๏ธ ๐Ÿ”› ๐Ÿ‡ธ๐Ÿ‡ฒ, & โ†ฉ๏ธ, ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ โšซ๏ธ ๐Ÿ”— ๐Ÿ’ฏ ๐Ÿ› ๏ธ. - -## ๐Ÿ–ผ - -๐Ÿ™… ๐Ÿ–ผ, โžก๏ธ ๐Ÿค” ๐Ÿ“ ๐Ÿ“Š ๐ŸŽ 1๏ธโƒฃ ๐Ÿ”ฌ [๐Ÿฆ ๐Ÿˆธ](../tutorial/bigger-applications.md){.internal-link target=_blank} & [๐Ÿ”ฌ](../tutorial/testing.md){.internal-link target=_blank}: - -``` -. -โ”œโ”€โ”€ app -โ”‚ย ย  โ”œโ”€โ”€ __init__.py -โ”‚ย ย  โ”œโ”€โ”€ main.py -โ”‚ย ย  โ””โ”€โ”€ test_main.py -``` - -๐Ÿ“ `main.py` ๐Ÿ”œ โœ”๏ธ: - -{* ../../docs_src/async_tests/main.py *} - -๐Ÿ“ `test_main.py` ๐Ÿ”œ โœ”๏ธ ๐Ÿ’ฏ `main.py`, โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ‘‰ ๐Ÿ”œ: - -{* ../../docs_src/async_tests/test_main.py *} - -## ๐Ÿƒ โšซ๏ธ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿƒ ๐Ÿ‘† ๐Ÿ’ฏ ๐ŸŒ ๐Ÿ“จ: - -
- -```console -$ pytest - ----> 100% -``` - -
- -## โ„น - -๐Ÿ“‘ `@pytest.mark.anyio` ๐Ÿ’ฌ โœณ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ’ฏ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿค™ ๐Ÿ”: - -{* ../../docs_src/async_tests/test_main.py hl[7] *} - -/// tip - -๐Ÿ—’ ๐Ÿ‘ˆ ๐Ÿ’ฏ ๐Ÿ”ข ๐Ÿ”œ `async def` โ†ฉ๏ธ `def` โญ ๐Ÿ•โ” โš™๏ธ `TestClient`. - -/// - -โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช โœ `AsyncClient` โฎ๏ธ ๐Ÿ“ฑ, & ๐Ÿ“จ ๐Ÿ” ๐Ÿ“จ โšซ๏ธ, โš™๏ธ `await`. - -{* ../../docs_src/async_tests/test_main.py hl[9:12] *} - -๐Ÿ‘‰ ๐ŸŒ“: - -```Python -response = client.get('/') -``` - -...๐Ÿ‘ˆ ๐Ÿ‘ฅ โš™๏ธ โš’ ๐Ÿ‘† ๐Ÿ“จ โฎ๏ธ `TestClient`. - -/// tip - -๐Ÿ—’ ๐Ÿ‘ˆ ๐Ÿ‘ฅ โš™๏ธ ๐Ÿ”/โŒ› โฎ๏ธ ๐Ÿ†• `AsyncClient` - ๐Ÿ“จ ๐Ÿ”. - -/// - -## ๐ŸŽ ๐Ÿ” ๐Ÿ”ข ๐Ÿค™ - -๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ”, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”œ ๐Ÿค™ (& `await`) ๐ŸŽ `async` ๐Ÿ”ข โ†–๏ธ โšช๏ธโžก๏ธ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ‘† FastAPI ๐Ÿˆธ ๐Ÿ‘† ๐Ÿ’ฏ, โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ”œ ๐Ÿค™ ๐Ÿ‘ซ ๐Ÿ™† ๐Ÿ™† ๐Ÿ‘† ๐Ÿ“Ÿ. - -/// tip - -๐Ÿšฅ ๐Ÿ‘† โš” `RuntimeError: Task attached to a different loop` ๐Ÿ•โ” ๐Ÿ› ๏ธ ๐Ÿ” ๐Ÿ”ข ๐Ÿค™ ๐Ÿ‘† ๐Ÿ’ฏ (โœ… ๐Ÿ•โ” โš™๏ธ โœณ MotorClient) ๐Ÿ’ญ ๐Ÿ”— ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ’ช ๐ŸŽ‰ โžฐ ๐Ÿ•ด ๐Ÿž ๐Ÿ” ๐Ÿ”ข, โœ… `'@app.on_event("startup")` โฒ. - -/// diff --git a/docs/em/docs/advanced/behind-a-proxy.md b/docs/em/docs/advanced/behind-a-proxy.md deleted file mode 100644 index 8b14152c9..000000000 --- a/docs/em/docs/advanced/behind-a-proxy.md +++ /dev/null @@ -1,359 +0,0 @@ -# โ›… ๐Ÿ—ณ - -โš , ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿ’ช โš™๏ธ **๐Ÿ—ณ** ๐Ÿ’ฝ ๐Ÿ’– Traefik โš–๏ธ ๐Ÿ‘Œ โฎ๏ธ ๐Ÿ“ณ ๐Ÿ‘ˆ ๐Ÿšฎ โž• โžก ๐Ÿ”ก ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ‘€ ๐Ÿ‘† ๐Ÿˆธ. - -๐Ÿ‘ซ ๐Ÿ’ผ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `root_path` ๐Ÿ”— ๐Ÿ‘† ๐Ÿˆธ. - -`root_path` ๐Ÿ› ๏ธ ๐Ÿšš ๐Ÿ”ซ ๐Ÿ”ง (๐Ÿ‘ˆ FastAPI ๐Ÿ— ๐Ÿ”›, ๐Ÿ”˜ ๐Ÿ’ƒ). - -`root_path` โš™๏ธ ๐Ÿต ๐Ÿ‘ซ ๐ŸŽฏ ๐Ÿ’ผ. - -& โšซ๏ธ โš™๏ธ ๐Ÿ”˜ ๐Ÿ•โ” ๐Ÿ—œ ๐ŸŽง-๐Ÿˆธ. - -## ๐Ÿ—ณ โฎ๏ธ ๐ŸŽž โžก ๐Ÿ”ก - -โœ”๏ธ ๐Ÿ—ณ โฎ๏ธ ๐ŸŽž โžก ๐Ÿ”ก, ๐Ÿ‘‰ ๐Ÿ’ผ, โ›“ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ โžก `/app` ๐Ÿ‘† ๐Ÿ“Ÿ, โœ‹๏ธ โคด๏ธ, ๐Ÿ‘† ๐Ÿšฎ ๐Ÿงฝ ๐Ÿ”› ๐Ÿ” (๐Ÿ—ณ) ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ‘† **FastAPI** ๐Ÿˆธ ๐Ÿ”ฝ โžก ๐Ÿ’– `/api/v1`. - -๐Ÿ‘‰ ๐Ÿ’ผ, โฎ๏ธ โžก `/app` ๐Ÿ”œ ๐Ÿค™ ๐Ÿฆ `/api/v1/app`. - -โœ‹๏ธ ๐ŸŒ ๐Ÿ‘† ๐Ÿ“Ÿ โœ ๐Ÿค” ๐Ÿ“ค `/app`. - -& ๐Ÿ—ณ ๐Ÿ”œ **"โŽ"** **โžก ๐Ÿ”ก** ๐Ÿ”› โœˆ โญ ๐Ÿ“ถ ๐Ÿ“จ Uvicorn, ๐Ÿšง ๐Ÿ‘† ๐Ÿˆธ ๐Ÿค” ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿฆ `/app`, ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ โ„น ๐ŸŒ ๐Ÿ‘† ๐Ÿ“Ÿ ๐Ÿ”Œ ๐Ÿ”ก `/api/v1`. - -๐Ÿ†™ ๐Ÿ“ฅ, ๐ŸŒ ๐Ÿ”œ ๐Ÿ‘ท ๐Ÿ›Ž. - -โœ‹๏ธ โคด๏ธ, ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“‚ ๐Ÿ› ๏ธ ๐Ÿฉบ ๐ŸŽš (๐Ÿ•ธ), โšซ๏ธ ๐Ÿ”œ โŒ› ๐Ÿคš ๐Ÿ—„ ๐Ÿ”— `/openapi.json`, โ†ฉ๏ธ `/api/v1/openapi.json`. - -, ๐Ÿ•ธ (๐Ÿ‘ˆ ๐Ÿƒ ๐Ÿ–ฅ) ๐Ÿ”œ ๐Ÿ”„ ๐Ÿ† `/openapi.json` & ๐Ÿšซ๐Ÿ”œ ๐Ÿ’ช ๐Ÿคš ๐Ÿ—„ ๐Ÿ”—. - -โ†ฉ๏ธ ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ—ณ โฎ๏ธ โžก ๐Ÿ”ก `/api/v1` ๐Ÿ‘† ๐Ÿ“ฑ, ๐Ÿ•ธ ๐Ÿ’ช โ˜• ๐Ÿ—„ ๐Ÿ”— `/api/v1/openapi.json`. - -```mermaid -graph LR - -browser("Browser") -proxy["Proxy on http://0.0.0.0:9999/api/v1/app"] -server["Server on http://127.0.0.1:8000/app"] - -browser --> proxy -proxy --> server -``` - -/// tip - -๐Ÿ“ข `0.0.0.0` ๐Ÿ›Ž โš™๏ธ โ›“ ๐Ÿ‘ˆ ๐Ÿ“‹ ๐Ÿ‘‚ ๐Ÿ”› ๐ŸŒ ๐Ÿ“ข ๐Ÿ’ช ๐Ÿ‘ˆ ๐ŸŽฐ/๐Ÿ’ฝ. - -/// - -๐Ÿฉบ ๐ŸŽš ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ—„ ๐Ÿ”— ๐Ÿ“ฃ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ› ๏ธ `server` ๐Ÿ”Ž `/api/v1` (โ›… ๐Ÿ—ณ). ๐Ÿ–ผ: - -```JSON hl_lines="4-8" -{ - "openapi": "3.0.2", - // More stuff here - "servers": [ - { - "url": "/api/v1" - } - ], - "paths": { - // More stuff here - } -} -``` - -๐Ÿ‘‰ ๐Ÿ–ผ, "๐Ÿ—ณ" ๐Ÿ’ช ๐Ÿ•ณ ๐Ÿ’– **Traefik**. & ๐Ÿ’ฝ ๐Ÿ”œ ๐Ÿ•ณ ๐Ÿ’– **Uvicorn**, ๐Ÿƒโ€โ™‚ ๐Ÿ‘† FastAPI ๐Ÿˆธ. - -### ๐Ÿšš `root_path` - -๐Ÿ† ๐Ÿ‘‰, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ“‹ โธ ๐ŸŽ› `--root-path` ๐Ÿ’–: - -
- -```console -$ uvicorn main:app --root-path /api/v1 - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ Hypercorn, โšซ๏ธ โœ”๏ธ ๐ŸŽ› `--root-path`. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ”ซ ๐Ÿ”ง ๐Ÿ”ฌ `root_path` ๐Ÿ‘‰ โš™๏ธ ๐Ÿ’ผ. - - & `--root-path` ๐Ÿ“‹ โธ ๐ŸŽ› ๐Ÿšš ๐Ÿ‘ˆ `root_path`. - -/// - -### โœ… โฎ๏ธ `root_path` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿคš โฎ๏ธ `root_path` โš™๏ธ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ”  ๐Ÿ“จ, โšซ๏ธ ๐Ÿ• `scope` ๐Ÿ“– (๐Ÿ‘ˆ ๐Ÿ• ๐Ÿ”ซ ๐Ÿ”Œ). - -๐Ÿ“ฅ ๐Ÿ‘ฅ โœ… โšซ๏ธ ๐Ÿ“ง ๐ŸŽฆ ๐ŸŽฏ. - -{* ../../docs_src/behind_a_proxy/tutorial001.py hl[8] *} - -โคด๏ธ, ๐Ÿšฅ ๐Ÿ‘† โ–ถ๏ธ Uvicorn โฎ๏ธ: - -
- -```console -$ uvicorn main:app --root-path /api/v1 - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -๐Ÿ“จ ๐Ÿ”œ ๐Ÿ•ณ ๐Ÿ’–: - -```JSON -{ - "message": "Hello World", - "root_path": "/api/v1" -} -``` - -### โš’ `root_path` FastAPI ๐Ÿ“ฑ - -๐Ÿ‘, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐ŸŒŒ ๐Ÿšš ๐Ÿ“‹ โธ ๐ŸŽ› ๐Ÿ’– `--root-path` โš–๏ธ ๐ŸŒ“, ๐Ÿ‘† ๐Ÿ’ช โš’ `root_path` ๐Ÿ”ข ๐Ÿ•โ” ๐Ÿ— ๐Ÿ‘† FastAPI ๐Ÿ“ฑ: - -{* ../../docs_src/behind_a_proxy/tutorial002.py hl[3] *} - -๐Ÿšถโ€โ™€๏ธ `root_path` `FastAPI` ๐Ÿ”œ ๐ŸŒ“ ๐Ÿšถโ€โ™€๏ธ `--root-path` ๐Ÿ“‹ โธ ๐ŸŽ› Uvicorn โš–๏ธ Hypercorn. - -### ๐Ÿ”ƒ `root_path` - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ’ฝ (Uvicorn) ๐Ÿ† ๐Ÿšซ โš™๏ธ ๐Ÿ‘ˆ `root_path` ๐Ÿ•ณ ๐Ÿ™† ๐ŸŒ˜ ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐Ÿ“ฑ. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถ โฎ๏ธ ๐Ÿ‘† ๐Ÿ–ฅ http://127.0.0.1:8000/app ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ˜ ๐Ÿ“จ: - -```JSON -{ - "message": "Hello World", - "root_path": "/api/v1" -} -``` - -, โšซ๏ธ ๐Ÿ† ๐Ÿšซ โŒ› ๐Ÿ” `http://127.0.0.1:8000/api/v1/app`. - -Uvicorn ๐Ÿ”œ โŒ› ๐Ÿ—ณ ๐Ÿ” Uvicorn `http://127.0.0.1:8000/app`, & โคด๏ธ โšซ๏ธ ๐Ÿ”œ ๐Ÿ—ณ ๐ŸŽฏ ๐Ÿšฎ โž• `/api/v1` ๐Ÿ”ก ๐Ÿ”› ๐Ÿ”. - -## ๐Ÿ”ƒ ๐Ÿ—ณ โฎ๏ธ ๐ŸŽž โžก ๐Ÿ”ก - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ—ณ โฎ๏ธ ๐ŸŽž โžก ๐Ÿ”ก ๐Ÿ•ด 1๏ธโƒฃ ๐ŸŒŒ ๐Ÿ”— โšซ๏ธ. - -๐ŸŽฒ ๐Ÿ“š ๐Ÿ’ผ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ‘ˆ ๐Ÿ—ณ ๐Ÿšซ โœ”๏ธ ๐Ÿš โžก ๐Ÿ”ก. - -๐Ÿ’ผ ๐Ÿ’– ๐Ÿ‘ˆ (๐Ÿต ๐ŸŽž โžก ๐Ÿ”ก), ๐Ÿ—ณ ๐Ÿ”œ ๐Ÿ‘‚ ๐Ÿ”› ๐Ÿ•ณ ๐Ÿ’– `https://myawesomeapp.com`, & โคด๏ธ ๐Ÿšฅ ๐Ÿ–ฅ ๐Ÿšถ `https://myawesomeapp.com/api/v1/app` & ๐Ÿ‘† ๐Ÿ’ฝ (โœ… Uvicorn) ๐Ÿ‘‚ ๐Ÿ”› `http://127.0.0.1:8000` ๐Ÿ—ณ (๐Ÿต ๐ŸŽž โžก ๐Ÿ”ก) ๐Ÿ”œ ๐Ÿ” Uvicorn ๐ŸŽ โžก: `http://127.0.0.1:8000/api/v1/app`. - -## ๐Ÿ”ฌ ๐ŸŒ โฎ๏ธ Traefik - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช ๐Ÿƒ ๐Ÿฅผ ๐ŸŒ โฎ๏ธ ๐ŸŽž โžก ๐Ÿ”ก โš™๏ธ Traefik. - -โฌ Traefik, โšซ๏ธ ๐Ÿ‘ ๐Ÿ’ฑ, ๐Ÿ‘† ๐Ÿ’ช โš— ๐Ÿ—œ ๐Ÿ“ & ๐Ÿƒ โšซ๏ธ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ“ถ. - -โคด๏ธ โœ ๐Ÿ“ `traefik.toml` โฎ๏ธ: - -```TOML hl_lines="3" -[entryPoints] - [entryPoints.http] - address = ":9999" - -[providers] - [providers.file] - filename = "routes.toml" -``` - -๐Ÿ‘‰ ๐Ÿ’ฌ Traefik ๐Ÿ‘‚ ๐Ÿ”› โ›ด 9๏ธโƒฃ9๏ธโƒฃ9๏ธโƒฃ9๏ธโƒฃ & โš™๏ธ โž•1๏ธโƒฃ ๐Ÿ“ `routes.toml`. - -/// tip - -๐Ÿ‘ฅ โš™๏ธ โ›ด 9๏ธโƒฃ9๏ธโƒฃ9๏ธโƒฃ9๏ธโƒฃ โ†ฉ๏ธ ๐Ÿฉ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” โ›ด 8๏ธโƒฃ0๏ธโƒฃ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿƒ โšซ๏ธ โฎ๏ธ ๐Ÿ“ก (`sudo`) ๐Ÿ˜Œ. - -/// - -๐Ÿ”œ โœ ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿ“ `routes.toml`: - -```TOML hl_lines="5 12 20" -[http] - [http.middlewares] - - [http.middlewares.api-stripprefix.stripPrefix] - prefixes = ["/api/v1"] - - [http.routers] - - [http.routers.app-http] - entryPoints = ["http"] - service = "app" - rule = "PathPrefix(`/api/v1`)" - middlewares = ["api-stripprefix"] - - [http.services] - - [http.services.app] - [http.services.app.loadBalancer] - [[http.services.app.loadBalancer.servers]] - url = "http://127.0.0.1:8000" -``` - -๐Ÿ‘‰ ๐Ÿ“ ๐Ÿ”— Traefik โš™๏ธ โžก ๐Ÿ”ก `/api/v1`. - -& โคด๏ธ โšซ๏ธ ๐Ÿ”œ โŽ ๐Ÿšฎ ๐Ÿ“จ ๐Ÿ‘† Uvicorn ๐Ÿƒโ€โ™‚ ๐Ÿ”› `http://127.0.0.1:8000`. - -๐Ÿ”œ โ–ถ๏ธ Traefik: - -
- -```console -$ ./traefik --configFile=traefik.toml - -INFO[0000] Configuration loaded from file: /home/user/awesomeapi/traefik.toml -``` - -
- -& ๐Ÿ”œ โ–ถ๏ธ ๐Ÿ‘† ๐Ÿ“ฑ โฎ๏ธ Uvicorn, โš™๏ธ `--root-path` ๐ŸŽ›: - -
- -```console -$ uvicorn main:app --root-path /api/v1 - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -### โœ… ๐Ÿ“จ - -๐Ÿ”œ, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถ ๐Ÿ“› โฎ๏ธ โ›ด Uvicorn: http://127.0.0.1:8000/app, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ˜ ๐Ÿ“จ: - -```JSON -{ - "message": "Hello World", - "root_path": "/api/v1" -} -``` - -/// tip - -๐Ÿ‘€ ๐Ÿ‘ˆ โœ‹๏ธ ๐Ÿ‘† ๐Ÿ” โšซ๏ธ `http://127.0.0.1:8000/app` โšซ๏ธ ๐ŸŽฆ `root_path` `/api/v1`, โœŠ โšช๏ธโžก๏ธ ๐ŸŽ› `--root-path`. - -/// - -& ๐Ÿ”œ ๐Ÿ“‚ ๐Ÿ“› โฎ๏ธ โ›ด Traefik, โœ… โžก ๐Ÿ”ก: http://127.0.0.1:9999/api/v1/app. - -๐Ÿ‘ฅ ๐Ÿคš ๐ŸŽ ๐Ÿ“จ: - -```JSON -{ - "message": "Hello World", - "root_path": "/api/v1" -} -``` - -โœ‹๏ธ ๐Ÿ‘‰ ๐Ÿ•ฐ ๐Ÿ“› โฎ๏ธ ๐Ÿ”ก โžก ๐Ÿšš ๐Ÿ—ณ: `/api/v1`. - -โ†—๏ธ, ๐Ÿ’ญ ๐Ÿ“ฅ ๐Ÿ‘ˆ ๐Ÿ‘ฑ ๐Ÿ”œ ๐Ÿ” ๐Ÿ“ฑ ๐Ÿ”˜ ๐Ÿ—ณ, โฌ โฎ๏ธ โžก ๐Ÿ”ก `/app/v1` "โ˜‘" 1๏ธโƒฃ. - -& โฌ ๐Ÿต โžก ๐Ÿ”ก (`http://127.0.0.1:8000/app`), ๐Ÿšš Uvicorn ๐Ÿ”—, ๐Ÿ”œ ๐ŸŽฏ _๐Ÿ—ณ_ (Traefik) ๐Ÿ” โšซ๏ธ. - -๐Ÿ‘ˆ ๐ŸŽฆ โ” ๐Ÿ—ณ (Traefik) โš™๏ธ โžก ๐Ÿ”ก & โ” ๐Ÿ’ฝ (Uvicorn) โš™๏ธ `root_path` โšช๏ธโžก๏ธ ๐ŸŽ› `--root-path`. - -### โœ… ๐Ÿฉบ ๐ŸŽš - -โœ‹๏ธ ๐Ÿ“ฅ ๐ŸŽŠ ๐Ÿ•. ๐Ÿ‘ถ - -"๐Ÿ›‚" ๐ŸŒŒ ๐Ÿ” ๐Ÿ“ฑ ๐Ÿ”œ ๐Ÿ”˜ ๐Ÿ—ณ โฎ๏ธ โžก ๐Ÿ”ก ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ”ฌ. , ๐Ÿ‘ฅ ๐Ÿ”œ โŒ›, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ”„ ๐Ÿฉบ ๐ŸŽš ๐Ÿฆ Uvicorn ๐Ÿ”—, ๐Ÿต โžก ๐Ÿ”ก ๐Ÿ“›, โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐Ÿ‘ท, โ†ฉ๏ธ โšซ๏ธ โŒ› ๐Ÿ” ๐Ÿ”˜ ๐Ÿ—ณ. - -๐Ÿ‘† ๐Ÿ’ช โœ… โšซ๏ธ http://127.0.0.1:8000/docs: - - - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘ฅ ๐Ÿ” ๐Ÿฉบ ๐ŸŽš "๐Ÿ›‚" ๐Ÿ“› โš™๏ธ ๐Ÿ—ณ โฎ๏ธ โ›ด `9999`, `/api/v1/docs`, โšซ๏ธ ๐Ÿ‘ท โ˜‘ โ— ๐Ÿ‘ถ - -๐Ÿ‘† ๐Ÿ’ช โœ… โšซ๏ธ http://127.0.0.1:9999/api/v1/docs: - - - -โ–ถ๏ธ๏ธ ๐Ÿ‘ฅ ๐Ÿ’š โšซ๏ธ. ๐Ÿ‘ถ ๐Ÿ‘ถ - -๐Ÿ‘‰ โ†ฉ๏ธ FastAPI โš™๏ธ ๐Ÿ‘‰ `root_path` โœ ๐Ÿ”ข `server` ๐Ÿ—„ โฎ๏ธ ๐Ÿ“› ๐Ÿšš `root_path`. - -## ๐ŸŒ– ๐Ÿ’ฝ - -/// warning - -๐Ÿ‘‰ ๐ŸŒ… ๐Ÿง โš™๏ธ ๐Ÿ’ผ. ๐Ÿ’ญ ๐Ÿ†“ ๐Ÿšถ โšซ๏ธ. - -/// - -๐Ÿ”ข, **FastAPI** ๐Ÿ”œ โœ `server` ๐Ÿ—„ ๐Ÿ”— โฎ๏ธ ๐Ÿ“› `root_path`. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšš ๐ŸŽ ๐ŸŽ› `servers`, ๐Ÿ–ผ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š *๐ŸŽ* ๐Ÿฉบ ๐ŸŽš ๐Ÿ”— โฎ๏ธ ๐Ÿ— & ๐Ÿญ ๐ŸŒ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถโ€โ™€๏ธ ๐Ÿ›ƒ ๐Ÿ“‡ `servers` & ๐Ÿ“ค `root_path` (โ†ฉ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ‘จโ€โคโ€๐Ÿ‘จ โ›… ๐Ÿ—ณ), **FastAPI** ๐Ÿ”œ ๐Ÿ“ฉ "๐Ÿ’ฝ" โฎ๏ธ ๐Ÿ‘‰ `root_path` โ–ถ๏ธ ๐Ÿ“‡. - -๐Ÿ–ผ: - -{* ../../docs_src/behind_a_proxy/tutorial003.py hl[4:7] *} - -๐Ÿ”œ ๐Ÿ— ๐Ÿ—„ ๐Ÿ”— ๐Ÿ’–: - -```JSON hl_lines="5-7" -{ - "openapi": "3.0.2", - // More stuff here - "servers": [ - { - "url": "/api/v1" - }, - { - "url": "https://stag.example.com", - "description": "Staging environment" - }, - { - "url": "https://prod.example.com", - "description": "Production environment" - } - ], - "paths": { - // More stuff here - } -} -``` - -/// tip - -๐Ÿ‘€ ๐Ÿš˜-๐Ÿ— ๐Ÿ’ฝ โฎ๏ธ `url` ๐Ÿ’ฒ `/api/v1`, โœŠ โšช๏ธโžก๏ธ `root_path`. - -/// - -๐Ÿฉบ ๐ŸŽš http://127.0.0.1:9999/api/v1/docs โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’–: - - - -/// tip - -๐Ÿฉบ ๐ŸŽš ๐Ÿ”œ ๐Ÿ”— โฎ๏ธ ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ–Š. - -/// - -### โŽ ๐Ÿง ๐Ÿ’ฝ โšช๏ธโžก๏ธ `root_path` - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’š **FastAPI** ๐Ÿ”Œ ๐Ÿง ๐Ÿ’ฝ โš™๏ธ `root_path`, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ”ข `root_path_in_servers=False`: - -{* ../../docs_src/behind_a_proxy/tutorial004.py hl[9] *} - -& โคด๏ธ โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐Ÿ”Œ โšซ๏ธ ๐Ÿ—„ ๐Ÿ”—. - -## ๐Ÿ—œ ๐ŸŽง-๐Ÿˆธ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ—ป ๐ŸŽง-๐Ÿˆธ (๐Ÿ”ฌ [๐ŸŽง ๐Ÿˆธ - ๐Ÿ—ป](sub-applications.md){.internal-link target=_blank}) โช โš™๏ธ ๐Ÿ—ณ โฎ๏ธ `root_path`, ๐Ÿ‘† ๐Ÿ’ช โšซ๏ธ ๐Ÿ›Ž, ๐Ÿ‘† ๐Ÿ”œ โŒ›. - -FastAPI ๐Ÿ”œ ๐Ÿ”˜ โš™๏ธ `root_path` ๐ŸŽ†, โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘ท. ๐Ÿ‘ถ diff --git a/docs/em/docs/advanced/custom-response.md b/docs/em/docs/advanced/custom-response.md deleted file mode 100644 index ab95b3e7b..000000000 --- a/docs/em/docs/advanced/custom-response.md +++ /dev/null @@ -1,303 +0,0 @@ -# ๐Ÿ›ƒ ๐Ÿ“จ - ๐Ÿ•ธ, ๐ŸŽ, ๐Ÿ“, ๐ŸŽ - -๐Ÿ”ข, **FastAPI** ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“จ โš™๏ธ `JSONResponse`. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” โšซ๏ธ ๐Ÿ›ฌ `Response` ๐Ÿ”— ๐Ÿ‘€ [๐Ÿ“จ ๐Ÿ“จ ๐Ÿ”—](response-directly.md){.internal-link target=_blank}. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“จ `Response` ๐Ÿ”—, ๐Ÿ“Š ๐Ÿ† ๐Ÿšซ ๐Ÿ” ๐Ÿ—œ, & ๐Ÿงพ ๐Ÿ† ๐Ÿšซ ๐Ÿ” ๐Ÿ— (๐Ÿ–ผ, ๐Ÿ”Œ ๐ŸŽฏ "๐Ÿ“ป ๐Ÿ†Ž", ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐ŸŽš `Content-Type` ๐Ÿ• ๐Ÿ— ๐Ÿ—„). - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ `Response` ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ, *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*. - -๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ“จ โšช๏ธโžก๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ”˜ ๐Ÿ‘ˆ `Response`. - -& ๐Ÿšฅ ๐Ÿ‘ˆ `Response` โœ”๏ธ ๐ŸŽป ๐Ÿ“ป ๐Ÿ†Ž (`application/json`), ๐Ÿ’– ๐Ÿ’ผ โฎ๏ธ `JSONResponse` & `UJSONResponse`, ๐Ÿ’ฝ ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ”œ ๐Ÿ” ๐Ÿ—œ (& โ›ฝ) โฎ๏ธ ๐Ÿ™† Pydantic `response_model` ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ“ฃ *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*. - -/// note - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿ“จ ๐ŸŽ“ โฎ๏ธ ๐Ÿ™…โ€โ™‚ ๐Ÿ“ป ๐Ÿ†Ž, FastAPI ๐Ÿ”œ โŒ› ๐Ÿ‘† ๐Ÿ“จ โœ”๏ธ ๐Ÿ™…โ€โ™‚ ๐ŸŽš, โšซ๏ธ ๐Ÿ”œ ๐Ÿšซ ๐Ÿ“„ ๐Ÿ“จ ๐Ÿ“ ๐Ÿšฎ ๐Ÿ— ๐Ÿ—„ ๐Ÿฉบ. - -/// - -## โš™๏ธ `ORJSONResponse` - -๐Ÿ–ผ, ๐Ÿšฅ ๐Ÿ‘† โœŠ ๐ŸŽญ, ๐Ÿ‘† ๐Ÿ’ช โŽ & โš™๏ธ `orjson` & โš’ ๐Ÿ“จ `ORJSONResponse`. - -๐Ÿ—„ `Response` ๐ŸŽ“ (๐ŸŽง-๐ŸŽ“) ๐Ÿ‘† ๐Ÿ’š โš™๏ธ & ๐Ÿ“ฃ โšซ๏ธ *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*. - -โญ• ๐Ÿ“จ, ๐Ÿ“จ `Response` ๐Ÿ”— ๐ŸŒ… โฉ ๐ŸŒ˜ ๐Ÿ›ฌ ๐Ÿ“–. - -๐Ÿ‘‰ โ†ฉ๏ธ ๐Ÿ”ข, FastAPI ๐Ÿ”œ โœ” ๐Ÿ”  ๐Ÿฌ ๐Ÿ”˜ & โš’ ๐Ÿ’ญ โšซ๏ธ ๐ŸŽป โฎ๏ธ ๐ŸŽป, โš™๏ธ ๐ŸŽ [๐ŸŽป ๐Ÿ”— ๐Ÿ”ข](../tutorial/encoder.md){.internal-link target=_blank} ๐Ÿ”ฌ ๐Ÿ”ฐ. ๐Ÿ‘‰ โšซ๏ธโ” โœ” ๐Ÿ‘† ๐Ÿ“จ **โŒ ๐ŸŽš**, ๐Ÿ–ผ ๐Ÿ’ฝ ๐Ÿท. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐ŸŽฏ ๐Ÿ‘ˆ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ›ฌ **๐ŸŽป โฎ๏ธ ๐ŸŽป**, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐Ÿ”— ๐Ÿ“จ ๐ŸŽ“ & โŽ โž• ๐ŸŒฅ ๐Ÿ‘ˆ FastAPI ๐Ÿ”œ โœ”๏ธ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘† ๐Ÿ“จ ๐ŸŽš ๐Ÿ”˜ `jsonable_encoder` โญ ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐Ÿ“จ ๐ŸŽ“. - -{* ../../docs_src/custom_response/tutorial001b.py hl[2,7] *} - -/// info - -๐Ÿ”ข `response_class` ๐Ÿ”œ โš™๏ธ ๐Ÿ”ฌ "๐Ÿ“ป ๐Ÿ†Ž" ๐Ÿ“จ. - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐ŸŽš `Content-Type` ๐Ÿ”œ โš’ `application/json`. - - & โšซ๏ธ ๐Ÿ”œ ๐Ÿ“„ โœ… ๐Ÿ—„. - -/// - -/// tip - -`ORJSONResponse` โณ ๐Ÿ•ด ๐Ÿ’ช FastAPI, ๐Ÿšซ ๐Ÿ’ƒ. - -/// - -## ๐Ÿ•ธ ๐Ÿ“จ - -๐Ÿ“จ ๐Ÿ“จ โฎ๏ธ ๐Ÿ•ธ ๐Ÿ”— โšช๏ธโžก๏ธ **FastAPI**, โš™๏ธ `HTMLResponse`. - -* ๐Ÿ—„ `HTMLResponse`. -* ๐Ÿšถโ€โ™€๏ธ `HTMLResponse` ๐Ÿ”ข `response_class` ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*. - -{* ../../docs_src/custom_response/tutorial002.py hl[2,7] *} - -/// info - -๐Ÿ”ข `response_class` ๐Ÿ”œ โš™๏ธ ๐Ÿ”ฌ "๐Ÿ“ป ๐Ÿ†Ž" ๐Ÿ“จ. - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐ŸŽš `Content-Type` ๐Ÿ”œ โš’ `text/html`. - - & โšซ๏ธ ๐Ÿ”œ ๐Ÿ“„ โœ… ๐Ÿ—„. - -/// - -### ๐Ÿ“จ `Response` - -๐Ÿ‘€ [๐Ÿ“จ ๐Ÿ“จ ๐Ÿ”—](response-directly.md){.internal-link target=_blank}, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” ๐Ÿ“จ ๐Ÿ”— ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*, ๐Ÿ›ฌ โšซ๏ธ. - -๐ŸŽ ๐Ÿ–ผ โšช๏ธโžก๏ธ ๐Ÿ”›, ๐Ÿ›ฌ `HTMLResponse`, ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’–: - -{* ../../docs_src/custom_response/tutorial003.py hl[2,7,19] *} - -/// warning - -`Response` ๐Ÿ“จ ๐Ÿ”— ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ† ๐Ÿšซ ๐Ÿ“„ ๐Ÿ—„ (๐Ÿ–ผ, `Content-Type` ๐Ÿ† ๐Ÿšซ ๐Ÿ“„) & ๐Ÿ† ๐Ÿšซ โญ ๐Ÿง ๐ŸŽ“ ๐Ÿฉบ. - -/// - -/// info - -โ†—๏ธ, โ˜‘ `Content-Type` ๐ŸŽš, ๐Ÿ‘” ๐Ÿ“Ÿ, โ™’๏ธ, ๐Ÿ”œ ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ `Response` ๐ŸŽš ๐Ÿ‘† ๐Ÿ“จ. - -/// - -### ๐Ÿ“„ ๐Ÿ—„ & ๐Ÿ” `Response` - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ” ๐Ÿ“จ โšช๏ธโžก๏ธ ๐Ÿ”˜ ๐Ÿ”ข โœ‹๏ธ ๐ŸŽ ๐Ÿ•ฐ ๐Ÿ“„ "๐Ÿ“ป ๐Ÿ†Ž" ๐Ÿ—„, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `response_class` ๐Ÿ”ข & ๐Ÿ“จ `Response` ๐ŸŽš. - -`response_class` ๐Ÿ”œ โคด๏ธ โš™๏ธ ๐Ÿ•ด ๐Ÿ“„ ๐Ÿ—„ *โžก ๐Ÿ› ๏ธ*, โœ‹๏ธ ๐Ÿ‘† `Response` ๐Ÿ”œ โš™๏ธ. - -#### ๐Ÿ“จ `HTMLResponse` ๐Ÿ”— - -๐Ÿ–ผ, โšซ๏ธ ๐Ÿ’ช ๐Ÿ•ณ ๐Ÿ’–: - -{* ../../docs_src/custom_response/tutorial004.py hl[7,21,23] *} - -๐Ÿ‘‰ ๐Ÿ–ผ, ๐Ÿ”ข `generate_html_response()` โช ๐Ÿ— & ๐Ÿ“จ `Response` โ†ฉ๏ธ ๐Ÿ›ฌ ๐Ÿ•ธ `str`. - -๐Ÿ›ฌ ๐Ÿ ๐Ÿค™ `generate_html_response()`, ๐Ÿ‘† โช ๐Ÿ›ฌ `Response` ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ” ๐Ÿ”ข **FastAPI** ๐ŸŽญ. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿšถโ€โ™€๏ธ `HTMLResponse` `response_class` ๐Ÿ’โ€โ™‚๏ธ, **FastAPI** ๐Ÿ”œ ๐Ÿ’ญ โ” ๐Ÿ“„ โšซ๏ธ ๐Ÿ—„ & ๐ŸŽ“ ๐Ÿฉบ ๐Ÿ•ธ โฎ๏ธ `text/html`: - - - -## ๐Ÿ’ช ๐Ÿ“จ - -๐Ÿ“ฅ ๐Ÿ’ช ๐Ÿ“จ. - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Response` ๐Ÿ“จ ๐Ÿ•ณ ๐Ÿ™†, โš–๏ธ โœ ๐Ÿ›ƒ ๐ŸŽง-๐ŸŽ“. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.responses import HTMLResponse`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.responses` `fastapi.responses` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -### `Response` - -๐Ÿ‘‘ `Response` ๐ŸŽ“, ๐ŸŒ ๐ŸŽ ๐Ÿ“จ ๐Ÿ˜– โšช๏ธโžก๏ธ โšซ๏ธ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ โšซ๏ธ ๐Ÿ”—. - -โšซ๏ธ ๐Ÿšซ ๐Ÿ“„ ๐Ÿ”ข: - -* `content` - `str` โš–๏ธ `bytes`. -* `status_code` - `int` ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ. -* `headers` - `dict` ๐ŸŽป. -* `media_type` - `str` ๐Ÿค ๐Ÿ“ป ๐Ÿ†Ž. ๐Ÿคถ โ“‚. `"text/html"`. - -FastAPI (๐Ÿค™ ๐Ÿ’ƒ) ๐Ÿ”œ ๐Ÿ” ๐Ÿ”Œ ๐ŸŽš-๐Ÿ“ ๐ŸŽš. โšซ๏ธ ๐Ÿ”œ ๐Ÿ”Œ ๐ŸŽš-๐Ÿ†Ž ๐ŸŽš, โš“๏ธ ๐Ÿ”› = & ๐Ÿ” = โœ ๐Ÿ†Ž. - -{* ../../docs_src/response_directly/tutorial002.py hl[1,18] *} - -### `HTMLResponse` - -โœŠ โœ โš–๏ธ ๐Ÿ”ข & ๐Ÿ“จ ๐Ÿ•ธ ๐Ÿ“จ, ๐Ÿ‘† โœ ๐Ÿ”›. - -### `PlainTextResponse` - -โœŠ โœ โš–๏ธ ๐Ÿ”ข & ๐Ÿ“จ โœ… โœ ๐Ÿ“จ. - -{* ../../docs_src/custom_response/tutorial005.py hl[2,7,9] *} - -### `JSONResponse` - -โœŠ ๐Ÿ’ฝ & ๐Ÿ“จ `application/json` ๐Ÿ—œ ๐Ÿ“จ. - -๐Ÿ‘‰ ๐Ÿ”ข ๐Ÿ“จ โš™๏ธ **FastAPI**, ๐Ÿ‘† โœ ๐Ÿ”›. - -### `ORJSONResponse` - -โฉ ๐ŸŽ› ๐ŸŽป ๐Ÿ“จ โš™๏ธ `orjson`, ๐Ÿ‘† โœ ๐Ÿ”›. - -### `UJSONResponse` - -๐ŸŽ› ๐ŸŽป ๐Ÿ“จ โš™๏ธ `ujson`. - -/// warning - -`ujson` ๐ŸŒ˜ ๐Ÿ’› ๐ŸŒ˜ ๐Ÿ ๐Ÿ—-๐Ÿ› ๏ธ โ” โšซ๏ธ ๐Ÿต ๐Ÿ“-๐Ÿ’ผ. - -/// - -{* ../../docs_src/custom_response/tutorial001.py hl[2,7] *} - -/// tip - -โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘ˆ `ORJSONResponse` ๐Ÿ’ช โฉ ๐ŸŽ›. - -/// - -### `RedirectResponse` - -๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” โŽ. โš™๏ธ 3๏ธโƒฃ0๏ธโƒฃ7๏ธโƒฃ ๐Ÿ‘” ๐Ÿ“Ÿ (๐Ÿ• โŽ) ๐Ÿ”ข. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ `RedirectResponse` ๐Ÿ”—: - -{* ../../docs_src/custom_response/tutorial006.py hl[2,9] *} - ---- - -โš–๏ธ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โšซ๏ธ `response_class` ๐Ÿ”ข: - - -{* ../../docs_src/custom_response/tutorial006b.py hl[2,7,9] *} - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘ˆ, โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ“› ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* ๐Ÿ”ข. - -๐Ÿ‘‰ ๐Ÿ’ผ, `status_code` โš™๏ธ ๐Ÿ”œ ๐Ÿ”ข 1๏ธโƒฃ `RedirectResponse`, โ” `307`. - ---- - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `status_code` ๐Ÿ”ข ๐ŸŒ€ โฎ๏ธ `response_class` ๐Ÿ”ข: - -{* ../../docs_src/custom_response/tutorial006c.py hl[2,7,9] *} - -### `StreamingResponse` - -โœŠ ๐Ÿ” ๐Ÿš‚ โš–๏ธ ๐Ÿ˜ ๐Ÿš‚/๐ŸŽป & ๐ŸŽ ๐Ÿ“จ ๐Ÿ’ช. - -{* ../../docs_src/custom_response/tutorial007.py hl[2,14] *} - -#### โš™๏ธ `StreamingResponse` โฎ๏ธ ๐Ÿ“-๐Ÿ’– ๐ŸŽš - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ“-๐Ÿ’– ๐ŸŽš (โœ… ๐ŸŽš ๐Ÿ“จ `open()`), ๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿš‚ ๐Ÿ”ข ๐Ÿ” ๐Ÿคญ ๐Ÿ‘ˆ ๐Ÿ“-๐Ÿ’– ๐ŸŽš. - -๐Ÿ‘ˆ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ โœ โšซ๏ธ ๐ŸŒ ๐Ÿฅ‡ ๐Ÿ’พ, & ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘ˆ ๐Ÿš‚ ๐Ÿ”ข `StreamingResponse`, & ๐Ÿ“จ โšซ๏ธ. - -๐Ÿ‘‰ ๐Ÿ”Œ ๐Ÿ“š ๐Ÿ—ƒ ๐Ÿ”— โฎ๏ธ โ˜ ๐Ÿ’พ, ๐Ÿ“น ๐Ÿญ, & ๐ŸŽ. - -```{ .python .annotate hl_lines="2 10-12 14" } -{!../../docs_src/custom_response/tutorial008.py!} -``` - -1๏ธโƒฃ. ๐Ÿ‘‰ ๐Ÿš‚ ๐Ÿ”ข. โšซ๏ธ "๐Ÿš‚ ๐Ÿ”ข" โ†ฉ๏ธ โšซ๏ธ ๐Ÿ”Œ `yield` ๐Ÿ“„ ๐Ÿ”˜. -2๏ธโƒฃ. โš™๏ธ `with` ๐Ÿซ, ๐Ÿ‘ฅ โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ“-๐Ÿ’– ๐ŸŽš ๐Ÿ“ช โฎ๏ธ ๐Ÿš‚ ๐Ÿ”ข ๐Ÿ”จ. , โฎ๏ธ โšซ๏ธ ๐Ÿ ๐Ÿ“จ ๐Ÿ“จ. -3๏ธโƒฃ. ๐Ÿ‘‰ `yield from` ๐Ÿ’ฌ ๐Ÿ”ข ๐Ÿ” ๐Ÿคญ ๐Ÿ‘ˆ ๐Ÿ‘œ ๐ŸŒŸ `file_like`. & โคด๏ธ, ๐Ÿ”  ๐Ÿ• ๐Ÿ”, ๐ŸŒพ ๐Ÿ‘ˆ ๐Ÿ• ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ ๐Ÿ‘‰ ๐Ÿš‚ ๐Ÿ”ข. - - , โšซ๏ธ ๐Ÿš‚ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“จ "๐Ÿญ" ๐Ÿ‘ท ๐Ÿ•ณ ๐Ÿ™† ๐Ÿ”˜. - - ๐Ÿ”จ โšซ๏ธ ๐Ÿ‘‰ ๐ŸŒŒ, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšฎ โšซ๏ธ `with` ๐Ÿซ, & ๐Ÿ‘ˆ ๐ŸŒŒ, ๐Ÿšš ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ“ช โฎ๏ธ ๐Ÿ. - -/// tip - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ“ฅ ๐Ÿ‘ฅ โš™๏ธ ๐Ÿฉ `open()` ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ•โ€๐Ÿฆบ `async` & `await`, ๐Ÿ‘ฅ ๐Ÿ“ฃ โžก ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ˜ `def`. - -/// - -### `FileResponse` - -๐Ÿ” ๐ŸŽ ๐Ÿ“ ๐Ÿ“จ. - -โœŠ ๐ŸŽ โš’ โŒ ๐Ÿ”— ๐ŸŒ˜ ๐ŸŽ ๐Ÿ“จ ๐Ÿ†Ž: - -* `path` - ๐Ÿ“ ๐Ÿ“ ๐ŸŽ. -* `headers` - ๐Ÿ™† ๐Ÿ›ƒ ๐ŸŽš ๐Ÿ”Œ, ๐Ÿ“–. -* `media_type` - ๐ŸŽป ๐Ÿค ๐Ÿ“ป ๐Ÿ†Ž. ๐Ÿšฅ ๐Ÿ”ข, ๐Ÿ“ โš–๏ธ โžก ๐Ÿ”œ โš™๏ธ ๐Ÿ”‘ ๐Ÿ“ป ๐Ÿ†Ž. -* `filename` - ๐Ÿšฅ โš’, ๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ”Œ ๐Ÿ“จ `Content-Disposition`. - -๐Ÿ“ ๐Ÿ“จ ๐Ÿ”œ ๐Ÿ”Œ โ˜‘ `Content-Length`, `Last-Modified` & `ETag` ๐ŸŽš. - -{* ../../docs_src/custom_response/tutorial009.py hl[2,10] *} - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `response_class` ๐Ÿ”ข: - -{* ../../docs_src/custom_response/tutorial009b.py hl[2,8,10] *} - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ“ โžก ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* ๐Ÿ”ข. - -## ๐Ÿ›ƒ ๐Ÿ“จ ๐ŸŽ“ - -๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ›ƒ ๐Ÿ“จ ๐ŸŽ“, ๐Ÿ˜– โšช๏ธโžก๏ธ `Response` & โš™๏ธ โšซ๏ธ. - -๐Ÿ–ผ, โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ `orjson`, โœ‹๏ธ โฎ๏ธ ๐Ÿ›ƒ โš’ ๐Ÿšซ โš™๏ธ ๐Ÿ”Œ `ORJSONResponse` ๐ŸŽ“. - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿ’š โšซ๏ธ ๐Ÿ“จ ๐Ÿ”‚ & ๐Ÿ“ ๐ŸŽป, ๐Ÿ‘† ๐Ÿ’š โš™๏ธ Orjson ๐ŸŽ› `orjson.OPT_INDENT_2`. - -๐Ÿ‘† ๐Ÿ’ช โœ `CustomORJSONResponse`. ๐Ÿ‘‘ ๐Ÿ‘œ ๐Ÿ‘† โœ”๏ธ โœ `Response.render(content)` ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ‘ˆ ๐Ÿ“จ ๐ŸŽš `bytes`: - -{* ../../docs_src/custom_response/tutorial009c.py hl[9:14,17] *} - -๐Ÿ”œ โ†ฉ๏ธ ๐Ÿ›ฌ: - -```json -{"message": "Hello World"} -``` - -...๐Ÿ‘‰ ๐Ÿ“จ ๐Ÿ”œ ๐Ÿ“จ: - -```json -{ - "message": "Hello World" -} -``` - -โ†—๏ธ, ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ”Ž ๐ŸŒ… ๐Ÿ‘ ๐ŸŒŒ โœŠ ๐Ÿ“ˆ ๐Ÿ‘‰ ๐ŸŒ˜ โ• ๐ŸŽป. ๐Ÿ‘ถ - -## ๐Ÿ”ข ๐Ÿ“จ ๐ŸŽ“ - -๐Ÿ•โ” ๐Ÿ— **FastAPI** ๐ŸŽ“ ๐Ÿ‘ โš–๏ธ `APIRouter` ๐Ÿ‘† ๐Ÿ’ช โœ” โ” ๐Ÿ“จ ๐ŸŽ“ โš™๏ธ ๐Ÿ”ข. - -๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ”ฌ ๐Ÿ‘‰ `default_response_class`. - -๐Ÿ–ผ ๐Ÿ”›, **FastAPI** ๐Ÿ”œ โš™๏ธ `ORJSONResponse` ๐Ÿ”ข, ๐ŸŒ *โžก ๐Ÿ› ๏ธ*, โ†ฉ๏ธ `JSONResponse`. - -{* ../../docs_src/custom_response/tutorial010.py hl[2,4] *} - -/// tip - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” `response_class` *โžก ๐Ÿ› ๏ธ* โญ. - -/// - -## ๐ŸŒ– ๐Ÿงพ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“ป ๐Ÿ†Ž & ๐Ÿ“š ๐ŸŽ โ„น ๐Ÿ—„ โš™๏ธ `responses`: [๐ŸŒ– ๐Ÿ“จ ๐Ÿ—„](additional-responses.md){.internal-link target=_blank}. diff --git a/docs/em/docs/advanced/dataclasses.md b/docs/em/docs/advanced/dataclasses.md deleted file mode 100644 index 4dd597262..000000000 --- a/docs/em/docs/advanced/dataclasses.md +++ /dev/null @@ -1,97 +0,0 @@ -# โš™๏ธ ๐ŸŽป - -FastAPI ๐Ÿ— ๐Ÿ”› ๐Ÿ” **Pydantic**, & ๐Ÿ‘ค โœ”๏ธ ๐ŸŒ ๐Ÿ‘† โ” โš™๏ธ Pydantic ๐Ÿท ๐Ÿ“ฃ ๐Ÿ“จ & ๐Ÿ“จ. - -โœ‹๏ธ FastAPI ๐Ÿ•โ€๐Ÿฆบ โš™๏ธ `dataclasses` ๐ŸŽ ๐ŸŒŒ: - -{* ../../docs_src/dataclasses/tutorial001.py hl[1,7:12,19:20] *} - -๐Ÿ‘‰ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ **Pydantic**, โšซ๏ธ โœ”๏ธ ๐Ÿ”— ๐Ÿ•โ€๐Ÿฆบ `dataclasses`. - -, โฎ๏ธ ๐Ÿ“Ÿ ๐Ÿ”› ๐Ÿ‘ˆ ๐Ÿšซ โš™๏ธ Pydantic ๐ŸŽฏ, FastAPI โš™๏ธ Pydantic ๐Ÿ—œ ๐Ÿ“š ๐Ÿฉ ๐ŸŽป Pydantic ๐Ÿ‘ ๐Ÿ› ๐ŸŽป. - -& โ†—๏ธ, โšซ๏ธ ๐Ÿ•โ€๐Ÿฆบ ๐ŸŽ: - -* ๐Ÿ’ฝ ๐Ÿ”ฌ -* ๐Ÿ’ฝ ๐Ÿ› ๏ธ -* ๐Ÿ’ฝ ๐Ÿงพ, โ™’๏ธ. - -๐Ÿ‘‰ ๐Ÿ‘ท ๐ŸŽ ๐ŸŒŒ โฎ๏ธ Pydantic ๐Ÿท. & โšซ๏ธ ๐Ÿค™ ๐Ÿ† ๐ŸŽ ๐ŸŒŒ ๐Ÿ”˜, โš™๏ธ Pydantic. - -/// info - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐ŸŽป ๐Ÿ’ช ๐Ÿšซ ๐ŸŒ Pydantic ๐Ÿท ๐Ÿ’ช. - -, ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿ’ช โš™๏ธ Pydantic ๐Ÿท. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ“š ๐ŸŽป ๐Ÿคฅ ๐Ÿคญ, ๐Ÿ‘‰ ๐Ÿ‘Œ ๐ŸŽฑ โš™๏ธ ๐Ÿ‘ซ ๐Ÿ‹๏ธ ๐Ÿ•ธ ๐Ÿ› ๏ธ โš™๏ธ FastAPI. ๐Ÿ‘ถ - -/// - -## ๐ŸŽป `response_model` - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `dataclasses` `response_model` ๐Ÿ”ข: - -{* ../../docs_src/dataclasses/tutorial002.py hl[1,7:13,19] *} - -๐ŸŽป ๐Ÿ”œ ๐Ÿ” ๐Ÿ—œ Pydantic ๐ŸŽป. - -๐Ÿ‘‰ ๐ŸŒŒ, ๐Ÿšฎ ๐Ÿ”— ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ†™ ๐Ÿ› ๏ธ ๐Ÿฉบ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข: - - - -## ๐ŸŽป ๐Ÿ” ๐Ÿ“Š ๐Ÿ“Š - -๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ€ `dataclasses` โฎ๏ธ ๐ŸŽ ๐Ÿ†Ž โœ โš’ ๐Ÿฆ ๐Ÿ“Š ๐Ÿ“Š. - -๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ โš™๏ธ Pydantic โฌ `dataclasses`. ๐Ÿ–ผ, ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ โŒ โฎ๏ธ ๐Ÿ” ๐Ÿ— ๐Ÿ› ๏ธ ๐Ÿงพ. - -๐Ÿ‘ˆ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽฏ ๐Ÿ’ฑ ๐Ÿฉ `dataclasses` โฎ๏ธ `pydantic.dataclasses`, โ” ๐Ÿ’ง-โ™ป: - -```{ .python .annotate hl_lines="1 5 8-11 14-17 23-25 28" } -{!../../docs_src/dataclasses/tutorial003.py!} -``` - -1๏ธโƒฃ. ๐Ÿ‘ฅ ๐Ÿ—„ `field` โšช๏ธโžก๏ธ ๐Ÿฉ `dataclasses`. - -2๏ธโƒฃ. `pydantic.dataclasses` ๐Ÿ’ง-โ™ป `dataclasses`. - -3๏ธโƒฃ. `Author` ๐ŸŽป ๐Ÿ”Œ ๐Ÿ“‡ `Item` ๐ŸŽป. - -4๏ธโƒฃ. `Author` ๐ŸŽป โš™๏ธ `response_model` ๐Ÿ”ข. - -5๏ธโƒฃ. ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ ๐Ÿฉ ๐Ÿ†Ž โœ โฎ๏ธ ๐ŸŽป ๐Ÿ“จ ๐Ÿ’ช. - - ๐Ÿ‘‰ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ“‡ `Item` ๐ŸŽป. - -6๏ธโƒฃ. ๐Ÿ“ฅ ๐Ÿ‘ฅ ๐Ÿ›ฌ ๐Ÿ“– ๐Ÿ‘ˆ ๐Ÿ”Œ `items` โ” ๐Ÿ“‡ ๐ŸŽป. - - FastAPI ๐ŸŽฏ โœ ๐Ÿ’ฝ ๐ŸŽป. - -7๏ธโƒฃ. ๐Ÿ“ฅ `response_model` โš™๏ธ ๐Ÿ†Ž โœ ๐Ÿ“‡ `Author` ๐ŸŽป. - - ๐Ÿ”„, ๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ€ `dataclasses` โฎ๏ธ ๐Ÿฉ ๐Ÿ†Ž โœ. - -8๏ธโƒฃ. ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘‰ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* โš™๏ธ ๐Ÿฅ” `def` โ†ฉ๏ธ `async def`. - - ๐Ÿ•ง, FastAPI ๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ€ `def` & `async def` ๐Ÿ’ช. - - ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช โ†—๏ธ ๐Ÿ”ƒ ๐Ÿ•โ” โš™๏ธ โ”, โœ… ๐Ÿ‘… ๐Ÿ“„ _"๐Ÿƒ โ“" _ ๐Ÿฉบ ๐Ÿ”ƒ `async` & `await`. - -9๏ธโƒฃ. ๐Ÿ‘‰ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿšซ ๐Ÿ›ฌ ๐ŸŽป (๐Ÿ‘ โšซ๏ธ ๐Ÿ’ช), โœ‹๏ธ ๐Ÿ“‡ ๐Ÿ“– โฎ๏ธ ๐Ÿ”— ๐Ÿ’ฝ. - - FastAPI ๐Ÿ”œ โš™๏ธ `response_model` ๐Ÿ”ข (๐Ÿ‘ˆ ๐Ÿ”Œ ๐ŸŽป) ๐Ÿ—œ ๐Ÿ“จ. - -๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ€ `dataclasses` โฎ๏ธ ๐ŸŽ ๐Ÿ†Ž โœ ๐Ÿ“š ๐ŸŽ ๐ŸŒ€ ๐Ÿ“จ ๐Ÿ— ๐Ÿ“Š ๐Ÿ“Š. - -โœ…-๐Ÿ“Ÿ โœ ๐Ÿ’โ€โ™‚ ๐Ÿ”› ๐Ÿ‘€ ๐ŸŒ… ๐ŸŽฏ โ„น. - -## ๐Ÿ’ก ๐ŸŒ… - -๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ€ `dataclasses` โฎ๏ธ ๐ŸŽ Pydantic ๐Ÿท, ๐Ÿ˜– โšช๏ธโžก๏ธ ๐Ÿ‘ซ, ๐Ÿ”Œ ๐Ÿ‘ซ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿท, โ™’๏ธ. - -๐Ÿ’ก ๐ŸŒ…, โœ… Pydantic ๐Ÿฉบ ๐Ÿ”ƒ ๐ŸŽป. - -## โฌ - -๐Ÿ‘‰ ๐Ÿ’ช โ†ฉ๏ธ FastAPI โฌ `0.67.0`. ๐Ÿ‘ถ diff --git a/docs/em/docs/advanced/events.md b/docs/em/docs/advanced/events.md deleted file mode 100644 index dcaac710e..000000000 --- a/docs/em/docs/advanced/events.md +++ /dev/null @@ -1,163 +0,0 @@ -# ๐Ÿ”† ๐ŸŽ‰ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ โš› (๐Ÿ“Ÿ) ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ› ๏ธ โญ ๐Ÿˆธ **โ–ถ๏ธ ๐Ÿ†™**. ๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ“Ÿ ๐Ÿ”œ ๐Ÿ› ๏ธ **๐Ÿ•**, **โญ** ๐Ÿˆธ **โ–ถ๏ธ ๐Ÿ“จ ๐Ÿ“จ**. - -๐ŸŽ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ โš› (๐Ÿ“Ÿ) ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ› ๏ธ ๐Ÿ•โ” ๐Ÿˆธ **๐Ÿคซ ๐Ÿ”ฝ**. ๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘‰ ๐Ÿ“Ÿ ๐Ÿ”œ ๐Ÿ› ๏ธ **๐Ÿ•**, **โฎ๏ธ** โœ”๏ธ ๐Ÿต ๐ŸŽฒ **๐Ÿ“š ๐Ÿ“จ**. - -โ†ฉ๏ธ ๐Ÿ‘‰ ๐Ÿ“Ÿ ๐Ÿ› ๏ธ โญ ๐Ÿˆธ **โ–ถ๏ธ** โœŠ ๐Ÿ“จ, & โ–ถ๏ธ๏ธ โฎ๏ธ โšซ๏ธ **๐Ÿ** ๐Ÿšš ๐Ÿ“จ, โšซ๏ธ ๐Ÿ“” ๐ŸŽ‚ ๐Ÿˆธ **๐Ÿ”†** (๐Ÿ”ค "๐Ÿ”†" ๐Ÿ”œ โš  ๐Ÿฅˆ ๐Ÿ‘ถ). - -๐Ÿ‘‰ ๐Ÿ’ช ๐Ÿ“ถ โš  โš’ ๐Ÿ†™ **โ„น** ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ‚ ๐Ÿ“ฑ, & ๐Ÿ‘ˆ **๐Ÿ’ฐ** ๐Ÿ‘ช ๐Ÿ“จ, &/โš–๏ธ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช **๐Ÿงน ๐Ÿ†™** โฎ๏ธ. ๐Ÿ–ผ, ๐Ÿ’ฝ ๐Ÿ”— ๐ŸŽฑ, โš–๏ธ ๐Ÿšš ๐Ÿ”— ๐ŸŽฐ ๐Ÿซ ๐Ÿท. - -## โš™๏ธ ๐Ÿ’ผ - -โžก๏ธ โ–ถ๏ธ โฎ๏ธ ๐Ÿ–ผ **โš™๏ธ ๐Ÿ’ผ** & โคด๏ธ ๐Ÿ‘€ โ” โŽ โšซ๏ธ โฎ๏ธ ๐Ÿ‘‰. - -โžก๏ธ ๐ŸŒˆ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ **๐ŸŽฐ ๐Ÿซ ๐Ÿท** ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ ๐Ÿต ๐Ÿ“จ. ๐Ÿ‘ถ - -๐ŸŽ ๐Ÿท ๐Ÿ”— ๐Ÿ‘ช ๐Ÿ“จ,, โšซ๏ธ ๐Ÿšซ 1๏ธโƒฃ ๐Ÿท ๐Ÿ“ ๐Ÿ“จ, โš–๏ธ 1๏ธโƒฃ ๐Ÿ“ ๐Ÿ‘ฉโ€๐Ÿ’ป โš–๏ธ ๐Ÿ•ณ ๐ŸŽ. - -โžก๏ธ ๐ŸŒˆ ๐Ÿ‘ˆ ๐Ÿšš ๐Ÿท ๐Ÿ’ช **โœŠ ๐Ÿ•ฐ**, โ†ฉ๏ธ โšซ๏ธ โœ”๏ธ โœ ๐Ÿ“š **๐Ÿ’ฝ โšช๏ธโžก๏ธ ๐Ÿ’พ**. ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’š โšซ๏ธ ๐Ÿ”  ๐Ÿ“จ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ โšซ๏ธ ๐Ÿ” ๐ŸŽš ๐Ÿ•น/๐Ÿ“, โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿ”œ โ›“ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ”œ **๐Ÿ“ ๐Ÿท** ๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒโ€โ™‚ ๐Ÿ™… ๐Ÿง ๐Ÿ’ฏ, โคด๏ธ ๐Ÿ‘ˆ ๐Ÿ’ฏ ๐Ÿ”œ **๐ŸŒ** โ†ฉ๏ธ โšซ๏ธ ๐Ÿ”œ โœ”๏ธ โŒ› ๐Ÿท ๐Ÿ“ โญ ๐Ÿ’†โ€โ™‚ ๐Ÿ’ช ๐Ÿƒ ๐Ÿ”ฌ ๐Ÿ• ๐Ÿ“Ÿ. - -๐Ÿ‘ˆ โšซ๏ธโ” ๐Ÿ‘ฅ ๐Ÿ”œ โŽ, โžก๏ธ ๐Ÿ“ ๐Ÿท โญ ๐Ÿ“จ ๐Ÿต, โœ‹๏ธ ๐Ÿ•ด โ–ถ๏ธ๏ธ โญ ๐Ÿˆธ โ–ถ๏ธ ๐Ÿ“จ ๐Ÿ“จ, ๐Ÿšซ โช ๐Ÿ“Ÿ โž– ๐Ÿ“. - -## ๐Ÿ”† - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ‘‰ *๐Ÿ•ด* & *๐Ÿคซ* โš› โš™๏ธ `lifespan` ๐Ÿ”ข `FastAPI` ๐Ÿ“ฑ, & "๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ" (๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ‘† โšซ๏ธโ” ๐Ÿ‘ˆ ๐Ÿฅˆ). - -โžก๏ธ โ–ถ๏ธ โฎ๏ธ ๐Ÿ–ผ & โคด๏ธ ๐Ÿ‘€ โšซ๏ธ โ„น. - -๐Ÿ‘ฅ โœ ๐Ÿ” ๐Ÿ”ข `lifespan()` โฎ๏ธ `yield` ๐Ÿ’– ๐Ÿ‘‰: - -{* ../../docs_src/events/tutorial003.py hl[16,19] *} - -๐Ÿ“ฅ ๐Ÿ‘ฅ โš– ๐Ÿ˜ฅ *๐Ÿ•ด* ๐Ÿ› ๏ธ ๐Ÿšš ๐Ÿท ๐Ÿšฎ (โŒ) ๐Ÿท ๐Ÿ”ข ๐Ÿ“– โฎ๏ธ ๐ŸŽฐ ๐Ÿซ ๐Ÿท โญ `yield`. ๐Ÿ‘‰ ๐Ÿ“Ÿ ๐Ÿ”œ ๐Ÿ› ๏ธ **โญ** ๐Ÿˆธ **โ–ถ๏ธ โœŠ ๐Ÿ“จ**, โฎ๏ธ *๐Ÿ•ด*. - -& โคด๏ธ, โ–ถ๏ธ๏ธ โฎ๏ธ `yield`, ๐Ÿ‘ฅ ๐Ÿšš ๐Ÿท. ๐Ÿ‘‰ ๐Ÿ“Ÿ ๐Ÿ”œ ๐Ÿ› ๏ธ **โฎ๏ธ** ๐Ÿˆธ **๐Ÿ ๐Ÿšš ๐Ÿ“จ**, โ–ถ๏ธ๏ธ โญ *๐Ÿคซ*. ๐Ÿ‘‰ ๐Ÿ’ช, ๐Ÿ–ผ, ๐Ÿš€ โ„น ๐Ÿ’– ๐Ÿ’พ โš–๏ธ ๐Ÿ’ป. - -/// tip - -`shutdown` ๐Ÿ”œ ๐Ÿ”จ ๐Ÿ•โ” ๐Ÿ‘† **โ›”๏ธ** ๐Ÿˆธ. - -๐ŸŽฒ ๐Ÿ‘† ๐Ÿ’ช โ–ถ๏ธ ๐Ÿ†• โฌ, โš–๏ธ ๐Ÿ‘† ๐Ÿคš ๐ŸŽก ๐Ÿƒ โšซ๏ธ. ๐Ÿคท - -/// - -### ๐Ÿ”† ๐Ÿ”ข - -๐Ÿฅ‡ ๐Ÿ‘œ ๐Ÿ‘€, ๐Ÿ‘ˆ ๐Ÿ‘ฅ โš– ๐Ÿ” ๐Ÿ”ข โฎ๏ธ `yield`. ๐Ÿ‘‰ ๐Ÿ“ถ ๐ŸŽ ๐Ÿ”— โฎ๏ธ `yield`. - -{* ../../docs_src/events/tutorial003.py hl[14:19] *} - -๐Ÿฅ‡ ๐Ÿ• ๐Ÿ”ข, โญ `yield`, ๐Ÿ”œ ๐Ÿ› ๏ธ **โญ** ๐Ÿˆธ โ–ถ๏ธ. - -& ๐Ÿ• โฎ๏ธ `yield` ๐Ÿ”œ ๐Ÿ› ๏ธ **โฎ๏ธ** ๐Ÿˆธ โœ”๏ธ ๐Ÿ. - -### ๐Ÿ” ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ - -๐Ÿšฅ ๐Ÿ‘† โœ…, ๐Ÿ”ข ๐ŸŽ€ โฎ๏ธ `@asynccontextmanager`. - -๐Ÿ‘ˆ ๐Ÿ—œ ๐Ÿ”ข ๐Ÿ”˜ ๐Ÿ•ณ ๐Ÿค™ "**๐Ÿ” ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ**". - -{* ../../docs_src/events/tutorial003.py hl[1,13] *} - -**๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ** ๐Ÿ ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `with` ๐Ÿ“„, ๐Ÿ–ผ, `open()` ๐Ÿ’ช โš™๏ธ ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ: - -```Python -with open("file.txt") as file: - file.read() -``` - -โฎ๏ธ โฌ ๐Ÿ, ๐Ÿ“ค **๐Ÿ” ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ**. ๐Ÿ‘† ๐Ÿ”œ โš™๏ธ โšซ๏ธ โฎ๏ธ `async with`: - -```Python -async with lifespan(app): - await do_stuff() -``` - -๐Ÿ•โ” ๐Ÿ‘† โœ ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ โš–๏ธ ๐Ÿ” ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ’– ๐Ÿ”›, โšซ๏ธโ” โšซ๏ธ ๐Ÿ”จ ๐Ÿ‘ˆ, โญ ๐Ÿ›ฌ `with` ๐Ÿซ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ› ๏ธ ๐Ÿ“Ÿ โญ `yield`, & โฎ๏ธ โŽ `with` ๐Ÿซ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ› ๏ธ ๐Ÿ“Ÿ โฎ๏ธ `yield`. - -๐Ÿ‘† ๐Ÿ“Ÿ ๐Ÿ–ผ ๐Ÿ”›, ๐Ÿ‘ฅ ๐Ÿšซ โš™๏ธ โšซ๏ธ ๐Ÿ”—, โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ FastAPI โšซ๏ธ โš™๏ธ โšซ๏ธ. - -`lifespan` ๐Ÿ”ข `FastAPI` ๐Ÿ“ฑ โœŠ **๐Ÿ” ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ**, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘† ๐Ÿ†• `lifespan` ๐Ÿ” ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ โšซ๏ธ. - -{* ../../docs_src/events/tutorial003.py hl[22] *} - -## ๐ŸŽ› ๐ŸŽ‰ (๐Ÿ˜ข) - -/// warning - -๐Ÿ‘ ๐ŸŒŒ ๐Ÿต *๐Ÿ•ด* & *๐Ÿคซ* โš™๏ธ `lifespan` ๐Ÿ”ข `FastAPI` ๐Ÿ“ฑ ๐Ÿ”ฌ ๐Ÿ”›. - -๐Ÿ‘† ๐Ÿ’ช ๐ŸŽฒ ๐Ÿšถ ๐Ÿ‘‰ ๐Ÿ•. - -/// - -๐Ÿ“ค ๐ŸŽ› ๐ŸŒŒ ๐Ÿ”ฌ ๐Ÿ‘‰ โš› ๐Ÿ› ๏ธ โฎ๏ธ *๐Ÿ•ด* & โฎ๏ธ *๐Ÿคซ*. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐ŸŽ‰ ๐Ÿ•โ€๐Ÿฆบ (๐Ÿ”ข) ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ› ๏ธ โญ ๐Ÿˆธ โ–ถ๏ธ ๐Ÿ†™, โš–๏ธ ๐Ÿ•โ” ๐Ÿˆธ ๐Ÿคซ ๐Ÿ”ฝ. - -๐Ÿ‘ซ ๐Ÿ”ข ๐Ÿ’ช ๐Ÿ“ฃ โฎ๏ธ `async def` โš–๏ธ ๐Ÿ˜ `def`. - -### `startup` ๐ŸŽ‰ - -๐Ÿšฎ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿƒ โญ ๐Ÿˆธ โ–ถ๏ธ, ๐Ÿ“ฃ โšซ๏ธ โฎ๏ธ ๐ŸŽ‰ `"startup"`: - -{* ../../docs_src/events/tutorial001.py hl[8] *} - -๐Ÿ‘‰ ๐Ÿ’ผ, `startup` ๐ŸŽ‰ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ”ข ๐Ÿฌ "๐Ÿ’ฝ" ( `dict`) โฎ๏ธ ๐Ÿ’ฒ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐ŸŒ… ๐ŸŒ˜ 1๏ธโƒฃ ๐ŸŽ‰ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”ข. - -& ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ† ๐Ÿšซ โ–ถ๏ธ ๐Ÿ“จ ๐Ÿ“จ โญ ๐ŸŒ `startup` ๐ŸŽ‰ ๐Ÿ•โ€๐Ÿฆบ โœ”๏ธ ๐Ÿ. - -### `shutdown` ๐ŸŽ‰ - -๐Ÿšฎ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿƒ ๐Ÿ•โ” ๐Ÿˆธ ๐Ÿคซ ๐Ÿ”ฝ, ๐Ÿ“ฃ โšซ๏ธ โฎ๏ธ ๐ŸŽ‰ `"shutdown"`: - -{* ../../docs_src/events/tutorial002.py hl[6] *} - -๐Ÿ“ฅ, `shutdown` ๐ŸŽ‰ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”ข ๐Ÿ”œ โœ โœ โธ `"Application shutdown"` ๐Ÿ“ `log.txt`. - -/// info - -`open()` ๐Ÿ”ข, `mode="a"` โ›“ "๐ŸŽป",, โธ ๐Ÿ”œ ๐Ÿšฎ โฎ๏ธ โšซ๏ธโ” ๐Ÿ”› ๐Ÿ‘ˆ ๐Ÿ“, ๐Ÿต ๐Ÿ“ โฎ๏ธ ๐ŸŽš. - -/// - -/// tip - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ’ผ ๐Ÿ‘ฅ โš™๏ธ ๐Ÿฉ ๐Ÿ `open()` ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ”— โฎ๏ธ ๐Ÿ“. - -, โšซ๏ธ ๐Ÿ”Œ ๐Ÿ‘ค/๐Ÿ…พ (๐Ÿ”ข/๐Ÿ”ข), ๐Ÿ‘ˆ ๐Ÿšš "โŒ›" ๐Ÿ‘œ โœ ๐Ÿ’พ. - -โœ‹๏ธ `open()` ๐Ÿšซ โš™๏ธ `async` & `await`. - -, ๐Ÿ‘ฅ ๐Ÿ“ฃ ๐ŸŽ‰ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”ข โฎ๏ธ ๐Ÿฉ `def` โ†ฉ๏ธ `async def`. - -/// - -/// info - -๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ‘ซ ๐ŸŽ‰ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ’ƒ ๐ŸŽ‰' ๐Ÿฉบ. - -/// - -### `startup` & `shutdown` ๐Ÿ‘ฏโ€โ™‚๏ธ - -๐Ÿ“ค โ†• ๐Ÿคž ๐Ÿ‘ˆ โš› ๐Ÿ‘† *๐Ÿ•ด* & *๐Ÿคซ* ๐Ÿ”—, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š โ–ถ๏ธ ๐Ÿ•ณ & โคด๏ธ ๐Ÿ โšซ๏ธ, ๐Ÿ“Ž โ„น & โคด๏ธ ๐Ÿš€ โšซ๏ธ, โ™’๏ธ. - -๐Ÿ”จ ๐Ÿ‘ˆ ๐Ÿ‘ฝ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ’ฐ โš› โš–๏ธ ๐Ÿ”ข ๐Ÿ‘ฏโ€โ™‚๏ธ ๐ŸŒ… โš  ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐Ÿช ๐Ÿ’ฒ ๐ŸŒ ๐Ÿ”ข โš–๏ธ ๐ŸŽ ๐ŸŽฑ. - -โ†ฉ๏ธ ๐Ÿ‘ˆ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘ โ†ฉ๏ธ โš™๏ธ `lifespan` ๐Ÿ”ฌ ๐Ÿ”›. - -## ๐Ÿ“ก โ„น - -๐Ÿ“ก โ„น ๐Ÿ˜Ÿ ๐Ÿค“. ๐Ÿ‘ถ - -๐Ÿ”˜, ๐Ÿ”ซ ๐Ÿ“ก ๐Ÿ”ง, ๐Ÿ‘‰ ๐Ÿ• ๐Ÿ”† ๐Ÿ› ๏ธ, & โšซ๏ธ ๐Ÿ”ฌ ๐ŸŽ‰ ๐Ÿค™ `startup` & `shutdown`. - -## ๐ŸŽง ๐Ÿˆธ - -๐Ÿ‘ถ โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ‘ซ ๐Ÿ”† ๐ŸŽ‰ (๐Ÿ•ด & ๐Ÿคซ) ๐Ÿ”œ ๐Ÿ•ด ๐Ÿ› ๏ธ ๐Ÿ‘‘ ๐Ÿˆธ, ๐Ÿšซ [๐ŸŽง ๐Ÿˆธ - ๐Ÿ—ป](sub-applications.md){.internal-link target=_blank}. diff --git a/docs/em/docs/advanced/generate-clients.md b/docs/em/docs/advanced/generate-clients.md deleted file mode 100644 index a680c9051..000000000 --- a/docs/em/docs/advanced/generate-clients.md +++ /dev/null @@ -1,238 +0,0 @@ -# ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป - -**FastAPI** โš“๏ธ ๐Ÿ”› ๐Ÿ—„ ๐Ÿ”ง, ๐Ÿ‘† ๐Ÿคš ๐Ÿง ๐Ÿ”— โฎ๏ธ ๐Ÿ“š ๐Ÿงฐ, ๐Ÿ”Œ ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ (๐Ÿšš ๐Ÿฆ ๐ŸŽš). - -1๏ธโƒฃ ๐ŸŽฏ ๐Ÿ“ˆ ๐Ÿ‘ˆ ๐Ÿšซ ๐ŸŽฏ โญ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช **๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป** (๐Ÿ•ฃ ๐Ÿค™ **๐Ÿ“ฑ** ) ๐Ÿ‘† ๐Ÿ› ๏ธ, ๐Ÿ“š ๐ŸŽ **๐Ÿ› ๏ธ ๐Ÿ‡ช๐Ÿ‡ธ**. - -## ๐Ÿ—„ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿš‚ - -๐Ÿ“ค ๐Ÿ“š ๐Ÿงฐ ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป โšช๏ธโžก๏ธ **๐Ÿ—„**. - -โš  ๐Ÿงฐ ๐Ÿ—„ ๐Ÿš‚. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ— **๐Ÿ•ธ**, ๐Ÿ“ถ ๐Ÿ˜Œ ๐ŸŽ› ๐Ÿ—„-๐Ÿ“•-๐Ÿ‡ฆ๐Ÿ‡ช. - -## ๐Ÿ— ๐Ÿ“• ๐Ÿ•ธ ๐Ÿ‘ฉโ€๐Ÿ’ป - -โžก๏ธ โ–ถ๏ธ โฎ๏ธ ๐Ÿ™… FastAPI ๐Ÿˆธ: - -{* ../../docs_src/generate_clients/tutorial001.py hl[9:11,14:15,18,19,23] *} - -๐Ÿ‘€ ๐Ÿ‘ˆ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”ฌ ๐Ÿท ๐Ÿ‘ซ โš™๏ธ ๐Ÿ“จ ๐Ÿš€ & ๐Ÿ“จ ๐Ÿš€, โš™๏ธ ๐Ÿท `Item` & `ResponseMessage`. - -### ๐Ÿ› ๏ธ ๐Ÿฉบ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถ ๐Ÿ› ๏ธ ๐Ÿฉบ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ‘ˆ โšซ๏ธ โœ”๏ธ **๐Ÿ”—** ๐Ÿ“Š ๐Ÿ“จ ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ“จ: - - - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ”— โ†ฉ๏ธ ๐Ÿ‘ซ ๐Ÿ“ฃ โฎ๏ธ ๐Ÿท ๐Ÿ“ฑ. - -๐Ÿ‘ˆ โ„น ๐Ÿ’ช ๐Ÿ“ฑ **๐Ÿ—„ ๐Ÿ”—**, & โคด๏ธ ๐ŸŽฆ ๐Ÿ› ๏ธ ๐Ÿฉบ (๐Ÿฆ ๐ŸŽš). - -& ๐Ÿ‘ˆ ๐ŸŽ โ„น โšช๏ธโžก๏ธ ๐Ÿท ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ—„ โšซ๏ธโ” ๐Ÿ’ช โš™๏ธ **๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ**. - -### ๐Ÿ— ๐Ÿ“• ๐Ÿ‘ฉโ€๐Ÿ’ป - -๐Ÿ”œ ๐Ÿ‘ˆ ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ“ฑ โฎ๏ธ ๐Ÿท, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ ๐Ÿ•ธ. - -#### โŽ `openapi-ts` - -๐Ÿ‘† ๐Ÿ’ช โŽ `openapi-ts` ๐Ÿ‘† ๐Ÿ•ธ ๐Ÿ“Ÿ โฎ๏ธ: - -
- -```console -$ npm install @hey-api/openapi-ts --save-dev - ----> 100% -``` - -
- -#### ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ - -๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ“‹ โธ ๐Ÿˆธ `openapi-ts` ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ”œ โŽ. - -โ†ฉ๏ธ โšซ๏ธ โŽ ๐Ÿ‡ง๐Ÿ‡ฟ ๐Ÿ—, ๐Ÿ‘† ๐ŸŽฒ ๐Ÿšซ๐Ÿ”œ ๐Ÿ’ช ๐Ÿค™ ๐Ÿ‘ˆ ๐Ÿ“‹ ๐Ÿ”—, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿšฎ โšซ๏ธ ๐Ÿ”› ๐Ÿ‘† `package.json` ๐Ÿ“. - -โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ‘‰: - -```JSON hl_lines="7" -{ - "name": "frontend-app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "generate-client": "openapi-ts --input http://localhost:8000/openapi.json --output ./src/client --client axios" - }, - "author": "", - "license": "", - "devDependencies": { - "@hey-api/openapi-ts": "^0.27.38", - "typescript": "^4.6.2" - } -} -``` - -โฎ๏ธ โœ”๏ธ ๐Ÿ‘ˆ โ˜• `generate-client` โœ ๐Ÿ“ค, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿƒ โšซ๏ธ โฎ๏ธ: - -
- -```console -$ npm run generate-client - -frontend-app@1.0.0 generate-client /home/user/code/frontend-app -> openapi-ts --input http://localhost:8000/openapi.json --output ./src/client --client axios -``` - -
- -๐Ÿ‘ˆ ๐Ÿ“‹ ๐Ÿ”œ ๐Ÿ— ๐Ÿ“Ÿ `./src/client` & ๐Ÿ”œ โš™๏ธ `axios` (๐Ÿ•ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ—ƒ) ๐Ÿ”˜. - -### ๐Ÿ”„ ๐Ÿ‘… ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ—„ & โš™๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ, โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ‘‰, ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿคš โœ ๐Ÿ‘ฉโ€๐Ÿ”ฌ: - - - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš โœ ๐Ÿš€ ๐Ÿ“จ: - - - -/// tip - -๐Ÿ‘€ โœ `name` & `price`, ๐Ÿ‘ˆ ๐Ÿ”ฌ FastAPI ๐Ÿˆธ, `Item` ๐Ÿท. - -/// - -๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ โธ โŒ ๐Ÿ“Š ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ“จ: - - - -๐Ÿ“จ ๐ŸŽš ๐Ÿ”œ โœ”๏ธ โœ: - - - -## FastAPI ๐Ÿ“ฑ โฎ๏ธ ๐Ÿ”– - -๐Ÿ“š ๐Ÿ’ผ ๐Ÿ‘† FastAPI ๐Ÿ“ฑ ๐Ÿ”œ ๐Ÿฆ, & ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ โš™๏ธ ๐Ÿ”– ๐ŸŽ ๐ŸŽ ๐Ÿ‘ช *โžก ๐Ÿ› ๏ธ*. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ“„ **๐Ÿฌ** & โž•1๏ธโƒฃ ๐Ÿ“„ **๐Ÿ‘ฉโ€๐Ÿ’ป**, & ๐Ÿ‘ซ ๐Ÿ’ช ๐Ÿ‘ฝ ๐Ÿ”–: - - -{* ../../docs_src/generate_clients/tutorial002.py hl[23,28,36] *} - -### ๐Ÿ— ๐Ÿ“• ๐Ÿ‘ฉโ€๐Ÿ’ป โฎ๏ธ ๐Ÿ”– - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป FastAPI ๐Ÿ“ฑ โš™๏ธ ๐Ÿ”–, โšซ๏ธ ๐Ÿ”œ ๐Ÿ›Ž ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ โš“๏ธ ๐Ÿ”› ๐Ÿ”–. - -๐Ÿ‘‰ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช โœ”๏ธ ๐Ÿ‘œ โœ” & ๐Ÿ‘ช โ˜‘ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ: - - - -๐Ÿ‘‰ ๐Ÿ’ผ ๐Ÿ‘† โœ”๏ธ: - -* `ItemsService` -* `UsersService` - -### ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“› - -โ–ถ๏ธ๏ธ ๐Ÿ”œ ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“› ๐Ÿ’– `createItemItemsPost` ๐Ÿšซ ๐Ÿ‘€ ๐Ÿ“ถ ๐Ÿงน: - -```TypeScript -ItemsService.createItemItemsPost({name: "Plumbus", price: 5}) -``` - -...๐Ÿ‘ˆ โ†ฉ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿš‚ โš™๏ธ ๐Ÿ—„ ๐Ÿ”— **๐Ÿ› ๏ธ ๐Ÿ†”** ๐Ÿ”  *โžก ๐Ÿ› ๏ธ*. - -๐Ÿ—„ ๐Ÿšš ๐Ÿ‘ˆ ๐Ÿ”  ๐Ÿ› ๏ธ ๐Ÿ†” ๐Ÿ˜ ๐Ÿคญ ๐ŸŒ *โžก ๐Ÿ› ๏ธ*, FastAPI โš™๏ธ **๐Ÿ”ข ๐Ÿ“›**, **โžก**, & **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ”ฌ/๐Ÿ› ๏ธ** ๐Ÿ— ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿ†”, โ†ฉ๏ธ ๐Ÿ‘ˆ ๐ŸŒŒ โšซ๏ธ ๐Ÿ’ช โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿ†” ๐Ÿ˜. - -โœ‹๏ธ ๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ‘† โ” ๐Ÿ“‰ ๐Ÿ‘ˆ โญ. ๐Ÿ‘ถ - -## ๐Ÿ›ƒ ๐Ÿ› ๏ธ ๐Ÿ†” & ๐Ÿ‘ ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“› - -๐Ÿ‘† ๐Ÿ’ช **๐Ÿ”€** ๐ŸŒŒ ๐Ÿ‘ซ ๐Ÿ› ๏ธ ๐Ÿ†” **๐Ÿ—** โš’ ๐Ÿ‘ซ ๐Ÿ™… & โœ”๏ธ **๐Ÿ™… ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“›** ๐Ÿ‘ฉโ€๐Ÿ’ป. - -๐Ÿ‘‰ ๐Ÿ’ผ ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐Ÿšš ๐Ÿ‘ˆ ๐Ÿ”  ๐Ÿ› ๏ธ ๐Ÿ†” **๐Ÿ˜** ๐ŸŽ ๐ŸŒŒ. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ”  *โžก ๐Ÿ› ๏ธ* โœ”๏ธ ๐Ÿ”–, & โคด๏ธ ๐Ÿ— ๐Ÿ› ๏ธ ๐Ÿ†” โš“๏ธ ๐Ÿ”› **๐Ÿ”–** & *โžก ๐Ÿ› ๏ธ* **๐Ÿ“›** (๐Ÿ”ข ๐Ÿ“›). - -### ๐Ÿ›ƒ ๐Ÿ— ๐Ÿ˜ ๐Ÿ†” ๐Ÿ”ข - -FastAPI โš™๏ธ **๐Ÿ˜ ๐Ÿ†”** ๐Ÿ”  *โžก ๐Ÿ› ๏ธ*, โšซ๏ธ โš™๏ธ **๐Ÿ› ๏ธ ๐Ÿ†”** & ๐Ÿ“› ๐Ÿ™† ๐Ÿ’ช ๐Ÿ›ƒ ๐Ÿท, ๐Ÿ“จ โš–๏ธ ๐Ÿ“จ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ›ƒ ๐Ÿ‘ˆ ๐Ÿ”ข. โšซ๏ธ โœŠ `APIRoute` & ๐Ÿ”ข ๐ŸŽป. - -๐Ÿ–ผ, ๐Ÿ“ฅ โšซ๏ธ โš™๏ธ ๐Ÿฅ‡ ๐Ÿ”– (๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ โœ”๏ธ ๐Ÿ•ด 1๏ธโƒฃ ๐Ÿ”–) & *โžก ๐Ÿ› ๏ธ* ๐Ÿ“› (๐Ÿ”ข ๐Ÿ“›). - -๐Ÿ‘† ๐Ÿ’ช โคด๏ธ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘ˆ ๐Ÿ›ƒ ๐Ÿ”ข **FastAPI** `generate_unique_id_function` ๐Ÿ”ข: - -{* ../../docs_src/generate_clients/tutorial003.py hl[8:9,12] *} - -### ๐Ÿ— ๐Ÿ“• ๐Ÿ‘ฉโ€๐Ÿ’ป โฎ๏ธ ๐Ÿ›ƒ ๐Ÿ› ๏ธ ๐Ÿ†” - -๐Ÿ”œ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”„, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ‘ˆ โšซ๏ธ โœ”๏ธ ๐Ÿ“‰ ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“›: - - - -๐Ÿ‘† ๐Ÿ‘€, ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“› ๐Ÿ”œ โœ”๏ธ ๐Ÿ”– & โคด๏ธ ๐Ÿ”ข ๐Ÿ“›, ๐Ÿ”œ ๐Ÿ‘ซ ๐Ÿšซ ๐Ÿ”Œ โ„น โšช๏ธโžก๏ธ ๐Ÿ“› โžก & ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ› ๏ธ. - -### ๐Ÿ—œ ๐Ÿ—„ ๐Ÿ”ง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿš‚ - -๐Ÿ— ๐Ÿ“Ÿ โœ”๏ธ **โŽ โ„น**. - -๐Ÿ‘ฅ โช ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ”— **๐Ÿฌ** โ†ฉ๏ธ ๐Ÿ‘ˆ ๐Ÿ”ค `ItemsService` (โœŠ โšช๏ธโžก๏ธ ๐Ÿ”–), โœ‹๏ธ ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ“› ๐Ÿ”ก ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“› ๐Ÿ’โ€โ™‚๏ธ. ๐Ÿ‘ถ - -๐Ÿ‘ฅ ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’š ๐Ÿšง โšซ๏ธ ๐Ÿ—„ ๐Ÿข, ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿšš ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿ†” **๐Ÿ˜**. - -โœ‹๏ธ ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ฅ ๐Ÿ’ช **๐Ÿ”€** ๐Ÿ—„ ๐Ÿ› ๏ธ ๐Ÿ†” โ–ถ๏ธ๏ธ โญ ๐Ÿญ ๐Ÿ‘ฉโ€๐Ÿ’ป, โš’ ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“› ๐Ÿ‘Œ & **๐Ÿงน**. - -๐Ÿ‘ฅ ๐Ÿ’ช โฌ ๐Ÿ—„ ๐ŸŽป ๐Ÿ“ `openapi.json` & โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช **โŽ ๐Ÿ‘ˆ ๐Ÿ”ก ๐Ÿ”–** โฎ๏ธ โœ ๐Ÿ’– ๐Ÿ‘‰: - -{* ../../docs_src/generate_clients/tutorial004.py *} - -โฎ๏ธ ๐Ÿ‘ˆ, ๐Ÿ› ๏ธ ๐Ÿ†” ๐Ÿ”œ ๐Ÿ“ โšช๏ธโžก๏ธ ๐Ÿ‘œ ๐Ÿ’– `items-get_items` `get_items`, ๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿš‚ ๐Ÿ’ช ๐Ÿ— ๐Ÿ™… ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“›. - -### ๐Ÿ— ๐Ÿ“• ๐Ÿ‘ฉโ€๐Ÿ’ป โฎ๏ธ ๐Ÿ—œ ๐Ÿ—„ - -๐Ÿ”œ ๐Ÿ”š ๐Ÿ ๐Ÿ“ `openapi.json`, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ”€ `package.json` โš™๏ธ ๐Ÿ‘ˆ ๐Ÿ‡ง๐Ÿ‡ฟ ๐Ÿ“, ๐Ÿ–ผ: - -```JSON hl_lines="7" -{ - "name": "frontend-app", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "generate-client": "openapi-ts --input ./openapi.json --output ./src/client --client axios" - }, - "author": "", - "license": "", - "devDependencies": { - "@hey-api/openapi-ts": "^0.27.38", - "typescript": "^4.6.2" - } -} -``` - -โฎ๏ธ ๐Ÿญ ๐Ÿ†• ๐Ÿ‘ฉโ€๐Ÿ’ป, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ”œ โœ”๏ธ **๐Ÿงน ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“›**, โฎ๏ธ ๐ŸŒ **โœ**, **โธ โŒ**, โ™’๏ธ: - - - -## ๐Ÿ’ฐ - -๐Ÿ•โ” โš™๏ธ ๐Ÿ” ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘† ๐Ÿ”œ **โœ** : - -* ๐Ÿ‘ฉโ€๐Ÿ”ฌ. -* ๐Ÿ“จ ๐Ÿš€ ๐Ÿ’ช, ๐Ÿ”ข ๐Ÿ”ข, โ™’๏ธ. -* ๐Ÿ“จ ๐Ÿš€. - -๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ **โธ โŒ** ๐ŸŒ. - -& ๐Ÿ•โ” ๐Ÿ‘† โ„น ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ, & **โ™ป** ๐Ÿ•ธ, โšซ๏ธ ๐Ÿ”œ โœ”๏ธ ๐Ÿ™† ๐Ÿ†• *โžก ๐Ÿ› ๏ธ* ๐Ÿ’ช ๐Ÿ‘ฉโ€๐Ÿ”ฌ, ๐Ÿ— ๐Ÿ• โŽ, & ๐Ÿ™† ๐ŸŽ ๐Ÿ”€ ๐Ÿ”œ ๐ŸŽจ ๐Ÿ”› ๐Ÿ— ๐Ÿ“Ÿ. ๐Ÿ‘ถ - -๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ ๐Ÿšฅ ๐Ÿ•ณ ๐Ÿ”€ โšซ๏ธ ๐Ÿ”œ **๐ŸŽจ** ๐Ÿ”› ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ ๐Ÿ”. & ๐Ÿšฅ ๐Ÿ‘† **๐Ÿ—** ๐Ÿ‘ฉโ€๐Ÿ’ป โšซ๏ธ ๐Ÿ”œ โŒ ๐Ÿ‘… ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ™† **๐Ÿ”–** ๐Ÿ“Š โš™๏ธ. - -, ๐Ÿ‘† ๐Ÿ”œ **๐Ÿ” ๐Ÿ“š โŒ** ๐Ÿ“ถ โช ๐Ÿ› ๏ธ ๐Ÿ›ต โ†ฉ๏ธ โœ”๏ธ โŒ› โŒ ๐ŸŽฆ ๐Ÿ†™ ๐Ÿ‘† ๐Ÿ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿญ & โคด๏ธ ๐Ÿ”„ โ„น ๐ŸŒโ” โš . ๐Ÿ‘ถ diff --git a/docs/em/docs/advanced/index.md b/docs/em/docs/advanced/index.md deleted file mode 100644 index 48ef8e46d..000000000 --- a/docs/em/docs/advanced/index.md +++ /dev/null @@ -1,27 +0,0 @@ -# ๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ - -## ๐ŸŒ– โš’ - -๐Ÿ‘‘ [๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ](../tutorial/index.md){.internal-link target=_blank} ๐Ÿ”œ ๐Ÿฅƒ ๐Ÿค ๐Ÿ‘† ๐ŸŽซ ๐Ÿ”˜ ๐ŸŒ ๐Ÿ‘‘ โš’ **FastAPI**. - -โญ ๐Ÿ“„ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŽ ๐ŸŽ›, ๐Ÿ“ณ, & ๐ŸŒ– โš’. - -/// tip - -โญ ๐Ÿ“„ **๐Ÿšซ ๐ŸŽฏ "๐Ÿง"**. - - & โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘ˆ ๐Ÿ‘† โš™๏ธ ๐Ÿ’ผ, โš— 1๏ธโƒฃ ๐Ÿ‘ซ. - -/// - -## โœ ๐Ÿ”ฐ ๐Ÿฅ‡ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ† โš’ **FastAPI** โฎ๏ธ ๐Ÿ’ก โšช๏ธโžก๏ธ ๐Ÿ‘‘ [๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ](../tutorial/index.md){.internal-link target=_blank}. - -& โญ ๐Ÿ“„ ๐Ÿค” ๐Ÿ‘† โช โœ โšซ๏ธ, & ๐Ÿค” ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘‘ ๐Ÿ’ญ. - -## ๐ŸŽ.๐Ÿ…พ โ†—๏ธ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’– โœŠ ๐Ÿง-๐Ÿ”ฐ โ†—๏ธ ๐Ÿ”— ๐Ÿ‘‰ ๐Ÿ“„ ๐Ÿฉบ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š โœ…: ๐Ÿ’ฏ-๐Ÿ’พ ๐Ÿ› ๏ธ โฎ๏ธ FastAPI & โ˜ **๐ŸŽ.๐Ÿ…พ**. - -๐Ÿ‘ซ โณ ๐Ÿฉธ 1๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐ŸŒ ๐Ÿ’ฐ ๐Ÿ› ๏ธ **FastAPI**. ๐Ÿ‘ถ ๐Ÿ‘ถ diff --git a/docs/em/docs/advanced/middleware.md b/docs/em/docs/advanced/middleware.md deleted file mode 100644 index 22d707062..000000000 --- a/docs/em/docs/advanced/middleware.md +++ /dev/null @@ -1,95 +0,0 @@ -# ๐Ÿง ๐Ÿ› ๏ธ - -๐Ÿ‘‘ ๐Ÿ”ฐ ๐Ÿ‘† โœ โ” ๐Ÿšฎ [๐Ÿ›ƒ ๐Ÿ› ๏ธ](../tutorial/middleware.md){.internal-link target=_blank} ๐Ÿ‘† ๐Ÿˆธ. - -& โคด๏ธ ๐Ÿ‘† โœ โ” ๐Ÿต [โšœ โฎ๏ธ `CORSMiddleware`](../tutorial/cors.md){.internal-link target=_blank}. - -๐Ÿ‘‰ ๐Ÿ“„ ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘€ โ” โš™๏ธ ๐ŸŽ ๐Ÿ› ๏ธ. - -## โŽ ๐Ÿ”ซ ๐Ÿ› ๏ธ - -**FastAPI** โš“๏ธ ๐Ÿ”› ๐Ÿ’ƒ & ๐Ÿ› ๏ธ ๐Ÿ”ซ ๐Ÿ”ง, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ™† ๐Ÿ”ซ ๐Ÿ› ๏ธ. - -๐Ÿ› ๏ธ ๐Ÿšซ โœ”๏ธ โš’ FastAPI โš–๏ธ ๐Ÿ’ƒ ๐Ÿ‘ท, ๐Ÿ“ โšซ๏ธ โฉ ๐Ÿ”ซ ๐Ÿ”Œ. - -๐Ÿข, ๐Ÿ”ซ ๐Ÿ› ๏ธ ๐ŸŽ“ ๐Ÿ‘ˆ โŒ› ๐Ÿ“จ ๐Ÿ”ซ ๐Ÿ“ฑ ๐Ÿฅ‡ โŒ. - -, ๐Ÿงพ ๐Ÿฅ‰-๐Ÿฅณ ๐Ÿ”ซ ๐Ÿ› ๏ธ ๐Ÿ‘ซ ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿ•ณ ๐Ÿ’–: - -```Python -from unicorn import UnicornMiddleware - -app = SomeASGIApp() - -new_app = UnicornMiddleware(app, some_config="rainbow") -``` - -โœ‹๏ธ FastAPI (๐Ÿค™ ๐Ÿ’ƒ) ๐Ÿšš ๐Ÿ™… ๐ŸŒŒ โšซ๏ธ ๐Ÿ‘ˆ โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ”— ๐Ÿ› ๏ธ ๐Ÿต ๐Ÿ’ฝ โŒ & ๐Ÿ›ƒ โš  ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ท โ˜‘. - -๐Ÿ‘ˆ, ๐Ÿ‘† โš™๏ธ `app.add_middleware()` (๐Ÿ–ผ โšœ). - -```Python -from fastapi import FastAPI -from unicorn import UnicornMiddleware - -app = FastAPI() - -app.add_middleware(UnicornMiddleware, some_config="rainbow") -``` - -`app.add_middleware()` ๐Ÿ“จ ๐Ÿ› ๏ธ ๐ŸŽ“ ๐Ÿฅ‡ โŒ & ๐Ÿ™† ๐ŸŒ– โŒ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ› ๏ธ. - -## ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ - -**FastAPI** ๐Ÿ”Œ ๐Ÿ“š ๐Ÿ› ๏ธ โš  โš™๏ธ ๐Ÿ’ผ, ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘€ โญ โ” โš™๏ธ ๐Ÿ‘ซ. - -/// note | ๐Ÿ“ก โ„น - -โญ ๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.middleware.something import SomethingMiddleware`. - -**FastAPI** ๐Ÿšš ๐Ÿ“š ๐Ÿ› ๏ธ `fastapi.middleware` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ› ๏ธ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -## `HTTPSRedirectMiddleware` - -๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ”œ ๐Ÿ‘ฏโ€โ™‚๏ธ `https` โš–๏ธ `wss`. - -๐Ÿ™† ๐Ÿ“จ ๐Ÿ“จ `http` โš–๏ธ `ws` ๐Ÿ”œ โŽ ๐Ÿ” โš– โ†ฉ๏ธ. - -{* ../../docs_src/advanced_middleware/tutorial001.py hl[2,6] *} - -## `TrustedHostMiddleware` - -๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿ“จ ๐Ÿ“จ โœ”๏ธ โ˜‘ โš’ `Host` ๐ŸŽš, โœ” ๐Ÿ’‚โ€โ™‚ ๐Ÿ›ก ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿฆ  ๐ŸŽš ๐Ÿ‘Š. - -{* ../../docs_src/advanced_middleware/tutorial002.py hl[2,6:8] *} - -๐Ÿ“„ โŒ ๐Ÿ•โ€๐Ÿฆบ: - -* `allowed_hosts` - ๐Ÿ“‡ ๐Ÿ†” ๐Ÿ“› ๐Ÿ‘ˆ ๐Ÿ”œ โœ” ๐Ÿ“›. ๐Ÿƒ ๐Ÿ†” โœ… `*.example.com` ๐Ÿ•โ€๐Ÿฆบ ๐ŸŽ€ ๐Ÿ“. โœ” ๐Ÿ™† ๐Ÿ“› ๐Ÿ‘ฏโ€โ™‚๏ธ โš™๏ธ `allowed_hosts=["*"]` โš–๏ธ ๐Ÿšซ ๐Ÿ› ๏ธ. - -๐Ÿšฅ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ”จ ๐Ÿšซ โœ” โ˜‘ โคด๏ธ `400` ๐Ÿ“จ ๐Ÿ”œ ๐Ÿ“จ. - -## `GZipMiddleware` - -๐Ÿต ๐Ÿ—œ ๐Ÿ“จ ๐Ÿ™† ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ”Œ `"gzip"` `Accept-Encoding` ๐ŸŽš. - -๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿต ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿฉ & ๐ŸŽฅ ๐Ÿ“จ. - -{* ../../docs_src/advanced_middleware/tutorial003.py hl[2,6] *} - -๐Ÿ“„ โŒ ๐Ÿ•โ€๐Ÿฆบ: - -* `minimum_size` - ๐Ÿšซ ๐Ÿ—œ ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿคช ๐ŸŒ˜ ๐Ÿ‘‰ ๐Ÿ’ฏ ๐Ÿ“ ๐Ÿ”ข. ๐Ÿ”ข `500`. - -## ๐ŸŽ ๐Ÿ› ๏ธ - -๐Ÿ“ค ๐Ÿ“š ๐ŸŽ ๐Ÿ”ซ ๐Ÿ› ๏ธ. - -๐Ÿ–ผ: - -* Uvicorn `ProxyHeadersMiddleware` -* ๐Ÿ‡ธ๐Ÿ‡ฒ - -๐Ÿ‘€ ๐ŸŽ ๐Ÿ’ช ๐Ÿ› ๏ธ โœ… ๐Ÿ’ƒ ๐Ÿ› ๏ธ ๐Ÿฉบ & ๐Ÿ”ซ ๐Ÿ‘Œ ๐Ÿ“‡. diff --git a/docs/em/docs/advanced/openapi-callbacks.md b/docs/em/docs/advanced/openapi-callbacks.md deleted file mode 100644 index b0a821668..000000000 --- a/docs/em/docs/advanced/openapi-callbacks.md +++ /dev/null @@ -1,186 +0,0 @@ -# ๐Ÿ—„ โฒ - -๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿ› ๏ธ โฎ๏ธ *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ ๐Ÿ’ช โฒ ๐Ÿ“จ *๐Ÿ”ข ๐Ÿ› ๏ธ* โœ ๐Ÿ‘ฑ ๐Ÿ™† (๐ŸŽฒ ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ˆ ๐Ÿ”œ *โš™๏ธ* ๐Ÿ‘† ๐Ÿ› ๏ธ). - -๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ”จ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ“ฑ ๐Ÿค™ *๐Ÿ”ข ๐Ÿ› ๏ธ* ๐Ÿ“› "โฒ". โ†ฉ๏ธ ๐Ÿ–ฅ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป โœ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ‘† ๐Ÿ› ๏ธ & โคด๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ *๐Ÿค™ ๐Ÿ”™*, ๐Ÿ“จ ๐Ÿ“จ *๐Ÿ”ข ๐Ÿ› ๏ธ* (๐Ÿ‘ˆ ๐ŸŽฒ โœ ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ’ป). - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿ“„ โ” ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ› ๏ธ *๐Ÿ”œ* ๐Ÿ‘€ ๐Ÿ’–. โšซ๏ธโ” *โžก ๐Ÿ› ๏ธ* โšซ๏ธ ๐Ÿ”œ โœ”๏ธ, โšซ๏ธโ” ๐Ÿ’ช โšซ๏ธ ๐Ÿ”œ โŒ›, โšซ๏ธโ” ๐Ÿ“จ โšซ๏ธ ๐Ÿ”œ ๐Ÿ“จ, โ™’๏ธ. - -## ๐Ÿ“ฑ โฎ๏ธ โฒ - -โžก๏ธ ๐Ÿ‘€ ๐ŸŒ ๐Ÿ‘‰ โฎ๏ธ ๐Ÿ–ผ. - -๐ŸŒˆ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ“ฑ ๐Ÿ‘ˆ โœ” ๐Ÿ— ๐Ÿงพ. - -๐Ÿ‘‰ ๐Ÿงพ ๐Ÿ”œ โœ”๏ธ `id`, `title` (๐Ÿ“ฆ), `customer`, & `total`. - -๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘† ๐Ÿ› ๏ธ (๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป) ๐Ÿ”œ โœ ๐Ÿงพ ๐Ÿ‘† ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿค ๐Ÿ“จ. - -โคด๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ”œ (โžก๏ธ ๐ŸŒˆ): - -* ๐Ÿ“จ ๐Ÿงพ ๐Ÿ•ด ๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป. -* ๐Ÿ“ˆ ๐Ÿ’ธ. -* ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ”™ ๐Ÿ› ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป (๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป). - * ๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ”จ ๐Ÿ“จ ๐Ÿค ๐Ÿ“จ (โšช๏ธโžก๏ธ *๐Ÿ‘† ๐Ÿ› ๏ธ*) *๐Ÿ”ข ๐Ÿ› ๏ธ* ๐Ÿšš ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป (๐Ÿ‘‰ "โฒ"). - -## ๐Ÿ˜ **FastAPI** ๐Ÿ“ฑ - -โžก๏ธ ๐Ÿฅ‡ ๐Ÿ‘€ โ” ๐Ÿ˜ ๐Ÿ› ๏ธ ๐Ÿ“ฑ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’– โญ โŽ โฒ. - -โšซ๏ธ ๐Ÿ”œ โœ”๏ธ *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ“จ `Invoice` ๐Ÿ’ช, & ๐Ÿ”ข ๐Ÿ”ข `callback_url` ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ”Œ ๐Ÿ“› โฒ. - -๐Ÿ‘‰ ๐Ÿ• ๐Ÿ“ถ ๐Ÿ˜, ๐ŸŒ… ๐Ÿ“Ÿ ๐ŸŽฒ โช ๐Ÿ˜ฐ ๐Ÿ‘†: - -{* ../../docs_src/openapi_callbacks/tutorial001.py hl[9:13,36:53] *} - -/// tip - -`callback_url` ๐Ÿ”ข ๐Ÿ”ข โš™๏ธ Pydantic ๐Ÿ“› ๐Ÿ†Ž. - -/// - -๐Ÿ•ด ๐Ÿ†• ๐Ÿ‘œ `callbacks=messages_callback_router.routes` โŒ *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*. ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘€ โšซ๏ธโ” ๐Ÿ‘ˆ โญ. - -## ๐Ÿ”ฌ โฒ - -โ˜‘ โฒ ๐Ÿ“Ÿ ๐Ÿ”œ ๐Ÿช€ ๐Ÿ™‡ ๐Ÿ”› ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ› ๏ธ ๐Ÿ“ฑ. - -& โšซ๏ธ ๐Ÿ”œ ๐ŸŽฒ ๐Ÿช€ ๐Ÿ“š โšช๏ธโžก๏ธ 1๏ธโƒฃ ๐Ÿ“ฑ โญ. - -โšซ๏ธ ๐Ÿ’ช 1๏ธโƒฃ โš–๏ธ 2๏ธโƒฃ โธ ๐Ÿ“Ÿ, ๐Ÿ’–: - -```Python -callback_url = "https://example.com/api/v1/invoices/events/" -httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) -``` - -โœ‹๏ธ ๐ŸŽฒ ๐Ÿ† โš  ๐Ÿ• โฒ โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป (๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป) ๐Ÿ› ๏ธ *๐Ÿ”ข ๐Ÿ› ๏ธ* โ˜‘, ๐Ÿ›„ ๐Ÿ’ฝ ๐Ÿ‘ˆ *๐Ÿ‘† ๐Ÿ› ๏ธ* ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ’ช โฒ, โ™’๏ธ. - -, โšซ๏ธโ” ๐Ÿ‘ฅ ๐Ÿ”œ โญ ๐Ÿšฎ ๐Ÿ“Ÿ ๐Ÿ“„ โ” ๐Ÿ‘ˆ *๐Ÿ”ข ๐Ÿ› ๏ธ* ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ“จ โฒ โšช๏ธโžก๏ธ *๐Ÿ‘† ๐Ÿ› ๏ธ*. - -๐Ÿ‘ˆ ๐Ÿงพ ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ†™ ๐Ÿฆ ๐ŸŽš `/docs` ๐Ÿ‘† ๐Ÿ› ๏ธ, & โšซ๏ธ ๐Ÿ”œ โžก๏ธ ๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ญ โ” ๐Ÿ— *๐Ÿ”ข ๐Ÿ› ๏ธ*. - -๐Ÿ‘‰ ๐Ÿ–ผ ๐Ÿšซ ๐Ÿ› ๏ธ โฒ โšซ๏ธ (๐Ÿ‘ˆ ๐Ÿ’ช โธ ๐Ÿ“Ÿ), ๐Ÿ•ด ๐Ÿงพ ๐Ÿ•. - -/// tip - -โ˜‘ โฒ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ. - -๐Ÿ•โ” ๐Ÿ› ๏ธ โฒ ๐Ÿ‘†, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ•ณ ๐Ÿ’– ๐Ÿ‡ธ๐Ÿ‡ฒ โš–๏ธ ๐Ÿ“จ. - -/// - -## โœ โฒ ๐Ÿงพ ๐Ÿ“Ÿ - -๐Ÿ‘‰ ๐Ÿ“Ÿ ๐Ÿ† ๐Ÿšซ ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿ“ฑ, ๐Ÿ‘ฅ ๐Ÿ•ด ๐Ÿ’ช โšซ๏ธ *๐Ÿ“„* โ” ๐Ÿ‘ˆ *๐Ÿ”ข ๐Ÿ› ๏ธ* ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’–. - -โœ‹๏ธ, ๐Ÿ‘† โช ๐Ÿ’ญ โ” ๐Ÿ’ช โœ ๐Ÿง ๐Ÿงพ ๐Ÿ› ๏ธ โฎ๏ธ **FastAPI**. - -๐Ÿ‘ฅ ๐Ÿ”œ โš™๏ธ ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿ’ก ๐Ÿ“„ โ” *๐Ÿ”ข ๐Ÿ› ๏ธ* ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’–... ๐Ÿ— *โžก ๐Ÿ› ๏ธ(โ“‚)* ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿ› ๏ธ (๐Ÿ• ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿค™). - -/// tip - -๐Ÿ•โ” โœ ๐Ÿ“Ÿ ๐Ÿ“„ โฒ, โšซ๏ธ ๐Ÿ’ช โš  ๐ŸŒˆ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ‘ˆ *๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป*. & ๐Ÿ‘ˆ ๐Ÿ‘† โณ ๐Ÿ› ๏ธ *๐Ÿ”ข ๐Ÿ› ๏ธ*, ๐Ÿšซ *๐Ÿ‘† ๐Ÿ› ๏ธ*. - -๐Ÿ• ๐Ÿ› ๏ธ ๐Ÿ‘‰ โ˜ ๐ŸŽ‘ ( *๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป*) ๐Ÿ’ช โ„น ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ’– โšซ๏ธ ๐ŸŒ… โญ ๐ŸŒโ” ๐Ÿšฎ ๐Ÿ”ข, Pydantic ๐Ÿท ๐Ÿ’ช, ๐Ÿ“จ, โ™’๏ธ. ๐Ÿ‘ˆ *๐Ÿ”ข ๐Ÿ› ๏ธ*. - -/// - -### โœ โฒ `APIRouter` - -๐Ÿฅ‡ โœ ๐Ÿ†• `APIRouter` ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ”Œ 1๏ธโƒฃ โš–๏ธ ๐ŸŒ… โฒ. - -{* ../../docs_src/openapi_callbacks/tutorial001.py hl[3,25] *} - -### โœ โฒ *โžก ๐Ÿ› ๏ธ* - -โœ โฒ *โžก ๐Ÿ› ๏ธ* โš™๏ธ ๐ŸŽ `APIRouter` ๐Ÿ‘† โœ ๐Ÿ”›. - -โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ˜ FastAPI *โžก ๐Ÿ› ๏ธ*: - -* โšซ๏ธ ๐Ÿ”œ ๐ŸŽฒ โœ”๏ธ ๐Ÿ“„ ๐Ÿ’ช โšซ๏ธ ๐Ÿ”œ ๐Ÿ“จ, โœ… `body: InvoiceEvent`. -* & โšซ๏ธ ๐Ÿ’ช โœ”๏ธ ๐Ÿ“„ ๐Ÿ“จ โšซ๏ธ ๐Ÿ”œ ๐Ÿ“จ, โœ… `response_model=InvoiceEventReceived`. - -{* ../../docs_src/openapi_callbacks/tutorial001.py hl[16:18,21:22,28:32] *} - -๐Ÿ“ค 2๏ธโƒฃ ๐Ÿ‘‘ ๐Ÿ”บ โšช๏ธโžก๏ธ ๐Ÿ˜ *โžก ๐Ÿ› ๏ธ*: - -* โšซ๏ธ ๐Ÿšซ ๐Ÿ’ช โœ”๏ธ ๐Ÿ™† โ˜‘ ๐Ÿ“Ÿ, โ†ฉ๏ธ ๐Ÿ‘† ๐Ÿ“ฑ ๐Ÿ”œ ๐Ÿ™… ๐Ÿค™ ๐Ÿ‘‰ ๐Ÿ“Ÿ. โšซ๏ธ ๐Ÿ•ด โš™๏ธ ๐Ÿ“„ *๐Ÿ”ข ๐Ÿ› ๏ธ*. , ๐Ÿ”ข ๐Ÿ’ช โœ”๏ธ `pass`. -* *โžก* ๐Ÿ’ช ๐Ÿ”Œ ๐Ÿ—„ 3๏ธโƒฃ ๐Ÿงฌ (๐Ÿ‘€ ๐ŸŒ– ๐Ÿ”›) ๐ŸŒโ” โšซ๏ธ ๐Ÿ’ช โš™๏ธ ๐Ÿ”ข โฎ๏ธ ๐Ÿ”ข & ๐Ÿ• โฎ๏ธ ๐Ÿ“จ ๐Ÿ“จ *๐Ÿ‘† ๐Ÿ› ๏ธ*. - -### โฒ โžก ๐Ÿงฌ - -โฒ *โžก* ๐Ÿ’ช โœ”๏ธ ๐Ÿ—„ 3๏ธโƒฃ ๐Ÿงฌ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ”Œ ๐Ÿ• โฎ๏ธ ๐Ÿ“จ ๐Ÿ“จ *๐Ÿ‘† ๐Ÿ› ๏ธ*. - -๐Ÿ‘‰ ๐Ÿ’ผ, โšซ๏ธ `str`: - -```Python -"{$callback_url}/invoices/{$request.body.id}" -``` - -, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป (๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป) ๐Ÿ“จ ๐Ÿ“จ *๐Ÿ‘† ๐Ÿ› ๏ธ* : - -``` -https://yourapi.com/invoices/?callback_url=https://www.external.org/events -``` - -โฎ๏ธ ๐ŸŽป ๐Ÿ’ช: - -```JSON -{ - "id": "2expen51ve", - "customer": "Mr. Richie Rich", - "total": "9999" -} -``` - -โคด๏ธ *๐Ÿ‘† ๐Ÿ› ๏ธ* ๐Ÿ”œ ๐Ÿ› ๏ธ ๐Ÿงพ, & โ˜ โช, ๐Ÿ“จ โฒ ๐Ÿ“จ `callback_url` ( *๐Ÿ”ข ๐Ÿ› ๏ธ*): - -``` -https://www.external.org/events/invoices/2expen51ve -``` - -โฎ๏ธ ๐ŸŽป ๐Ÿ’ช โš— ๐Ÿ•ณ ๐Ÿ’–: - -```JSON -{ - "description": "Payment celebration", - "paid": true -} -``` - -& โšซ๏ธ ๐Ÿ”œ โŒ› ๐Ÿ“จ โšช๏ธโžก๏ธ ๐Ÿ‘ˆ *๐Ÿ”ข ๐Ÿ› ๏ธ* โฎ๏ธ ๐ŸŽป ๐Ÿ’ช ๐Ÿ’–: - -```JSON -{ - "ok": true -} -``` - -/// tip - -๐Ÿ‘€ โ” โฒ ๐Ÿ“› โš™๏ธ ๐Ÿ”Œ ๐Ÿ“› ๐Ÿ“จ ๐Ÿ”ข ๐Ÿ”ข `callback_url` (`https://www.external.org/events`) & ๐Ÿงพ `id` โšช๏ธโžก๏ธ ๐Ÿ”˜ ๐ŸŽป ๐Ÿ’ช (`2expen51ve`). - -/// - -### ๐Ÿšฎ โฒ ๐Ÿ“ป - -๐Ÿ‘‰ โ˜ ๐Ÿ‘† โœ”๏ธ *โฒ โžก ๐Ÿ› ๏ธ(โ“‚)* ๐Ÿ’ช (1๏ธโƒฃ(โ“‚) ๐Ÿ‘ˆ *๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป* ๐Ÿ”œ ๐Ÿ› ๏ธ *๐Ÿ”ข ๐Ÿ› ๏ธ*) โฒ ๐Ÿ“ป ๐Ÿ‘† โœ ๐Ÿ”›. - -๐Ÿ”œ โš™๏ธ ๐Ÿ”ข `callbacks` *๐Ÿ‘† ๐Ÿ› ๏ธ โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”ข `.routes` (๐Ÿ‘ˆ ๐Ÿค™ `list` ๐Ÿ›ฃ/*โžก ๐Ÿ› ๏ธ*) โšช๏ธโžก๏ธ ๐Ÿ‘ˆ โฒ ๐Ÿ“ป: - -{* ../../docs_src/openapi_callbacks/tutorial001.py hl[35] *} - -/// tip - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿšซ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ“ป โšซ๏ธ (`invoices_callback_router`) `callback=`, โœ‹๏ธ ๐Ÿ”ข `.routes`, `invoices_callback_router.routes`. - -/// - -### โœ… ๐Ÿฉบ - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ช โ–ถ๏ธ ๐Ÿ‘† ๐Ÿ“ฑ โฎ๏ธ Uvicorn & ๐Ÿšถ http://127.0.0.1:8000/docs. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ‘† ๐Ÿฉบ โœ… "โฒ" ๐Ÿ“„ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ ๐ŸŽฆ โ” *๐Ÿ”ข ๐Ÿ› ๏ธ* ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’–: - - diff --git a/docs/em/docs/advanced/path-operation-advanced-configuration.md b/docs/em/docs/advanced/path-operation-advanced-configuration.md deleted file mode 100644 index 9d9d5fa8d..000000000 --- a/docs/em/docs/advanced/path-operation-advanced-configuration.md +++ /dev/null @@ -1,172 +0,0 @@ -# โžก ๐Ÿ› ๏ธ ๐Ÿง ๐Ÿ“ณ - -## ๐Ÿ—„ { - -/// warning - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ "๐Ÿ•ด" ๐Ÿ—„, ๐Ÿ‘† ๐ŸŽฒ ๐Ÿšซ ๐Ÿ’ช ๐Ÿ‘‰. - -/// - -๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ—„ `operationId` โš™๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* โฎ๏ธ ๐Ÿ”ข `operation_id`. - -๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ˜ ๐Ÿ”  ๐Ÿ› ๏ธ. - -{* ../../docs_src/path_operation_advanced_configuration/tutorial001.py hl[6] *} - -### โš™๏ธ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ“› { - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ ๐Ÿ‘† ๐Ÿ”—' ๐Ÿ”ข ๐Ÿ“› `operationId`โ“‚, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” ๐Ÿคญ ๐ŸŒ ๐Ÿ‘ซ & ๐Ÿ” ๐Ÿ”  *โžก ๐Ÿ› ๏ธ* `operation_id` โš™๏ธ ๐Ÿ‘ซ `APIRoute.name`. - -๐Ÿ‘† ๐Ÿ”œ โšซ๏ธ โฎ๏ธ โŽ ๐ŸŒ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. - -{* ../../docs_src/path_operation_advanced_configuration/tutorial002.py hl[2,12:21,24] *} - -/// tip - -๐Ÿšฅ ๐Ÿ‘† โŽ ๐Ÿค™ `app.openapi()`, ๐Ÿ‘† ๐Ÿ”œ โ„น `operationId`โ“‚ โญ ๐Ÿ‘ˆ. - -/// - -/// warning - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘‰, ๐Ÿ‘† โœ”๏ธ โš’ ๐Ÿ’ญ ๐Ÿ”  1๏ธโƒฃ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* โœ”๏ธ ๐Ÿ˜ ๐Ÿ“›. - -๐Ÿšฅ ๐Ÿ‘ซ ๐ŸŽ ๐Ÿ•น (๐Ÿ ๐Ÿ“). - -/// - -## ๐Ÿšซ โšช๏ธโžก๏ธ ๐Ÿ—„ - -๐Ÿšซ *โžก ๐Ÿ› ๏ธ* โšช๏ธโžก๏ธ ๐Ÿ— ๐Ÿ—„ ๐Ÿ”— (& โžก๏ธ, โšช๏ธโžก๏ธ ๐Ÿง ๐Ÿงพ โš™๏ธ), โš™๏ธ ๐Ÿ”ข `include_in_schema` & โš’ โšซ๏ธ `False`: - -{* ../../docs_src/path_operation_advanced_configuration/tutorial003.py hl[6] *} - -## ๐Ÿง ๐Ÿ“› โšช๏ธโžก๏ธ #๏ธโƒฃ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“‰ โธ โš™๏ธ โšช๏ธโžก๏ธ #๏ธโƒฃ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ—„. - -โŽ `\f` (๐Ÿ˜– "๐Ÿ“จ ๐Ÿผ" ๐Ÿฆน) ๐Ÿค• **FastAPI** ๐Ÿ” ๐Ÿ”ข โš™๏ธ ๐Ÿ—„ ๐Ÿ‘‰ โ˜. - -โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐ŸŽฆ ๐Ÿ†™ ๐Ÿงพ, โœ‹๏ธ ๐ŸŽ ๐Ÿงฐ (โœ… ๐Ÿ‰) ๐Ÿ”œ ๐Ÿ’ช โš™๏ธ ๐ŸŽ‚. - -{* ../../docs_src/path_operation_advanced_configuration/tutorial004.py hl[19:29] *} - -## ๐ŸŒ– ๐Ÿ“จ - -๐Ÿ‘† ๐ŸŽฒ โœ”๏ธ ๐Ÿ‘€ โ” ๐Ÿ“ฃ `response_model` & `status_code` *โžก ๐Ÿ› ๏ธ*. - -๐Ÿ‘ˆ ๐Ÿ”ฌ ๐Ÿ—ƒ ๐Ÿ”ƒ ๐Ÿ‘‘ ๐Ÿ“จ *โžก ๐Ÿ› ๏ธ*. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ– ๐Ÿ“จ โฎ๏ธ ๐Ÿ‘ซ ๐Ÿท, ๐Ÿ‘” ๐Ÿ“Ÿ, โ™’๏ธ. - -๐Ÿ“ค ๐ŸŽ‚ ๐Ÿ“ƒ ๐Ÿ“ฅ ๐Ÿงพ ๐Ÿ”ƒ โšซ๏ธ, ๐Ÿ‘† ๐Ÿ’ช โœ โšซ๏ธ [๐ŸŒ– ๐Ÿ“จ ๐Ÿ—„](additional-responses.md){.internal-link target=_blank}. - -## ๐Ÿ—„ โž• - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“ฃ *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘† ๐Ÿˆธ, **FastAPI** ๐Ÿ” ๐Ÿ— ๐Ÿ”— ๐Ÿ—ƒ ๐Ÿ”ƒ ๐Ÿ‘ˆ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”Œ ๐Ÿ—„ ๐Ÿ”—. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ—„ ๐Ÿ”ง โšซ๏ธ ๐Ÿค™ ๐Ÿ› ๏ธ ๐ŸŽš. - -/// - -โšซ๏ธ โœ”๏ธ ๐ŸŒ โ„น ๐Ÿ”ƒ *โžก ๐Ÿ› ๏ธ* & โš™๏ธ ๐Ÿ— ๐Ÿง ๐Ÿงพ. - -โšซ๏ธ ๐Ÿ”Œ `tags`, `parameters`, `requestBody`, `responses`, โ™’๏ธ. - -๐Ÿ‘‰ *โžก ๐Ÿ› ๏ธ*-๐ŸŽฏ ๐Ÿ—„ ๐Ÿ”— ๐Ÿ›Ž ๐Ÿ— ๐Ÿ” **FastAPI**, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช โ†” โšซ๏ธ. - -/// tip - -๐Ÿ‘‰ ๐Ÿ”… ๐ŸŽš โ†” โ˜. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ•ด ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ– ๐Ÿ“จ, ๐ŸŒ… ๐Ÿช ๐ŸŒŒ โšซ๏ธ โฎ๏ธ [๐ŸŒ– ๐Ÿ“จ ๐Ÿ—„](additional-responses.md){.internal-link target=_blank}. - -/// - -๐Ÿ‘† ๐Ÿ’ช โ†” ๐Ÿ—„ ๐Ÿ”— *โžก ๐Ÿ› ๏ธ* โš™๏ธ ๐Ÿ”ข `openapi_extra`. - -### ๐Ÿ—„ โ†” - -๐Ÿ‘‰ `openapi_extra` ๐Ÿ’ช ๐Ÿ‘, ๐Ÿ–ผ, ๐Ÿ“ฃ [๐Ÿ—„ โ†”](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specificationExtensions): - -{* ../../docs_src/path_operation_advanced_configuration/tutorial005.py hl[6] *} - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“‚ ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ, ๐Ÿ‘† โ†” ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ†™ ๐Ÿ” ๐ŸŽฏ *โžก ๐Ÿ› ๏ธ*. - - - -& ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘€ ๐Ÿ“‰ ๐Ÿ—„ ( `/openapi.json` ๐Ÿ‘† ๐Ÿ› ๏ธ), ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ‘† โ†” ๐Ÿ• ๐ŸŽฏ *โžก ๐Ÿ› ๏ธ* ๐Ÿ’โ€โ™‚๏ธ: - -```JSON hl_lines="22" -{ - "openapi": "3.0.2", - "info": { - "title": "FastAPI", - "version": "0.1.0" - }, - "paths": { - "/items/": { - "get": { - "summary": "Read Items", - "operationId": "read_items_items__get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "x-aperture-labs-portal": "blue" - } - } - } -} -``` - -### ๐Ÿ›ƒ ๐Ÿ—„ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”— - -๐Ÿ“– `openapi_extra` ๐Ÿ”œ ๐Ÿ™‡ ๐Ÿ”— โฎ๏ธ ๐Ÿ” ๐Ÿ— ๐Ÿ—„ ๐Ÿ”— *โžก ๐Ÿ› ๏ธ*. - -, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐ŸŒ– ๐Ÿ’ฝ ๐Ÿ” ๐Ÿ— ๐Ÿ”—. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ญ โœ & โœ” ๐Ÿ“จ โฎ๏ธ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ“Ÿ, ๐Ÿต โš™๏ธ ๐Ÿง โš’ FastAPI โฎ๏ธ Pydantic, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿ”ฌ ๐Ÿ“จ ๐Ÿ—„ ๐Ÿ”—. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘ˆ โฎ๏ธ `openapi_extra`: - -{* ../../docs_src/path_operation_advanced_configuration/tutorial006.py hl[20:37,39:40] *} - -๐Ÿ‘‰ ๐Ÿ–ผ, ๐Ÿ‘ฅ ๐Ÿšซ ๐Ÿ“ฃ ๐Ÿ™† Pydantic ๐Ÿท. ๐Ÿ‘, ๐Ÿ“จ ๐Ÿ’ช ๐Ÿšซ ๐ŸŽป ๐ŸŽป, โšซ๏ธ โœ ๐Ÿ”— `bytes`, & ๐Ÿ”ข `magic_data_reader()` ๐Ÿ”œ ๐Ÿˆš ๐ŸŽป โšซ๏ธ ๐ŸŒŒ. - -๐Ÿ‘, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“ˆ ๐Ÿ”— ๐Ÿ“จ ๐Ÿ’ช. - -### ๐Ÿ›ƒ ๐Ÿ—„ ๐ŸŽš ๐Ÿ†Ž - -โš™๏ธ ๐Ÿ‘‰ ๐ŸŽ ๐ŸŽฑ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ Pydantic ๐Ÿท ๐Ÿ”ฌ ๐ŸŽป ๐Ÿ”— ๐Ÿ‘ˆ โคด๏ธ ๐Ÿ”Œ ๐Ÿ›ƒ ๐Ÿ—„ ๐Ÿ”— ๐Ÿ“„ *โžก ๐Ÿ› ๏ธ*. - -& ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘‰ ๐Ÿšฅ ๐Ÿ’ฝ ๐Ÿ†Ž ๐Ÿ“จ ๐Ÿšซ ๐ŸŽป. - -๐Ÿ–ผ, ๐Ÿ‘‰ ๐Ÿˆธ ๐Ÿ‘ฅ ๐Ÿšซ โš™๏ธ FastAPI ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ โš— ๐ŸŽป ๐Ÿ”— โšช๏ธโžก๏ธ Pydantic ๐Ÿท ๐Ÿšซ ๐Ÿง ๐Ÿ”ฌ ๐ŸŽป. ๐Ÿ‘, ๐Ÿ‘ฅ ๐Ÿ“ฃ ๐Ÿ“จ ๐ŸŽš ๐Ÿ†Ž ๐Ÿ“, ๐Ÿšซ ๐ŸŽป: - -{* ../../docs_src/path_operation_advanced_configuration/tutorial007.py hl[17:22,24] *} - -๐Ÿ‘, ๐Ÿ‘ ๐Ÿ‘ฅ ๐Ÿšซ โš™๏ธ ๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ, ๐Ÿ‘ฅ โš™๏ธ Pydantic ๐Ÿท โŽ ๐Ÿ— ๐ŸŽป ๐Ÿ”— ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ’š ๐Ÿ“จ ๐Ÿ“. - -โคด๏ธ ๐Ÿ‘ฅ โš™๏ธ ๐Ÿ“จ ๐Ÿ”—, & โš— ๐Ÿ’ช `bytes`. ๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ FastAPI ๐Ÿ† ๐Ÿšซ ๐Ÿ”„ ๐ŸŽป ๐Ÿ“จ ๐Ÿš€ ๐ŸŽป. - -& โคด๏ธ ๐Ÿ‘† ๐Ÿ“Ÿ, ๐Ÿ‘ฅ ๐ŸŽป ๐Ÿ‘ˆ ๐Ÿ“ ๐ŸŽš ๐Ÿ”—, & โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ”„ โš™๏ธ ๐ŸŽ Pydantic ๐Ÿท โœ” ๐Ÿ“ ๐ŸŽš: - -{* ../../docs_src/path_operation_advanced_configuration/tutorial007.py hl[26:33] *} - -/// tip - -๐Ÿ“ฅ ๐Ÿ‘ฅ ๐Ÿค-โš™๏ธ ๐ŸŽ Pydantic ๐Ÿท. - -โœ‹๏ธ ๐ŸŽ ๐ŸŒŒ, ๐Ÿ‘ฅ ๐Ÿ’ช โœ”๏ธ โœ” โšซ๏ธ ๐ŸŽ ๐ŸŒŒ. - -/// diff --git a/docs/em/docs/advanced/response-change-status-code.md b/docs/em/docs/advanced/response-change-status-code.md deleted file mode 100644 index 4933484dd..000000000 --- a/docs/em/docs/advanced/response-change-status-code.md +++ /dev/null @@ -1,31 +0,0 @@ -# ๐Ÿ“จ - ๐Ÿ”€ ๐Ÿ‘” ๐Ÿ“Ÿ - -๐Ÿ‘† ๐ŸŽฒ โœ โญ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ”ข [๐Ÿ“จ ๐Ÿ‘” ๐Ÿ“Ÿ](../tutorial/response-status-code.md){.internal-link target=_blank}. - -โœ‹๏ธ ๐Ÿ’ผ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐ŸŽ ๐Ÿ‘” ๐Ÿ“Ÿ ๐ŸŒ˜ ๐Ÿ”ข. - -## โš™๏ธ ๐Ÿ’ผ - -๐Ÿ–ผ, ๐ŸŒˆ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ "๐Ÿ‘Œ" `200` ๐Ÿ”ข. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ’ฝ ๐Ÿšซ ๐Ÿ”€, ๐Ÿ‘† ๐Ÿ’š โœ โšซ๏ธ, & ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ "โœ" `201`. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ’ช โ›ฝ & ๐Ÿ—œ ๐Ÿ’ฝ ๐Ÿ‘† ๐Ÿ“จ โฎ๏ธ `response_model`. - -๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Response` ๐Ÿ”ข. - -## โš™๏ธ `Response` ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ†Ž `Response` ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* (๐Ÿ‘† ๐Ÿ’ช ๐Ÿช & ๐ŸŽš). - -& โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โš’ `status_code` ๐Ÿ‘ˆ *๐Ÿ”€* ๐Ÿ“จ ๐ŸŽš. - -{* ../../docs_src/response_change_status_code/tutorial001.py hl[1,9,12] *} - -& โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ™† ๐ŸŽš ๐Ÿ‘† ๐Ÿ’ช, ๐Ÿ‘† ๐Ÿ›Ž ๐Ÿ”œ ( `dict`, ๐Ÿ’ฝ ๐Ÿท, โ™’๏ธ). - -& ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ฃ `response_model`, โšซ๏ธ ๐Ÿ”œ โš™๏ธ โ›ฝ & ๐Ÿ—œ ๐ŸŽš ๐Ÿ‘† ๐Ÿ“จ. - -**FastAPI** ๐Ÿ”œ โš™๏ธ ๐Ÿ‘ˆ *๐Ÿ”€* ๐Ÿ“จ โš— ๐Ÿ‘” ๐Ÿ“Ÿ (๐Ÿช & ๐ŸŽš), & ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ’ฒ ๐Ÿ‘† ๐Ÿ“จ, โ›ฝ ๐Ÿ™† `response_model`. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ `Response` ๐Ÿ”ข ๐Ÿ”—, & โš’ ๐Ÿ‘” ๐Ÿ“Ÿ ๐Ÿ‘ซ. โœ‹๏ธ โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ 1๏ธโƒฃ โš’ ๐Ÿ”œ ๐Ÿ†. diff --git a/docs/em/docs/advanced/response-cookies.md b/docs/em/docs/advanced/response-cookies.md deleted file mode 100644 index a6e37ad74..000000000 --- a/docs/em/docs/advanced/response-cookies.md +++ /dev/null @@ -1,51 +0,0 @@ -# ๐Ÿ“จ ๐Ÿช - -## โš™๏ธ `Response` ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ†Ž `Response` ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -& โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿช ๐Ÿ‘ˆ *๐Ÿ”€* ๐Ÿ“จ ๐ŸŽš. - -{* ../../docs_src/response_cookies/tutorial002.py hl[1,8:9] *} - -& โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ™† ๐ŸŽš ๐Ÿ‘† ๐Ÿ’ช, ๐Ÿ‘† ๐Ÿ›Ž ๐Ÿ”œ ( `dict`, ๐Ÿ’ฝ ๐Ÿท, โ™’๏ธ). - -& ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ฃ `response_model`, โšซ๏ธ ๐Ÿ”œ โš™๏ธ โ›ฝ & ๐Ÿ—œ ๐ŸŽš ๐Ÿ‘† ๐Ÿ“จ. - -**FastAPI** ๐Ÿ”œ โš™๏ธ ๐Ÿ‘ˆ *๐Ÿ”€* ๐Ÿ“จ โš— ๐Ÿช (๐ŸŽš & ๐Ÿ‘” ๐Ÿ“Ÿ), & ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ’ฒ ๐Ÿ‘† ๐Ÿ“จ, โ›ฝ ๐Ÿ™† `response_model`. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ `Response` ๐Ÿ”ข ๐Ÿ”—, & โš’ ๐Ÿช (& ๐ŸŽš) ๐Ÿ‘ซ. - -## ๐Ÿ“จ `Response` ๐Ÿ”— - -๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿช ๐Ÿ•โ” ๐Ÿ›ฌ `Response` ๐Ÿ”— ๐Ÿ‘† ๐Ÿ“Ÿ. - -๐Ÿ‘ˆ, ๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿ“จ ๐Ÿ”ฌ [๐Ÿ“จ ๐Ÿ“จ ๐Ÿ”—](response-directly.md){.internal-link target=_blank}. - -โคด๏ธ โš’ ๐Ÿช โšซ๏ธ, & โคด๏ธ ๐Ÿ“จ โšซ๏ธ: - -{* ../../docs_src/response_cookies/tutorial001.py hl[10:12] *} - -/// tip - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ”— โ†ฉ๏ธ โš™๏ธ `Response` ๐Ÿ”ข, FastAPI ๐Ÿ”œ ๐Ÿ“จ โšซ๏ธ ๐Ÿ”—. - -, ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ โš’ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿ’ฝ โ˜‘ ๐Ÿ†Ž. ๐Ÿคถ โ“‚. โšซ๏ธ ๐Ÿ”— โฎ๏ธ ๐ŸŽป, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ›ฌ `JSONResponse`. - - & ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ“จ ๐Ÿ™† ๐Ÿ“Š ๐Ÿ‘ˆ ๐Ÿ”œ โœ”๏ธ โ›ฝ `response_model`. - -/// - -### ๐ŸŒ… โ„น - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.responses import Response` โš–๏ธ `from starlette.responses import JSONResponse`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.responses` `fastapi.responses` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - - & `Response` ๐Ÿ’ช โš™๏ธ ๐Ÿ›Ž โš’ ๐ŸŽš & ๐Ÿช, **FastAPI** ๐Ÿšš โšซ๏ธ `fastapi.Response`. - -/// - -๐Ÿ‘€ ๐ŸŒ ๐Ÿ’ช ๐Ÿ”ข & ๐ŸŽ›, โœ… ๐Ÿงพ ๐Ÿ’ƒ. diff --git a/docs/em/docs/advanced/response-directly.md b/docs/em/docs/advanced/response-directly.md deleted file mode 100644 index 29819a205..000000000 --- a/docs/em/docs/advanced/response-directly.md +++ /dev/null @@ -1,65 +0,0 @@ -# ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ”— - -๐Ÿ•โ” ๐Ÿ‘† โœ **FastAPI** *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ›Ž ๐Ÿ“จ ๐Ÿ™† ๐Ÿ“Š โšช๏ธโžก๏ธ โšซ๏ธ: `dict`, `list`, Pydantic ๐Ÿท, ๐Ÿ’ฝ ๐Ÿท, โ™’๏ธ. - -๐Ÿ”ข, **FastAPI** ๐Ÿ”œ ๐Ÿ” ๐Ÿ—œ ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ’ฒ ๐ŸŽป โš™๏ธ `jsonable_encoder` ๐Ÿ”ฌ [๐ŸŽป ๐Ÿ”— ๐Ÿ”ข](../tutorial/encoder.md){.internal-link target=_blank}. - -โคด๏ธ, โ›… ๐ŸŽ‘, โšซ๏ธ ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ‘ˆ ๐ŸŽป-๐Ÿ”— ๐Ÿ’ฝ (โœ… `dict`) ๐Ÿ”˜ `JSONResponse` ๐Ÿ‘ˆ ๐Ÿ”œ โš™๏ธ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ `JSONResponse` ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. - -โšซ๏ธ ๐Ÿ’ช โš , ๐Ÿ–ผ, ๐Ÿ“จ ๐Ÿ›ƒ ๐ŸŽš โš–๏ธ ๐Ÿช. - -## ๐Ÿ“จ `Response` - -๐Ÿ‘, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ™† `Response` โš–๏ธ ๐Ÿ™† ๐ŸŽง-๐ŸŽ“ โšซ๏ธ. - -/// tip - -`JSONResponse` โšซ๏ธ ๐ŸŽง-๐ŸŽ“ `Response`. - -/// - -& ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“จ `Response`, **FastAPI** ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐Ÿ”—. - -โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐Ÿ™† ๐Ÿ’ฝ ๐Ÿ› ๏ธ โฎ๏ธ Pydantic ๐Ÿท, โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐Ÿ—œ ๐ŸŽš ๐Ÿ™† ๐Ÿ†Ž, โ™’๏ธ. - -๐Ÿ‘‰ ๐Ÿค ๐Ÿ‘† ๐Ÿ“š ๐Ÿ’ช. ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ™† ๐Ÿ“Š ๐Ÿ†Ž, ๐Ÿ” ๐Ÿ™† ๐Ÿ’ฝ ๐Ÿ“„ โš–๏ธ ๐Ÿ”ฌ, โ™’๏ธ. - -## โš™๏ธ `jsonable_encoder` `Response` - -โ†ฉ๏ธ **FastAPI** ๐Ÿšซ ๐Ÿ™† ๐Ÿ”€ `Response` ๐Ÿ‘† ๐Ÿ“จ, ๐Ÿ‘† โœ”๏ธ โš’ ๐Ÿ’ญ โšซ๏ธ ๐ŸŽš ๐Ÿ”œ โšซ๏ธ. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ ๐Ÿšฎ Pydantic ๐Ÿท `JSONResponse` ๐Ÿต ๐Ÿฅ‡ ๐Ÿญ โšซ๏ธ `dict` โฎ๏ธ ๐ŸŒ ๐Ÿ“Š ๐Ÿ†Ž (๐Ÿ’– `datetime`, `UUID`, โ™’๏ธ) ๐Ÿ—œ ๐ŸŽป-๐Ÿ”— ๐Ÿ†Ž. - -๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `jsonable_encoder` ๐Ÿ—œ ๐Ÿ‘† ๐Ÿ“Š โญ ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐Ÿ“จ: - -{* ../../docs_src/response_directly/tutorial001.py hl[6:7,21:22] *} - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.responses import JSONResponse`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.responses` `fastapi.responses` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -## ๐Ÿ›ฌ ๐Ÿ›ƒ `Response` - -๐Ÿ–ผ ๐Ÿ”› ๐ŸŽฆ ๐ŸŒ ๐Ÿ• ๐Ÿ‘† ๐Ÿ’ช, โœ‹๏ธ โšซ๏ธ ๐Ÿšซ ๐Ÿ“ถ โš , ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ“จ `item` ๐Ÿ”—, & **FastAPI** ๐Ÿ”œ ๐Ÿšฎ โšซ๏ธ `JSONResponse` ๐Ÿ‘†, ๐Ÿญ โšซ๏ธ `dict`, โ™’๏ธ. ๐ŸŒ ๐Ÿ‘ˆ ๐Ÿ”ข. - -๐Ÿ”œ, โžก๏ธ ๐Ÿ‘€ โ” ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ›ƒ ๐Ÿ“จ. - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ“จ ๐Ÿ“‚ ๐Ÿ“จ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ‘† ๐Ÿ“‚ ๐ŸŽš ๐ŸŽป, ๐Ÿšฎ โšซ๏ธ `Response`, & ๐Ÿ“จ โšซ๏ธ: - -{* ../../docs_src/response_directly/tutorial002.py hl[1,18] *} - -## ๐Ÿ—’ - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“จ `Response` ๐Ÿ”— ๐Ÿšฎ ๐Ÿ“Š ๐Ÿšซ โœ”, ๐Ÿ—œ (๐ŸŽป), ๐Ÿšซ ๐Ÿ“„ ๐Ÿ”. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“„ โšซ๏ธ ๐Ÿ”ฌ [๐ŸŒ– ๐Ÿ“จ ๐Ÿ—„](additional-responses.md){.internal-link target=_blank}. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘€ โช ๐Ÿ“„ โ” โš™๏ธ/๐Ÿ“ฃ ๐Ÿ‘‰ ๐Ÿ›ƒ `Response`โ“‚ โช โœ”๏ธ ๐Ÿง ๐Ÿ’ฝ ๐Ÿ› ๏ธ, ๐Ÿงพ, โ™’๏ธ. diff --git a/docs/em/docs/advanced/response-headers.md b/docs/em/docs/advanced/response-headers.md deleted file mode 100644 index c255380d6..000000000 --- a/docs/em/docs/advanced/response-headers.md +++ /dev/null @@ -1,41 +0,0 @@ -# ๐Ÿ“จ ๐ŸŽš - -## โš™๏ธ `Response` ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ†Ž `Response` ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* (๐Ÿ‘† ๐Ÿ’ช ๐Ÿช). - -& โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โš’ ๐ŸŽš ๐Ÿ‘ˆ *๐Ÿ”€* ๐Ÿ“จ ๐ŸŽš. - -{* ../../docs_src/response_headers/tutorial002.py hl[1,7:8] *} - -& โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ™† ๐ŸŽš ๐Ÿ‘† ๐Ÿ’ช, ๐Ÿ‘† ๐Ÿ›Ž ๐Ÿ”œ ( `dict`, ๐Ÿ’ฝ ๐Ÿท, โ™’๏ธ). - -& ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ฃ `response_model`, โšซ๏ธ ๐Ÿ”œ โš™๏ธ โ›ฝ & ๐Ÿ—œ ๐ŸŽš ๐Ÿ‘† ๐Ÿ“จ. - -**FastAPI** ๐Ÿ”œ โš™๏ธ ๐Ÿ‘ˆ *๐Ÿ”€* ๐Ÿ“จ โš— ๐ŸŽš (๐Ÿช & ๐Ÿ‘” ๐Ÿ“Ÿ), & ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ’ฒ ๐Ÿ‘† ๐Ÿ“จ, โ›ฝ ๐Ÿ™† `response_model`. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ `Response` ๐Ÿ”ข ๐Ÿ”—, & โš’ ๐ŸŽš (& ๐Ÿช) ๐Ÿ‘ซ. - -## ๐Ÿ“จ `Response` ๐Ÿ”— - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐ŸŽš ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“จ `Response` ๐Ÿ”—. - -โœ ๐Ÿ“จ ๐Ÿ”ฌ [๐Ÿ“จ ๐Ÿ“จ ๐Ÿ”—](response-directly.md){.internal-link target=_blank} & ๐Ÿšถโ€โ™€๏ธ ๐ŸŽš ๐ŸŒ– ๐Ÿ”ข: - -{* ../../docs_src/response_headers/tutorial001.py hl[10:12] *} - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.responses import Response` โš–๏ธ `from starlette.responses import JSONResponse`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.responses` `fastapi.responses` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - - & `Response` ๐Ÿ’ช โš™๏ธ ๐Ÿ›Ž โš’ ๐ŸŽš & ๐Ÿช, **FastAPI** ๐Ÿšš โšซ๏ธ `fastapi.Response`. - -/// - -## ๐Ÿ›ƒ ๐ŸŽš - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ›ƒ ยฉ ๐ŸŽš ๐Ÿ’ช ๐Ÿšฎ โš™๏ธ 'โœ–-' ๐Ÿ”ก. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ›ƒ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ–ฅ ๐Ÿ’ช ๐Ÿ‘€, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ‘† โšœ ๐Ÿ“ณ (โœ ๐ŸŒ… [โšœ (โœ–๏ธ-๐Ÿ‡จ๐Ÿ‡ณ โ„น ๐Ÿค)](../tutorial/cors.md){.internal-link target=_blank}), โš™๏ธ ๐Ÿ”ข `expose_headers` ๐Ÿ“„ ๐Ÿ’ƒ โšœ ๐Ÿฉบ. diff --git a/docs/em/docs/advanced/security/http-basic-auth.md b/docs/em/docs/advanced/security/http-basic-auth.md deleted file mode 100644 index 73736f3b3..000000000 --- a/docs/em/docs/advanced/security/http-basic-auth.md +++ /dev/null @@ -1,107 +0,0 @@ -# ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ”ฐ ๐Ÿ” - -๐Ÿ™… ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ”ฐ ๐Ÿ”. - -๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ”ฐ ๐Ÿ”, ๐Ÿˆธ โŒ› ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ†” & ๐Ÿ”. - -๐Ÿšฅ โšซ๏ธ ๐Ÿšซ ๐Ÿ“จ โšซ๏ธ, โšซ๏ธ ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” 4๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ "โ›”" โŒ. - -& ๐Ÿ“จ ๐ŸŽš `WWW-Authenticate` โฎ๏ธ ๐Ÿ’ฒ `Basic`, & ๐Ÿ“ฆ `realm` ๐Ÿ”ข. - -๐Ÿ‘ˆ ๐Ÿ’ฌ ๐Ÿ–ฅ ๐ŸŽฆ ๐Ÿ› ๏ธ ๐Ÿ“‹ ๐Ÿ†” & ๐Ÿ”. - -โคด๏ธ, ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ†Ž ๐Ÿ‘ˆ ๐Ÿ†” & ๐Ÿ”, ๐Ÿ–ฅ ๐Ÿ“จ ๐Ÿ‘ซ ๐ŸŽš ๐Ÿ”. - -## ๐Ÿ™… ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ”ฐ ๐Ÿ” - -* ๐Ÿ—„ `HTTPBasic` & `HTTPBasicCredentials`. -* โœ "`security` โš–" โš™๏ธ `HTTPBasic`. -* โš™๏ธ ๐Ÿ‘ˆ `security` โฎ๏ธ ๐Ÿ”— ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. -* โšซ๏ธ ๐Ÿ“จ ๐ŸŽš ๐Ÿ†Ž `HTTPBasicCredentials`: - * โšซ๏ธ ๐Ÿ”Œ `username` & `password` ๐Ÿ“จ. - -{* ../../docs_src/security/tutorial006.py hl[2,6,10] *} - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ”„ ๐Ÿ“‚ ๐Ÿ“› ๐Ÿฅ‡ ๐Ÿ•ฐ (โš–๏ธ ๐Ÿ–Š "๐Ÿ› ๏ธ" ๐Ÿ”ผ ๐Ÿฉบ) ๐Ÿ–ฅ ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿ‘† ๐Ÿ†” & ๐Ÿ”: - - - -## โœ… ๐Ÿ†” - -๐Ÿ“ฅ ๐ŸŒ… ๐Ÿ ๐Ÿ–ผ. - -โš™๏ธ ๐Ÿ”— โœ… ๐Ÿšฅ ๐Ÿ†” & ๐Ÿ” โ˜‘. - -๐Ÿ‘‰, โš™๏ธ ๐Ÿ ๐Ÿฉ ๐Ÿ•น `secrets` โœ… ๐Ÿ†” & ๐Ÿ”. - -`secrets.compare_digest()` ๐Ÿ’ช โœŠ `bytes` โš–๏ธ `str` ๐Ÿ‘ˆ ๐Ÿ•ด ๐Ÿ”Œ ๐Ÿ”  ๐Ÿฆน (๐Ÿ• ๐Ÿ‡ช๐Ÿ‡ธ), ๐Ÿ‘‰ โ›“ โšซ๏ธ ๐Ÿšซ๐Ÿ”œ ๐Ÿ‘ท โฎ๏ธ ๐Ÿฆน ๐Ÿ’– `รก`, `Sebastiรกn`. - -๐Ÿต ๐Ÿ‘ˆ, ๐Ÿ‘ฅ ๐Ÿฅ‡ ๐Ÿ—œ `username` & `password` `bytes` ๐Ÿ”ข ๐Ÿ‘ซ โฎ๏ธ ๐Ÿ” -8๏ธโƒฃ. - -โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ `secrets.compare_digest()` ๐Ÿšš ๐Ÿ‘ˆ `credentials.username` `"stanleyjobson"`, & ๐Ÿ‘ˆ `credentials.password` `"swordfish"`. - -{* ../../docs_src/security/tutorial007.py hl[1,11:21] *} - -๐Ÿ‘‰ ๐Ÿ”œ ๐ŸŽ: - -```Python -if not (credentials.username == "stanleyjobson") or not (credentials.password == "swordfish"): - # Return some error - ... -``` - -โœ‹๏ธ โš™๏ธ `secrets.compare_digest()` โšซ๏ธ ๐Ÿ”œ ๐Ÿ” ๐Ÿ›ก ๐Ÿ†Ž ๐Ÿ‘Š ๐Ÿค™ "๐Ÿ•ฐ ๐Ÿ‘Š". - -### โฒ ๐Ÿ‘Š - -โœ‹๏ธ โšซ๏ธโ” "โฒ ๐Ÿ‘Š"โ“ - -โžก๏ธ ๐ŸŒˆ ๐Ÿ‘Š ๐Ÿ”„ ๐Ÿ’ญ ๐Ÿ†” & ๐Ÿ”. - -& ๐Ÿ‘ซ ๐Ÿ“จ ๐Ÿ“จ โฎ๏ธ ๐Ÿ†” `johndoe` & ๐Ÿ” `love123`. - -โคด๏ธ ๐Ÿ ๐Ÿ“Ÿ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ”œ ๐ŸŒ“ ๐Ÿ•ณ ๐Ÿ’–: - -```Python -if "johndoe" == "stanleyjobson" and "love123" == "swordfish": - ... -``` - -โœ‹๏ธ โ–ถ๏ธ๏ธ ๐Ÿ™ ๐Ÿ ๐Ÿ”ฌ ๐Ÿฅ‡ `j` `johndoe` ๐Ÿฅ‡ `s` `stanleyjobson`, โšซ๏ธ ๐Ÿ”œ ๐Ÿ“จ `False`, โ†ฉ๏ธ โšซ๏ธ โช ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ“š 2๏ธโƒฃ ๐ŸŽป ๐Ÿšซ ๐ŸŽ, ๐Ÿ’ญ ๐Ÿ‘ˆ "๐Ÿ“ค ๐Ÿ™…โ€โ™‚ ๐Ÿ’ช ๐Ÿ—‘ ๐ŸŒ… ๐Ÿ“Š โš– ๐ŸŽ‚ ๐Ÿ”ค". & ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ”œ ๐Ÿ’ฌ "โŒ ๐Ÿ‘ฉโ€๐Ÿ’ป โš–๏ธ ๐Ÿ”". - -โœ‹๏ธ โคด๏ธ ๐Ÿ‘Š ๐Ÿ”„ โฎ๏ธ ๐Ÿ†” `stanleyjobsox` & ๐Ÿ” `love123`. - -& ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ“Ÿ ๐Ÿ”จ ๐Ÿ•ณ ๐Ÿ’–: - -```Python -if "stanleyjobsox" == "stanleyjobson" and "love123" == "swordfish": - ... -``` - -๐Ÿ ๐Ÿ”œ โœ”๏ธ ๐Ÿ”ฌ ๐ŸŽ‚ `stanleyjobso` ๐Ÿ‘ฏโ€โ™‚๏ธ `stanleyjobsox` & `stanleyjobson` โญ ๐Ÿค” ๐Ÿ‘ˆ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐ŸŽป ๐Ÿšซ ๐ŸŽ. โšซ๏ธ ๐Ÿ”œ โœŠ โž• โฒ ๐Ÿ“จ ๐Ÿ”™ "โŒ ๐Ÿ‘ฉโ€๐Ÿ’ป โš–๏ธ ๐Ÿ”". - -#### ๐Ÿ•ฐ โ” โ„น ๐Ÿ‘Š - -๐Ÿ‘ˆ โ˜, ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ’ฝ โœŠ โฒ ๐Ÿ“ ๐Ÿ“จ "โŒ ๐Ÿ‘ฉโ€๐Ÿ’ป โš–๏ธ ๐Ÿ”" ๐Ÿ“จ, ๐Ÿ‘Š ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘ซ ๐Ÿคš _๐Ÿ•ณ_ โ–ถ๏ธ๏ธ, โ–ถ๏ธ ๐Ÿ”ค โ–ถ๏ธ๏ธ. - -& โคด๏ธ ๐Ÿ‘ซ ๐Ÿ’ช ๐Ÿ”„ ๐Ÿ”„ ๐Ÿค” ๐Ÿ‘ˆ โšซ๏ธ ๐ŸŽฒ ๐Ÿ•ณ ๐ŸŒ– ๐ŸŽ `stanleyjobsox` ๐ŸŒ˜ `johndoe`. - -#### "๐Ÿ•ด" ๐Ÿ‘Š - -โ†—๏ธ, ๐Ÿ‘Š ๐Ÿ”œ ๐Ÿšซ ๐Ÿ”„ ๐ŸŒ ๐Ÿ‘‰ โœ‹, ๐Ÿ‘ซ ๐Ÿ”œ โœ ๐Ÿ“‹ โšซ๏ธ, ๐ŸŽฒ โฎ๏ธ ๐Ÿ’ฏ โš–๏ธ ๐Ÿ’ฏ ๐Ÿ’ฏ ๐Ÿ“ ๐Ÿฅˆ. & ๐Ÿ”œ ๐Ÿคš 1๏ธโƒฃ โž• โ˜‘ ๐Ÿ”ค ๐Ÿ•ฐ. - -โœ‹๏ธ ๐Ÿ”จ ๐Ÿ‘ˆ, โฒ โš–๏ธ ๐Ÿ“† ๐Ÿ‘Š ๐Ÿ”œ โœ”๏ธ ๐Ÿ’ญ โ˜‘ ๐Ÿ†” & ๐Ÿ”, โฎ๏ธ "โ„น" ๐Ÿ‘† ๐Ÿˆธ, โš™๏ธ ๐Ÿ•ฐ โœŠ โ”. - -#### ๐Ÿ”ง โšซ๏ธ โฎ๏ธ `secrets.compare_digest()` - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ“Ÿ ๐Ÿ‘ฅ ๐Ÿค™ โš™๏ธ `secrets.compare_digest()`. - -๐Ÿ“, โšซ๏ธ ๐Ÿ”œ โœŠ ๐ŸŽ ๐Ÿ•ฐ ๐Ÿ”ฌ `stanleyjobsox` `stanleyjobson` ๐ŸŒ˜ โšซ๏ธ โœŠ ๐Ÿ”ฌ `johndoe` `stanleyjobson`. & ๐ŸŽ ๐Ÿ”. - -๐Ÿ‘ˆ ๐ŸŒŒ, โš™๏ธ `secrets.compare_digest()` ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ“Ÿ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ”’ ๐Ÿ›ก ๐Ÿ‘‰ ๐ŸŽ‚ โ†” ๐Ÿ’‚โ€โ™‚ ๐Ÿ‘Š. - -### ๐Ÿ“จ โŒ - -โฎ๏ธ ๐Ÿ” ๐Ÿ‘ˆ ๐ŸŽ“ โŒ, ๐Ÿ“จ `HTTPException` โฎ๏ธ ๐Ÿ‘” ๐Ÿ“Ÿ 4๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ (๐ŸŽ ๐Ÿ“จ ๐Ÿ•โ” ๐Ÿ™…โ€โ™‚ ๐ŸŽ“ ๐Ÿšš) & ๐Ÿšฎ ๐ŸŽš `WWW-Authenticate` โš’ ๐Ÿ–ฅ ๐ŸŽฆ ๐Ÿ’ณ ๐Ÿ“‹ ๐Ÿ”„: - -{* ../../docs_src/security/tutorial007.py hl[23:27] *} diff --git a/docs/em/docs/advanced/security/index.md b/docs/em/docs/advanced/security/index.md deleted file mode 100644 index 5cdc47505..000000000 --- a/docs/em/docs/advanced/security/index.md +++ /dev/null @@ -1,19 +0,0 @@ -# ๐Ÿง ๐Ÿ’‚โ€โ™‚ - -## ๐ŸŒ– โš’ - -๐Ÿ“ค โž• โš’ ๐Ÿต ๐Ÿ’‚โ€โ™‚ โ†–๏ธ โšช๏ธโžก๏ธ ๐Ÿ• ๐Ÿ“” [๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ: ๐Ÿ’‚โ€โ™‚](../../tutorial/security/index.md){.internal-link target=_blank}. - -/// tip - -โญ ๐Ÿ“„ **๐Ÿšซ ๐ŸŽฏ "๐Ÿง"**. - - & โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘ˆ ๐Ÿ‘† โš™๏ธ ๐Ÿ’ผ, โš— 1๏ธโƒฃ ๐Ÿ‘ซ. - -/// - -## โœ ๐Ÿ”ฐ ๐Ÿฅ‡ - -โญ ๐Ÿ“„ ๐Ÿค” ๐Ÿ‘† โช โœ ๐Ÿ‘‘ [๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ: ๐Ÿ’‚โ€โ™‚](../../tutorial/security/index.md){.internal-link target=_blank}. - -๐Ÿ‘ซ ๐ŸŒ โš“๏ธ ๐Ÿ”› ๐ŸŽ ๐Ÿ”ง, โœ‹๏ธ โœ” โž• ๐Ÿ› ๏ธ. diff --git a/docs/em/docs/advanced/security/oauth2-scopes.md b/docs/em/docs/advanced/security/oauth2-scopes.md deleted file mode 100644 index 9e3bc0058..000000000 --- a/docs/em/docs/advanced/security/oauth2-scopes.md +++ /dev/null @@ -1,274 +0,0 @@ -# Oauth2๏ธโƒฃ โ†” - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ Oauth2๏ธโƒฃ โ†” ๐Ÿ”— โฎ๏ธ **FastAPI**, ๐Ÿ‘ซ ๐Ÿ› ๏ธ ๐Ÿ‘ท ๐Ÿ’Ž. - -๐Ÿ‘‰ ๐Ÿ”œ โœ” ๐Ÿ‘† โœ”๏ธ ๐ŸŒ– ๐Ÿ‘Œ-๐Ÿงฝ โœ” โš™๏ธ, ๐Ÿ“„ Oauth2๏ธโƒฃ ๐Ÿฉ, ๐Ÿ› ๏ธ ๐Ÿ”˜ ๐Ÿ‘† ๐Ÿ—„ ๐Ÿˆธ (& ๐Ÿ› ๏ธ ๐Ÿฉบ). - -Oauth2๏ธโƒฃ โฎ๏ธ โ†” ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿ“š ๐Ÿฆ ๐Ÿค ๐Ÿ•โ€๐Ÿฆบ, ๐Ÿ’– ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, ๐Ÿ“‚, ๐Ÿคธโ€โ™‚, ๐Ÿ‘ฑ๐Ÿ“”, โ™’๏ธ. ๐Ÿ‘ซ โš™๏ธ โšซ๏ธ ๐Ÿšš ๐ŸŽฏ โœ” ๐Ÿ‘ฉโ€๐Ÿ’ป & ๐Ÿˆธ. - -๐Ÿ”  ๐Ÿ•ฐ ๐Ÿ‘† "๐Ÿ•น โฎ๏ธ" ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, ๐Ÿ“‚, ๐Ÿคธโ€โ™‚, ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ‘ˆ ๐Ÿˆธ โš™๏ธ Oauth2๏ธโƒฃ โฎ๏ธ โ†”. - -๐Ÿ‘‰ ๐Ÿ“„ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โ” ๐Ÿ› ๏ธ ๐Ÿค & โœ” โฎ๏ธ ๐ŸŽ Oauth2๏ธโƒฃ โฎ๏ธ โ†” ๐Ÿ‘† **FastAPI** ๐Ÿˆธ. - -/// warning - -๐Ÿ‘‰ ๐ŸŒ… โš–๏ธ ๐ŸŒ˜ ๐Ÿง ๐Ÿ“„. ๐Ÿšฅ ๐Ÿ‘† โ–ถ๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถ โšซ๏ธ. - -๐Ÿ‘† ๐Ÿšซ ๐ŸŽฏ ๐Ÿ’ช Oauth2๏ธโƒฃ โ†”, & ๐Ÿ‘† ๐Ÿ’ช ๐Ÿต ๐Ÿค & โœ” ๐Ÿ‘ ๐Ÿ‘† ๐Ÿ’š. - -โœ‹๏ธ Oauth2๏ธโƒฃ โฎ๏ธ โ†” ๐Ÿ’ช ๐ŸŽ† ๐Ÿ› ๏ธ ๐Ÿ”˜ ๐Ÿ‘† ๐Ÿ› ๏ธ (โฎ๏ธ ๐Ÿ—„) & ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿฉบ. - -๐Ÿ‘, ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ“š โ†”, โš–๏ธ ๐Ÿ™† ๐ŸŽ ๐Ÿ’‚โ€โ™‚/โœ” ๐Ÿ“„, ๐Ÿ‘ ๐Ÿ‘† ๐Ÿ’ช, ๐Ÿ‘† ๐Ÿ“Ÿ. - -๐Ÿ“š ๐Ÿ’ผ, Oauth2๏ธโƒฃ โฎ๏ธ โ†” ๐Ÿ’ช ๐Ÿ‘น. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿ’ช โšซ๏ธ, โš–๏ธ ๐Ÿ‘† ๐Ÿ˜Ÿ, ๐Ÿšง ๐Ÿ‘‚. - -/// - -## Oauth2๏ธโƒฃ โ†” & ๐Ÿ—„ - -Oauth2๏ธโƒฃ ๐Ÿ”ง ๐Ÿ”ฌ "โ†”" ๐Ÿ“‡ ๐ŸŽป ๐ŸŽ ๐Ÿš€. - -๐ŸŽš ๐Ÿ”  ๐Ÿ‘‰ ๐ŸŽป ๐Ÿ’ช โœ”๏ธ ๐Ÿ™† ๐Ÿ“, โœ‹๏ธ ๐Ÿ”œ ๐Ÿšซ ๐Ÿ”Œ ๐Ÿš€. - -๐Ÿ‘ซ โ†” ๐ŸŽจ "โœ”". - -๐Ÿ—„ (โœ… ๐Ÿ› ๏ธ ๐Ÿฉบ), ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ "๐Ÿ’‚โ€โ™‚ โš–". - -๐Ÿ•โ” 1๏ธโƒฃ ๐Ÿ‘ซ ๐Ÿ’‚โ€โ™‚ โš– โš™๏ธ Oauth2๏ธโƒฃ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ & โš™๏ธ โ†”. - -๐Ÿ”  "โ†”" ๐ŸŽป (๐Ÿต ๐Ÿš€). - -๐Ÿ‘ซ ๐Ÿ›Ž โš™๏ธ ๐Ÿ“ฃ ๐ŸŽฏ ๐Ÿ’‚โ€โ™‚ โœ”, ๐Ÿ–ผ: - -* `users:read` โš–๏ธ `users:write` โš  ๐Ÿ–ผ. -* `instagram_basic` โš™๏ธ ๐Ÿ‘ฑ๐Ÿ“” / ๐Ÿ‘ฑ๐Ÿ“”. -* `https://www.googleapis.com/auth/drive` โš™๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”. - -/// info - -Oauth2๏ธโƒฃ "โ†”" ๐ŸŽป ๐Ÿ‘ˆ ๐Ÿ“ฃ ๐ŸŽฏ โœ” โœ”. - -โšซ๏ธ ๐Ÿšซ ๐Ÿค” ๐Ÿšฅ โšซ๏ธ โœ”๏ธ ๐ŸŽ ๐Ÿฆน ๐Ÿ’– `:` โš–๏ธ ๐Ÿšฅ โšซ๏ธ ๐Ÿ“›. - -๐Ÿ‘ˆ โ„น ๐Ÿ› ๏ธ ๐ŸŽฏ. - -Oauth2๏ธโƒฃ ๐Ÿ‘ซ ๐ŸŽป. - -/// - -## ๐ŸŒ ๐ŸŽ‘ - -๐Ÿฅ‡, โžก๏ธ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ• ๐Ÿ‘ˆ ๐Ÿ”€ โšช๏ธโžก๏ธ ๐Ÿ–ผ ๐Ÿ‘‘ **๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ** [Oauth2๏ธโƒฃ โฎ๏ธ ๐Ÿ” (& ๐Ÿ”), ๐Ÿ“จ โฎ๏ธ ๐Ÿฅ™ ๐Ÿค](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank}. ๐Ÿ”œ โš™๏ธ Oauth2๏ธโƒฃ โ†”: - -{* ../../docs_src/security/tutorial005.py hl[2,4,8,12,46,64,105,107:115,121:125,129:135,140,156] *} - -๐Ÿ”œ โžก๏ธ ๐Ÿ“„ ๐Ÿ‘ˆ ๐Ÿ”€ ๐Ÿ” ๐Ÿ”. - -## Oauth2๏ธโƒฃ ๐Ÿ’‚โ€โ™‚ โš– - -๐Ÿฅ‡ ๐Ÿ”€ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ‘ฅ ๐Ÿ“ฃ Oauth2๏ธโƒฃ ๐Ÿ’‚โ€โ™‚ โš– โฎ๏ธ 2๏ธโƒฃ ๐Ÿ’ช โ†”, `me` & `items`. - -`scopes` ๐Ÿ”ข ๐Ÿ“จ `dict` โฎ๏ธ ๐Ÿ”  โ†” ๐Ÿ”‘ & ๐Ÿ“› ๐Ÿ’ฒ: - -{* ../../docs_src/security/tutorial005.py hl[62:65] *} - -โ†ฉ๏ธ ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ“ฃ ๐Ÿ“š โ†”, ๐Ÿ‘ซ ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ†™ ๐Ÿ› ๏ธ ๐Ÿฉบ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ•น-/โœ”. - -& ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ–Š โ” โ†” ๐Ÿ‘† ๐Ÿ’š ๐Ÿค ๐Ÿ”: `me` & `items`. - -๐Ÿ‘‰ ๐ŸŽ ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿค โœ” โช ๐Ÿšจ โฎ๏ธ ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, ๐Ÿ“‚, โ™’๏ธ: - - - -## ๐Ÿฅ™ ๐Ÿค โฎ๏ธ โ†” - -๐Ÿ”œ, ๐Ÿ”€ ๐Ÿค *โžก ๐Ÿ› ๏ธ* ๐Ÿ“จ โ†” ๐Ÿ“จ. - -๐Ÿ‘ฅ โš™๏ธ ๐ŸŽ `OAuth2PasswordRequestForm`. โšซ๏ธ ๐Ÿ”Œ ๐Ÿ  `scopes` โฎ๏ธ `list` `str`, โฎ๏ธ ๐Ÿ”  โ†” โšซ๏ธ ๐Ÿ“จ ๐Ÿ“จ. - -& ๐Ÿ‘ฅ ๐Ÿ“จ โ†” ๐Ÿ• ๐Ÿฅ™ ๐Ÿค. - -/// danger - -๐Ÿฆ, ๐Ÿ“ฅ ๐Ÿ‘ฅ โŽ โ†” ๐Ÿ“จ ๐Ÿ”— ๐Ÿค. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿˆธ, ๐Ÿ’‚โ€โ™‚, ๐Ÿ‘† ๐Ÿ”œ โš’ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿ•ด ๐Ÿšฎ โ†” ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿค™ ๐Ÿ’ช โœ”๏ธ, โš–๏ธ ๐Ÿ• ๐Ÿ‘† โœ”๏ธ ๐Ÿ”. - -/// - -{* ../../docs_src/security/tutorial005.py hl[156] *} - -## ๐Ÿ“ฃ โ†” *โžก ๐Ÿ› ๏ธ* & ๐Ÿ”— - -๐Ÿ”œ ๐Ÿ‘ฅ ๐Ÿ“ฃ ๐Ÿ‘ˆ *โžก ๐Ÿ› ๏ธ* `/users/me/items/` ๐Ÿšš โ†” `items`. - -๐Ÿ‘‰, ๐Ÿ‘ฅ ๐Ÿ—„ & โš™๏ธ `Security` โšช๏ธโžก๏ธ `fastapi`. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Security` ๐Ÿ“ฃ ๐Ÿ”— (๐Ÿ’– `Depends`), โœ‹๏ธ `Security` ๐Ÿ“จ ๐Ÿ”ข `scopes` โฎ๏ธ ๐Ÿ“‡ โ†” (๐ŸŽป). - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘ฅ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”— ๐Ÿ”ข `get_current_active_user` `Security` (๐ŸŽ ๐ŸŒŒ ๐Ÿ‘ฅ ๐Ÿ”œ โฎ๏ธ `Depends`). - -โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿšถโ€โ™€๏ธ `list` โ†”, ๐Ÿ‘‰ ๐Ÿ’ผ โฎ๏ธ 1๏ธโƒฃ โ†”: `items` (โšซ๏ธ ๐Ÿ’ช โœ”๏ธ ๐ŸŒ…). - -& ๐Ÿ”— ๐Ÿ”ข `get_current_active_user` ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŽง-๐Ÿ”—, ๐Ÿšซ ๐Ÿ•ด โฎ๏ธ `Depends` โœ‹๏ธ โฎ๏ธ `Security`. ๐Ÿ“ฃ ๐Ÿšฎ ๐Ÿ‘ ๐ŸŽง-๐Ÿ”— ๐Ÿ”ข (`get_current_user`), & ๐ŸŒ– โ†” ๐Ÿ“„. - -๐Ÿ‘‰ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿšš โ†” `me` (โšซ๏ธ ๐Ÿ’ช ๐Ÿšš ๐ŸŒ… ๐ŸŒ˜ 1๏ธโƒฃ โ†”). - -/// note - -๐Ÿ‘† ๐Ÿšซ ๐ŸŽฏ ๐Ÿ’ช ๐Ÿšฎ ๐ŸŽ โ†” ๐ŸŽ ๐Ÿฅ‰. - -๐Ÿ‘ฅ ๐Ÿ”จ โšซ๏ธ ๐Ÿ“ฅ ๐ŸŽฆ โ” **FastAPI** ๐Ÿต โ†” ๐Ÿ“ฃ ๐ŸŽ ๐ŸŽš. - -/// - -{* ../../docs_src/security/tutorial005.py hl[4,140,169] *} - -/// info | ๐Ÿ“ก โ„น - -`Security` ๐Ÿค™ ๐Ÿฟ `Depends`, & โšซ๏ธ โœ”๏ธ 1๏ธโƒฃ โž• ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘€ โช. - -โœ‹๏ธ โš™๏ธ `Security` โ†ฉ๏ธ `Depends`, **FastAPI** ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ’‚โ€โ™‚ โ†”, โš™๏ธ ๐Ÿ‘ซ ๐Ÿ”˜, & ๐Ÿ“„ ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ—„. - -โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ—„ `Query`, `Path`, `Depends`, `Security` & ๐ŸŽ โšช๏ธโžก๏ธ `fastapi`, ๐Ÿ‘ˆ ๐Ÿค™ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“จ ๐ŸŽ ๐ŸŽ“. - -/// - -## โš™๏ธ `SecurityScopes` - -๐Ÿ”œ โ„น ๐Ÿ”— `get_current_user`. - -๐Ÿ‘‰ 1๏ธโƒฃ โš™๏ธ ๐Ÿ”— ๐Ÿ”›. - -๐Ÿ“ฅ ๐Ÿ‘ฅ โš™๏ธ ๐ŸŽ Oauth2๏ธโƒฃ โš– ๐Ÿ‘ฅ โœ โญ, ๐Ÿ“ฃ โšซ๏ธ ๐Ÿ”—: `oauth2_scheme`. - -โ†ฉ๏ธ ๐Ÿ‘‰ ๐Ÿ”— ๐Ÿ”ข ๐Ÿšซ โœ”๏ธ ๐Ÿ™† โ†” ๐Ÿ“„ โšซ๏ธ, ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ `Depends` โฎ๏ธ `oauth2_scheme`, ๐Ÿ‘ฅ ๐Ÿšซ โœ”๏ธ โš™๏ธ `Security` ๐Ÿ•โ” ๐Ÿ‘ฅ ๐Ÿšซ ๐Ÿ’ช โœ” ๐Ÿ’‚โ€โ™‚ โ†”. - -๐Ÿ‘ฅ ๐Ÿ“ฃ ๐ŸŽ ๐Ÿ”ข ๐Ÿ†Ž `SecurityScopes`, ๐Ÿ—„ โšช๏ธโžก๏ธ `fastapi.security`. - -๐Ÿ‘‰ `SecurityScopes` ๐ŸŽ“ ๐ŸŽ `Request` (`Request` โš™๏ธ ๐Ÿคš ๐Ÿ“จ ๐ŸŽš ๐Ÿ”—). - -{* ../../docs_src/security/tutorial005.py hl[8,105] *} - -## โš™๏ธ `scopes` - -๐Ÿ”ข `security_scopes` ๐Ÿ”œ ๐Ÿ†Ž `SecurityScopes`. - -โšซ๏ธ ๐Ÿ”œ โœ”๏ธ ๐Ÿ  `scopes` โฎ๏ธ ๐Ÿ“‡ โš— ๐ŸŒ โ†” โœ” โšซ๏ธ & ๐ŸŒ ๐Ÿ”— ๐Ÿ‘ˆ โš™๏ธ ๐Ÿ‘‰ ๐ŸŽง-๐Ÿ”—. ๐Ÿ‘ˆ โ›“, ๐ŸŒ "โš“๏ธ"... ๐Ÿ‘‰ ๐Ÿ’ช ๐Ÿ”Š ๐Ÿ˜จ, โšซ๏ธ ๐Ÿ”ฌ ๐Ÿ”„ โช ๐Ÿ”›. - -`security_scopes` ๐ŸŽš (๐ŸŽ“ `SecurityScopes`) ๐Ÿšš `scope_str` ๐Ÿ”ข โฎ๏ธ ๐Ÿ‘ ๐ŸŽป, ๐Ÿ”Œ ๐Ÿ‘ˆ โ†” ๐Ÿ‘ฝ ๐Ÿš€ (๐Ÿ‘ฅ ๐Ÿ”œ โš™๏ธ โšซ๏ธ). - -๐Ÿ‘ฅ โœ `HTTPException` ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿค-โš™๏ธ (`raise`) โช ๐Ÿ“š โ˜. - -๐Ÿ‘‰ โš , ๐Ÿ‘ฅ ๐Ÿ”Œ โ†” ๐Ÿšš (๐Ÿšฅ ๐Ÿ™†) ๐ŸŽป ๐Ÿ‘ฝ ๐Ÿš€ (โš™๏ธ `scope_str`). ๐Ÿ‘ฅ ๐Ÿšฎ ๐Ÿ‘ˆ ๐ŸŽป โš— โ†” `WWW-Authenticate` ๐ŸŽš (๐Ÿ‘‰ ๐Ÿ• ๐Ÿ”Œ). - -{* ../../docs_src/security/tutorial005.py hl[105,107:115] *} - -## โœ” `username` & ๐Ÿ’ฝ ๐Ÿ’  - -๐Ÿ‘ฅ โœ” ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿคš `username`, & โš— โ†”. - -& โคด๏ธ ๐Ÿ‘ฅ โœ” ๐Ÿ‘ˆ ๐Ÿ“Š โฎ๏ธ Pydantic ๐Ÿท (โœŠ `ValidationError` โš ), & ๐Ÿšฅ ๐Ÿ‘ฅ ๐Ÿคš โŒ ๐Ÿ‘‚ ๐Ÿฅ™ ๐Ÿค โš–๏ธ โš– ๐Ÿ“Š โฎ๏ธ Pydantic, ๐Ÿ‘ฅ ๐Ÿคš `HTTPException` ๐Ÿ‘ฅ โœ โญ. - -๐Ÿ‘ˆ, ๐Ÿ‘ฅ โ„น Pydantic ๐Ÿท `TokenData` โฎ๏ธ ๐Ÿ†• ๐Ÿ  `scopes`. - -โš– ๐Ÿ“Š โฎ๏ธ Pydantic ๐Ÿ‘ฅ ๐Ÿ’ช โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘ฅ โœ”๏ธ, ๐Ÿ–ผ, โšซ๏ธโ” `list` `str` โฎ๏ธ โ†” & `str` โฎ๏ธ `username`. - -โ†ฉ๏ธ, ๐Ÿ–ผ, `dict`, โš–๏ธ ๐Ÿ•ณ ๐Ÿ™†, โšซ๏ธ ๐Ÿ’ช ๐Ÿ’” ๐Ÿˆธ โ˜ โช, โš’ โšซ๏ธ ๐Ÿ’‚โ€โ™‚ โš . - -๐Ÿ‘ฅ โœ” ๐Ÿ‘ˆ ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป โฎ๏ธ ๐Ÿ‘ˆ ๐Ÿ†”, & ๐Ÿšฅ ๐Ÿšซ, ๐Ÿ‘ฅ ๐Ÿคš ๐Ÿ‘ˆ ๐ŸŽ โš  ๐Ÿ‘ฅ โœ โญ. - -{* ../../docs_src/security/tutorial005.py hl[46,116:128] *} - -## โœ” `scopes` - -๐Ÿ‘ฅ ๐Ÿ”œ โœ” ๐Ÿ‘ˆ ๐ŸŒ โ†” โœ”, ๐Ÿ‘‰ ๐Ÿ”— & ๐ŸŒ โš“๏ธ (๐Ÿ”Œ *โžก ๐Ÿ› ๏ธ*), ๐Ÿ”Œ โ†” ๐Ÿšš ๐Ÿค ๐Ÿ“จ, โช ๐Ÿคš `HTTPException`. - -๐Ÿ‘‰, ๐Ÿ‘ฅ โš™๏ธ `security_scopes.scopes`, ๐Ÿ‘ˆ ๐Ÿ”Œ `list` โฎ๏ธ ๐ŸŒ ๐Ÿ‘ซ โ†” `str`. - -{* ../../docs_src/security/tutorial005.py hl[129:135] *} - -## ๐Ÿ”— ๐ŸŒฒ & โ†” - -โžก๏ธ ๐Ÿ“„ ๐Ÿ”„ ๐Ÿ‘‰ ๐Ÿ”— ๐ŸŒฒ & โ†”. - -`get_current_active_user` ๐Ÿ”— โœ”๏ธ ๐ŸŽง-๐Ÿ”— ๐Ÿ”› `get_current_user`, โ†” `"me"` ๐Ÿ“ฃ `get_current_active_user` ๐Ÿ”œ ๐Ÿ”Œ ๐Ÿ“‡ โœ” โ†” `security_scopes.scopes` ๐Ÿšถโ€โ™€๏ธ `get_current_user`. - -*โžก ๐Ÿ› ๏ธ* โšซ๏ธ ๐Ÿ“ฃ โ†”, `"items"`, ๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ“‡ `security_scopes.scopes` ๐Ÿšถโ€โ™€๏ธ `get_current_user`. - -๐Ÿ“ฅ โ” ๐Ÿ”— ๐Ÿ”— & โ†” ๐Ÿ‘€ ๐Ÿ’–: - -* *โžก ๐Ÿ› ๏ธ* `read_own_items` โœ”๏ธ: - * โœ” โ†” `["items"]` โฎ๏ธ ๐Ÿ”—: - * `get_current_active_user`: - * ๐Ÿ”— ๐Ÿ”ข `get_current_active_user` โœ”๏ธ: - * โœ” โ†” `["me"]` โฎ๏ธ ๐Ÿ”—: - * `get_current_user`: - * ๐Ÿ”— ๐Ÿ”ข `get_current_user` โœ”๏ธ: - * ๐Ÿ™…โ€โ™‚ โ†” โœ” โšซ๏ธ. - * ๐Ÿ”— โš™๏ธ `oauth2_scheme`. - * `security_scopes` ๐Ÿ”ข ๐Ÿ†Ž `SecurityScopes`: - * ๐Ÿ‘‰ `security_scopes` ๐Ÿ”ข โœ”๏ธ ๐Ÿ  `scopes` โฎ๏ธ `list` โš— ๐ŸŒ ๐Ÿ‘ซ โ†” ๐Ÿ“ฃ ๐Ÿ”›,: - * `security_scopes.scopes` ๐Ÿ”œ ๐Ÿ”Œ `["me", "items"]` *โžก ๐Ÿ› ๏ธ* `read_own_items`. - * `security_scopes.scopes` ๐Ÿ”œ ๐Ÿ”Œ `["me"]` *โžก ๐Ÿ› ๏ธ* `read_users_me`, โ†ฉ๏ธ โšซ๏ธ ๐Ÿ“ฃ ๐Ÿ”— `get_current_active_user`. - * `security_scopes.scopes` ๐Ÿ”œ ๐Ÿ”Œ `[]` (๐Ÿ•ณ) *โžก ๐Ÿ› ๏ธ* `read_system_status`, โ†ฉ๏ธ โšซ๏ธ ๐Ÿšซ ๐Ÿ“ฃ ๐Ÿ™† `Security` โฎ๏ธ `scopes`, & ๐Ÿšฎ ๐Ÿ”—, `get_current_user`, ๐Ÿšซ ๐Ÿ“ฃ ๐Ÿ™† `scope` ๐Ÿ‘ฏโ€โ™‚๏ธ. - -/// tip - -โš  & "๐ŸŽฑ" ๐Ÿ‘œ ๐Ÿ“ฅ ๐Ÿ‘ˆ `get_current_user` ๐Ÿ”œ โœ”๏ธ ๐ŸŽ ๐Ÿ“‡ `scopes` โœ… ๐Ÿ”  *โžก ๐Ÿ› ๏ธ*. - -๐ŸŒ โš“๏ธ ๐Ÿ”› `scopes` ๐Ÿ“ฃ ๐Ÿ”  *โžก ๐Ÿ› ๏ธ* & ๐Ÿ”  ๐Ÿ”— ๐Ÿ”— ๐ŸŒฒ ๐Ÿ‘ˆ ๐ŸŽฏ *โžก ๐Ÿ› ๏ธ*. - -/// - -## ๐ŸŒ– โ„น ๐Ÿ”ƒ `SecurityScopes` - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `SecurityScopes` ๐Ÿ™† โ˜, & ๐Ÿ’— ๐Ÿฅ‰, โšซ๏ธ ๐Ÿšซ โœ”๏ธ "๐ŸŒฑ" ๐Ÿ”—. - -โšซ๏ธ ๐Ÿ”œ ๐Ÿ•ง โœ”๏ธ ๐Ÿ’‚โ€โ™‚ โ†” ๐Ÿ“ฃ โฎ๏ธ `Security` ๐Ÿ”— & ๐ŸŒ โš“๏ธ **๐Ÿ‘ˆ ๐ŸŽฏ** *โžก ๐Ÿ› ๏ธ* & **๐Ÿ‘ˆ ๐ŸŽฏ** ๐Ÿ”— ๐ŸŒฒ. - -โ†ฉ๏ธ `SecurityScopes` ๐Ÿ”œ โœ”๏ธ ๐ŸŒ โ†” ๐Ÿ“ฃ โš“๏ธ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โšซ๏ธ โœ” ๐Ÿ‘ˆ ๐Ÿค โœ”๏ธ ๐Ÿšš โ†” ๐Ÿ‡จ๐Ÿ‡ซ ๐Ÿ”— ๐Ÿ”ข, & โคด๏ธ ๐Ÿ“ฃ ๐ŸŽ โ†” ๐Ÿ“„ ๐ŸŽ *โžก ๐Ÿ› ๏ธ*. - -๐Ÿ‘ซ ๐Ÿ”œ โœ… โžก ๐Ÿ”  *โžก ๐Ÿ› ๏ธ*. - -## โœ… โšซ๏ธ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“‚ ๐Ÿ› ๏ธ ๐Ÿฉบ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”“ & โœ” โ” โ†” ๐Ÿ‘† ๐Ÿ’š โœ”. - - - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ–Š ๐Ÿ™† โ†”, ๐Ÿ‘† ๐Ÿ”œ "๐Ÿ”“", โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ”„ ๐Ÿ” `/users/me/` โš–๏ธ `/users/me/items/` ๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš โŒ ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿฅƒ โœ”. ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ” `/status/`. - -& ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ–Š โ†” `me` โœ‹๏ธ ๐Ÿšซ โ†” `items`, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ” `/users/me/` โœ‹๏ธ ๐Ÿšซ `/users/me/items/`. - -๐Ÿ‘ˆ โšซ๏ธโ” ๐Ÿ”œ ๐Ÿ”จ ๐Ÿฅ‰ ๐Ÿฅณ ๐Ÿˆธ ๐Ÿ‘ˆ ๐Ÿ”„ ๐Ÿ” 1๏ธโƒฃ ๐Ÿ‘ซ *โžก ๐Ÿ› ๏ธ* โฎ๏ธ ๐Ÿค ๐Ÿšš ๐Ÿ‘ฉโ€๐Ÿ’ป, โš“๏ธ ๐Ÿ”› โ” ๐Ÿ“š โœ” ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿค ๐Ÿˆธ. - -## ๐Ÿ”ƒ ๐Ÿฅ‰ ๐Ÿฅณ ๐Ÿ› ๏ธ - -๐Ÿ‘‰ ๐Ÿ–ผ ๐Ÿ‘ฅ โš™๏ธ Oauth2๏ธโƒฃ "๐Ÿ”" ๐Ÿ’ง. - -๐Ÿ‘‰ โ˜‘ ๐Ÿ•โ” ๐Ÿ‘ฅ ๐Ÿšจ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿˆธ, ๐ŸŽฒ โฎ๏ธ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ•ธ. - -โ†ฉ๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ’™ โšซ๏ธ ๐Ÿ“จ `username` & `password`, ๐Ÿ‘ฅ ๐ŸŽ› โšซ๏ธ. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ— Oauth2๏ธโƒฃ ๐Ÿˆธ ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿ”œ ๐Ÿ”— (โžก, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ— ๐Ÿค ๐Ÿ•โ€๐Ÿฆบ ๐ŸŒ“ ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, ๐Ÿ“‚, โ™’๏ธ.) ๐Ÿ‘† ๐Ÿ”œ โš™๏ธ 1๏ธโƒฃ ๐ŸŽ ๐Ÿ’ง. - -๐ŸŒ… โš  ๐Ÿ”‘ ๐Ÿ’ง. - -๐Ÿ† ๐Ÿ” ๐Ÿ“Ÿ ๐Ÿ’ง, โœ‹๏ธ ๐ŸŒ– ๐Ÿ— ๐Ÿ› ๏ธ โšซ๏ธ ๐Ÿšš ๐ŸŒ… ๐Ÿ“ถ. โšซ๏ธ ๐ŸŒ… ๐Ÿ—, ๐Ÿ“š ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”š ๐Ÿ†™ โœ” ๐Ÿ”‘ ๐Ÿ’ง. - -/// note - -โšซ๏ธ โš  ๐Ÿ‘ˆ ๐Ÿ”  ๐Ÿค ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ“› ๐Ÿ‘ซ ๐Ÿ’ง ๐ŸŽ ๐ŸŒŒ, โš’ โšซ๏ธ ๐Ÿ• ๐Ÿ‘ซ ๐Ÿท. - -โœ‹๏ธ ๐Ÿ”š, ๐Ÿ‘ซ ๐Ÿ› ๏ธ ๐ŸŽ Oauth2๏ธโƒฃ ๐Ÿฉ. - -/// - -**FastAPI** ๐Ÿ”Œ ๐Ÿš™ ๐ŸŒ ๐Ÿ‘ซ Oauth2๏ธโƒฃ ๐Ÿค ๐Ÿ’ง `fastapi.security.oauth2`. - -## `Security` ๐Ÿ‘จโ€๐ŸŽจ `dependencies` - -๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ `list` `Depends` ๐Ÿ‘จโ€๐ŸŽจ `dependencies` ๐Ÿ”ข (๐Ÿ”ฌ [๐Ÿ”— โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}), ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Security` โฎ๏ธ `scopes` ๐Ÿ“ค. diff --git a/docs/em/docs/advanced/settings.md b/docs/em/docs/advanced/settings.md deleted file mode 100644 index 7fdd0d68a..000000000 --- a/docs/em/docs/advanced/settings.md +++ /dev/null @@ -1,396 +0,0 @@ -# โš’ & ๐ŸŒ ๐Ÿ”ข - -๐Ÿ“š ๐Ÿ’ผ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ’ช ๐Ÿ’ช ๐Ÿ”ข โš’ โš–๏ธ ๐Ÿ“ณ, ๐Ÿ–ผ ใŠ™ ๐Ÿ”‘, ๐Ÿ’ฝ ๐ŸŽ“, ๐ŸŽ“ ๐Ÿ“ง ๐Ÿ•โ€๐Ÿฆบ, โ™’๏ธ. - -๐Ÿ† ๐Ÿ‘ซ โš’ ๐Ÿ”ข (๐Ÿ’ช ๐Ÿ”€), ๐Ÿ’– ๐Ÿ’ฝ ๐Ÿ“›. & ๐Ÿ“š ๐Ÿ’ช ๐Ÿšฟ, ๐Ÿ’– ใŠ™. - -๐Ÿ‘‰ ๐Ÿค” โšซ๏ธ โš  ๐Ÿšš ๐Ÿ‘ซ ๐ŸŒ ๐Ÿ”ข ๐Ÿ‘ˆ โœ ๐Ÿˆธ. - -## ๐ŸŒ ๐Ÿ”ข - -/// tip - -๐Ÿšฅ ๐Ÿ‘† โช ๐Ÿ’ญ โšซ๏ธโ” "๐ŸŒ ๐Ÿ”ข" & โ” โš™๏ธ ๐Ÿ‘ซ, ๐Ÿ’ญ ๐Ÿ†“ ๐Ÿšถ โญ ๐Ÿ“„ ๐Ÿ”›. - -/// - -๐ŸŒ ๐Ÿ”ข (๐Ÿ’ญ "๐Ÿ‡จ๐Ÿ‡ป {") ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ–– ๐Ÿž ๐Ÿ ๐Ÿ“Ÿ, ๐Ÿƒโ€โ™‚ โš™๏ธ, & ๐Ÿ’ช โœ ๐Ÿ‘† ๐Ÿ ๐Ÿ“Ÿ (โš–๏ธ ๐ŸŽ ๐Ÿ“‹ ๐Ÿ‘). - -๐Ÿ‘† ๐Ÿ’ช โœ & โš™๏ธ ๐ŸŒ ๐Ÿ”ข ๐Ÿš, ๐Ÿต ๐Ÿ’†โ€โ™‚ ๐Ÿ: - -//// tab | ๐Ÿ’พ, ๐Ÿ‡ธ๐Ÿ‡ป, ๐Ÿšช ๐ŸŽ‰ - -
- -```console -// You could create an env var MY_NAME with -$ export MY_NAME="Wade Wilson" - -// Then you could use it with other programs, like -$ echo "Hello $MY_NAME" - -Hello Wade Wilson -``` - -
- -//// - -//// tab | ๐Ÿšช ๐Ÿ“‹ - -
- -```console -// Create an env var MY_NAME -$ $Env:MY_NAME = "Wade Wilson" - -// Use it with other programs, like -$ echo "Hello $Env:MY_NAME" - -Hello Wade Wilson -``` - -
- -//// - -### โœ ๐Ÿ‡จ๐Ÿ‡ป {๐Ÿ - -๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ ๐Ÿ”ข ๐Ÿž ๐Ÿ, ๐Ÿ“ถ (โš–๏ธ โฎ๏ธ ๐Ÿ™† ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ”ฌ), & โคด๏ธ โœ ๐Ÿ‘ซ ๐Ÿ. - -๐Ÿ–ผ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ“ `main.py` โฎ๏ธ: - -```Python hl_lines="3" -import os - -name = os.getenv("MY_NAME", "World") -print(f"Hello {name} from Python") -``` - -/// tip - -๐Ÿฅˆ โŒ `os.getenv()` ๐Ÿ”ข ๐Ÿ’ฒ ๐Ÿ“จ. - -๐Ÿšฅ ๐Ÿšซ ๐Ÿšš, โšซ๏ธ `None` ๐Ÿ”ข, ๐Ÿ“ฅ ๐Ÿ‘ฅ ๐Ÿšš `"World"` ๐Ÿ”ข ๐Ÿ’ฒ โš™๏ธ. - -/// - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค™ ๐Ÿ‘ˆ ๐Ÿ ๐Ÿ“‹: - -
- -```console -// Here we don't set the env var yet -$ python main.py - -// As we didn't set the env var, we get the default value - -Hello World from Python - -// But if we create an environment variable first -$ export MY_NAME="Wade Wilson" - -// And then call the program again -$ python main.py - -// Now it can read the environment variable - -Hello Wade Wilson from Python -``` - -
- -๐ŸŒ ๐Ÿ”ข ๐Ÿ’ช โš’ ๐Ÿž ๐Ÿ“Ÿ, โœ‹๏ธ ๐Ÿ’ช โœ ๐Ÿ“Ÿ, & ๐Ÿšซ โœ”๏ธ ๐Ÿช (๐Ÿ’• `git`) โฎ๏ธ ๐ŸŽ‚ ๐Ÿ“, โšซ๏ธ โš  โš™๏ธ ๐Ÿ‘ซ ๐Ÿ“ณ โš–๏ธ โš’. - -๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ ๐Ÿ”ข ๐Ÿ•ด ๐ŸŽฏ ๐Ÿ“‹ ๐Ÿ‘ผ, ๐Ÿ‘ˆ ๐Ÿ•ด ๐Ÿ’ช ๐Ÿ‘ˆ ๐Ÿ“‹, & ๐Ÿ•ด ๐Ÿšฎ ๐Ÿ“. - -๐Ÿ‘ˆ, โœ โšซ๏ธ โ–ถ๏ธ๏ธ โญ ๐Ÿ“‹ โšซ๏ธ, ๐Ÿ”› ๐ŸŽ โธ: - -
- -```console -// Create an env var MY_NAME in line for this program call -$ MY_NAME="Wade Wilson" python main.py - -// Now it can read the environment variable - -Hello Wade Wilson from Python - -// The env var no longer exists afterwards -$ python main.py - -Hello World from Python -``` - -
- -/// tip - -๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ… ๐Ÿ”ƒ โšซ๏ธ 1๏ธโƒฃ2๏ธโƒฃ-โš– ๐Ÿ“ฑ: ๐Ÿ“. - -/// - -### ๐Ÿ†Ž & ๐Ÿ”ฌ - -๐Ÿ‘ซ ๐ŸŒ ๐Ÿ”ข ๐Ÿ’ช ๐Ÿ•ด ๐Ÿต โœ ๐ŸŽป, ๐Ÿ‘ซ ๐Ÿ”ข ๐Ÿ & โœ”๏ธ ๐Ÿ”— โฎ๏ธ ๐ŸŽ ๐Ÿ“‹ & ๐ŸŽ‚ โš™๏ธ (& โฎ๏ธ ๐ŸŽ ๐Ÿƒโ€โ™‚ โš™๏ธ, ๐Ÿ’พ, ๐Ÿšช, ๐Ÿ‡ธ๐Ÿ‡ป). - -๐Ÿ‘ˆ โ›“ ๐Ÿ‘ˆ ๐Ÿ™† ๐Ÿ’ฒ โœ ๐Ÿ โšช๏ธโžก๏ธ ๐ŸŒ ๐Ÿ”ข ๐Ÿ”œ `str`, & ๐Ÿ™† ๐Ÿ› ๏ธ ๐ŸŽ ๐Ÿ†Ž โš–๏ธ ๐Ÿ”ฌ โœ”๏ธ ๐Ÿ”จ ๐Ÿ“Ÿ. - -## Pydantic `Settings` - -๐Ÿ‘, Pydantic ๐Ÿšš ๐Ÿ‘‘ ๐Ÿš™ ๐Ÿต ๐Ÿ‘ซ โš’ ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ ๐ŸŒ ๐Ÿ”ข โฎ๏ธ Pydantic: โš’ ๐Ÿงพ. - -### โœ `Settings` ๐ŸŽš - -๐Ÿ—„ `BaseSettings` โšช๏ธโžก๏ธ Pydantic & โœ ๐ŸŽง-๐ŸŽ“, ๐Ÿ“ถ ๐ŸŒ… ๐Ÿ’– โฎ๏ธ Pydantic ๐Ÿท. - -๐ŸŽ ๐ŸŒŒ โฎ๏ธ Pydantic ๐Ÿท, ๐Ÿ‘† ๐Ÿ“ฃ ๐ŸŽ“ ๐Ÿ”ข โฎ๏ธ ๐Ÿ†Ž โœ, & ๐ŸŽฒ ๐Ÿ”ข ๐Ÿ’ฒ. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŒ ๐ŸŽ ๐Ÿ”ฌ โš’ & ๐Ÿงฐ ๐Ÿ‘† โš™๏ธ Pydantic ๐Ÿท, ๐Ÿ’– ๐ŸŽ ๐Ÿ“Š ๐Ÿ†Ž & ๐ŸŒ– ๐Ÿ”ฌ โฎ๏ธ `Field()`. - -{* ../../docs_src/settings/tutorial001.py hl[2,5:8,11] *} - -/// tip - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ•ณ โฉ ๐Ÿ“ & ๐Ÿ“‹, ๐Ÿšซ โš™๏ธ ๐Ÿ‘‰ ๐Ÿ–ผ, โš™๏ธ ๐Ÿ 1๏ธโƒฃ ๐Ÿ”›. - -/// - -โคด๏ธ, ๐Ÿ•โ” ๐Ÿ‘† โœ ๐Ÿ‘ ๐Ÿ‘ˆ `Settings` ๐ŸŽ“ (๐Ÿ‘‰ ๐Ÿ’ผ, `settings` ๐ŸŽš), Pydantic ๐Ÿ”œ โœ ๐ŸŒ ๐Ÿ”ข ๐Ÿ’ผ-๐Ÿ˜› ๐ŸŒŒ,, โ†–-๐Ÿ’ผ ๐Ÿ”ข `APP_NAME` ๐Ÿ”œ โœ ๐Ÿ”ข `app_name`. - -โญ โšซ๏ธ ๐Ÿ”œ ๐Ÿ—œ & โœ” ๐Ÿ’ฝ. , ๐Ÿ•โ” ๐Ÿ‘† โš™๏ธ ๐Ÿ‘ˆ `settings` ๐ŸŽš, ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐Ÿ“Š ๐Ÿ†Ž ๐Ÿ‘† ๐Ÿ“ฃ (โœ… `items_per_user` ๐Ÿ”œ `int`). - -### โš™๏ธ `settings` - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ†• `settings` ๐ŸŽš ๐Ÿ‘† ๐Ÿˆธ: - -{* ../../docs_src/settings/tutorial001.py hl[18:20] *} - -### ๐Ÿƒ ๐Ÿ’ฝ - -โญ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿƒ ๐Ÿ’ฝ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ“ณ ๐ŸŒ ๐Ÿ”ข, ๐Ÿ–ผ ๐Ÿ‘† ๐Ÿ’ช โš’ `ADMIN_EMAIL` & `APP_NAME` โฎ๏ธ: - -
- -```console -$ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" uvicorn main:app - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -/// tip - -โš’ ๐Ÿ’— ๐Ÿ‡จ๐Ÿ‡ป {๐Ÿ‘ ๐Ÿ“‹ ๐ŸŽ ๐Ÿ‘ซ โฎ๏ธ ๐Ÿš€, & ๐Ÿšฎ ๐Ÿ‘ซ ๐ŸŒ โญ ๐Ÿ“‹. - -/// - -& โคด๏ธ `admin_email` โš’ ๐Ÿ”œ โš’ `"deadpool@example.com"`. - -`app_name` ๐Ÿ”œ `"ChimichangApp"`. - -& `items_per_user` ๐Ÿ”œ ๐Ÿšง ๐Ÿšฎ ๐Ÿ”ข ๐Ÿ’ฒ `50`. - -## โš’ โž•1๏ธโƒฃ ๐Ÿ•น - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ‘ˆ โš’ โž•1๏ธโƒฃ ๐Ÿ•น ๐Ÿ“ ๐Ÿ‘† ๐Ÿ‘€ [๐Ÿฆ ๐Ÿˆธ - ๐Ÿ’— ๐Ÿ“](../tutorial/bigger-applications.md){.internal-link target=_blank}. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ“ `config.py` โฎ๏ธ: - -{* ../../docs_src/settings/app01/config.py *} - -& โคด๏ธ โš™๏ธ โšซ๏ธ ๐Ÿ“ `main.py`: - -{* ../../docs_src/settings/app01/main.py hl[3,11:13] *} - -/// tip - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ“ `__init__.py` ๐Ÿ‘† ๐Ÿ‘€ ๐Ÿ”› [๐Ÿฆ ๐Ÿˆธ - ๐Ÿ’— ๐Ÿ“](../tutorial/bigger-applications.md){.internal-link target=_blank}. - -/// - -## โš’ ๐Ÿ”— - -๐Ÿพ โšซ๏ธ 5๏ธโƒฃ๐Ÿ“† โš  ๐Ÿšš โš’ โšช๏ธโžก๏ธ ๐Ÿ”—, โ†ฉ๏ธ โœ”๏ธ ๐ŸŒ ๐ŸŽš โฎ๏ธ `settings` ๐Ÿ‘ˆ โš™๏ธ ๐ŸŒ. - -๐Ÿ‘‰ ๐Ÿ’ช โœด๏ธ โš  โฎ๏ธ ๐Ÿ”ฌ, โšซ๏ธ ๐Ÿ“ถ โฉ ๐Ÿ” ๐Ÿ”— โฎ๏ธ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ›ƒ โš’. - -### ๐Ÿ“ ๐Ÿ“ - -๐Ÿ‘Ÿ โšช๏ธโžก๏ธ โฎ๏ธ ๐Ÿ–ผ, ๐Ÿ‘† `config.py` ๐Ÿ“ ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’–: - -{* ../../docs_src/settings/app02/config.py hl[10] *} - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ‘ฅ ๐Ÿšซ โœ ๐Ÿ”ข ๐Ÿ‘ `settings = Settings()`. - -### ๐Ÿ‘‘ ๐Ÿ“ฑ ๐Ÿ“ - -๐Ÿ”œ ๐Ÿ‘ฅ โœ ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ†• `config.Settings()`. - -{* ../../docs_src/settings/app02/main.py hl[5,11:12] *} - -/// tip - -๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ”ฌ `@lru_cache` ๐Ÿ–. - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค” `get_settings()` ๐Ÿ˜ ๐Ÿ”ข. - -/// - -& โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšš โšซ๏ธ โšช๏ธโžก๏ธ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”— & โš™๏ธ โšซ๏ธ ๐Ÿ™† ๐Ÿ‘ฅ ๐Ÿ’ช โšซ๏ธ. - -{* ../../docs_src/settings/app02/main.py hl[16,18:20] *} - -### โš’ & ๐Ÿ”ฌ - -โคด๏ธ โšซ๏ธ ๐Ÿ”œ ๐Ÿ“ถ โฉ ๐Ÿšš ๐ŸŽ โš’ ๐ŸŽš โฎ๏ธ ๐Ÿ”ฌ ๐Ÿ— ๐Ÿ”— ๐Ÿ” `get_settings`: - -{* ../../docs_src/settings/app02/test_main.py hl[9:10,13,21] *} - -๐Ÿ”— ๐Ÿ” ๐Ÿ‘ฅ โš’ ๐Ÿ†• ๐Ÿ’ฒ `admin_email` ๐Ÿ•โ” ๐Ÿ— ๐Ÿ†• `Settings` ๐ŸŽš, & โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ†• ๐ŸŽš. - -โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ’ฏ ๐Ÿ‘ˆ โšซ๏ธ โš™๏ธ. - -## ๐Ÿ‘‚ `.env` ๐Ÿ“ - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ“š โš’ ๐Ÿ‘ˆ ๐ŸŽฒ ๐Ÿ”€ ๐Ÿ“š, ๐ŸŽฒ ๐ŸŽ ๐ŸŒ, โšซ๏ธ 5๏ธโƒฃ๐Ÿ“† โš  ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ”› ๐Ÿ“ & โคด๏ธ โœ ๐Ÿ‘ซ โšช๏ธโžก๏ธ โšซ๏ธ ๐Ÿšฅ ๐Ÿ‘ซ ๐ŸŒ ๐Ÿ”ข. - -๐Ÿ‘‰ ๐Ÿ’ก โš  ๐Ÿฅƒ ๐Ÿ‘ˆ โšซ๏ธ โœ”๏ธ ๐Ÿ“›, ๐Ÿ‘ซ ๐ŸŒ ๐Ÿ”ข ๐Ÿ›Ž ๐Ÿฅ‰ ๐Ÿ“ `.env`, & ๐Ÿ“ ๐Ÿค™ "๐Ÿ‡จ๐Ÿ‡ป". - -/// tip - -๐Ÿ“ โ–ถ๏ธ โฎ๏ธ โฃ (`.`) ๐Ÿ•ตโ€โ™‚ ๐Ÿ“ ๐Ÿ–ฅ-๐Ÿ’– โš™๏ธ, ๐Ÿ’– ๐Ÿ’พ & ๐Ÿ‡ธ๐Ÿ‡ป. - -โœ‹๏ธ ๐Ÿ‡จ๐Ÿ‡ป ๐Ÿ“ ๐Ÿšซ ๐Ÿค™ โœ”๏ธ โœ”๏ธ ๐Ÿ‘ˆ โ˜‘ ๐Ÿ“. - -/// - -Pydantic โœ”๏ธ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘‚ โšช๏ธโžก๏ธ ๐Ÿ‘‰ ๐Ÿ†Ž ๐Ÿ“ โš™๏ธ ๐Ÿ”ข ๐Ÿ—ƒ. ๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ– Pydantic โš’: ๐Ÿ‡จ๐Ÿ‡ป (.๐Ÿ‡จ๐Ÿ‡ป) ๐Ÿ•โ€๐Ÿฆบ. - -/// tip - -๐Ÿ‘‰ ๐Ÿ‘ท, ๐Ÿ‘† ๐Ÿ’ช `pip install python-dotenv`. - -/// - -### `.env` ๐Ÿ“ - -๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ `.env` ๐Ÿ“ โฎ๏ธ: - -```bash -ADMIN_EMAIL="deadpool@example.com" -APP_NAME="ChimichangApp" -``` - -### โœ โš’ โšช๏ธโžก๏ธ `.env` - -& โคด๏ธ โ„น ๐Ÿ‘† `config.py` โฎ๏ธ: - -{* ../../docs_src/settings/app03/config.py hl[9:10] *} - -๐Ÿ“ฅ ๐Ÿ‘ฅ โœ ๐ŸŽ“ `Config` ๐Ÿ”˜ ๐Ÿ‘† Pydantic `Settings` ๐ŸŽ“, & โš’ `env_file` ๐Ÿ“ โฎ๏ธ ๐Ÿ‡จ๐Ÿ‡ป ๐Ÿ“ ๐Ÿ‘ฅ ๐Ÿ’š โš™๏ธ. - -/// tip - -`Config` ๐ŸŽ“ โš™๏ธ Pydantic ๐Ÿ“ณ. ๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ– Pydantic ๐Ÿท ๐Ÿ“ - -/// - -### ๐Ÿ— `Settings` ๐Ÿ•ด ๐Ÿ• โฎ๏ธ `lru_cache` - -๐Ÿ‘‚ ๐Ÿ“ โšช๏ธโžก๏ธ ๐Ÿ’พ ๐Ÿ›Ž โš  (๐ŸŒ) ๐Ÿ› ๏ธ, ๐Ÿ‘† ๐ŸŽฒ ๐Ÿ’š โšซ๏ธ ๐Ÿ•ด ๐Ÿ• & โคด๏ธ ๐Ÿค-โš™๏ธ ๐ŸŽ โš’ ๐ŸŽš, โ†ฉ๏ธ ๐Ÿ‘‚ โšซ๏ธ ๐Ÿ”  ๐Ÿ“จ. - -โœ‹๏ธ ๐Ÿ”  ๐Ÿ•ฐ ๐Ÿ‘ฅ: - -```Python -Settings() -``` - -๐Ÿ†• `Settings` ๐ŸŽš ๐Ÿ”œ โœ, & ๐Ÿ— โšซ๏ธ ๐Ÿ”œ โœ `.env` ๐Ÿ“ ๐Ÿ”„. - -๐Ÿšฅ ๐Ÿ”— ๐Ÿ”ข ๐Ÿ’–: - -```Python -def get_settings(): - return Settings() -``` - -๐Ÿ‘ฅ ๐Ÿ”œ โœ ๐Ÿ‘ˆ ๐ŸŽš ๐Ÿ”  ๐Ÿ“จ, & ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘‚ `.env` ๐Ÿ“ ๐Ÿ”  ๐Ÿ“จ. ๐Ÿ‘ถ ๐Ÿ‘ถ - -โœ‹๏ธ ๐Ÿ‘ฅ โš™๏ธ `@lru_cache` ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ”› ๐Ÿ”, `Settings` ๐ŸŽš ๐Ÿ”œ โœ ๐Ÿ•ด ๐Ÿ•, ๐Ÿฅ‡ ๐Ÿ•ฐ โšซ๏ธ ๐Ÿค™. ๐Ÿ‘ถ ๐Ÿ‘ถ - -{* ../../docs_src/settings/app03/main.py hl[1,10] *} - -โคด๏ธ ๐Ÿ™† ๐Ÿ ๐Ÿค™ `get_settings()` ๐Ÿ”— โญ ๐Ÿ“จ, โ†ฉ๏ธ ๐Ÿ› ๏ธ ๐Ÿ”— ๐Ÿ“Ÿ `get_settings()` & ๐Ÿ— ๐Ÿ†• `Settings` ๐ŸŽš, โšซ๏ธ ๐Ÿ”œ ๐Ÿ“จ ๐ŸŽ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ”› ๐Ÿฅ‡ ๐Ÿค™, ๐Ÿ”„ & ๐Ÿ”„. - -#### `lru_cache` ๐Ÿ“ก โ„น - -`@lru_cache` ๐Ÿ”€ ๐Ÿ”ข โšซ๏ธ ๐ŸŽ€ ๐Ÿ“จ ๐ŸŽ ๐Ÿ’ฒ ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿฅ‡ ๐Ÿ•ฐ, โ†ฉ๏ธ ๐Ÿ’ป โšซ๏ธ ๐Ÿ”„, ๐Ÿ› ๏ธ ๐Ÿ“Ÿ ๐Ÿ”ข ๐Ÿ”  ๐Ÿ•ฐ. - -, ๐Ÿ”ข ๐Ÿ”› โšซ๏ธ ๐Ÿ”œ ๐Ÿ› ๏ธ ๐Ÿ• ๐Ÿ”  ๐ŸŒ€ โŒ. & โคด๏ธ ๐Ÿ’ฒ ๐Ÿ“จ ๐Ÿ”  ๐Ÿ‘ˆ ๐ŸŒ€ โŒ ๐Ÿ”œ โš™๏ธ ๐Ÿ”„ & ๐Ÿ”„ ๐Ÿ•โ” ๐Ÿ”ข ๐Ÿค™ โฎ๏ธ โšซ๏ธโ” ๐ŸŽ ๐ŸŒ€ โŒ. - -๐Ÿ–ผ, ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ”ข: - -```Python -@lru_cache -def say_hi(name: str, salutation: str = "Ms."): - return f"Hello {salutation} {name}" -``` - -๐Ÿ‘† ๐Ÿ“‹ ๐Ÿ’ช ๐Ÿ› ๏ธ ๐Ÿ’– ๐Ÿ‘‰: - -```mermaid -sequenceDiagram - -participant code as Code -participant function as say_hi() -participant execute as Execute function - - rect rgba(0, 255, 0, .1) - code ->> function: say_hi(name="Camila") - function ->> execute: execute function code - execute ->> code: return the result - end - - rect rgba(0, 255, 255, .1) - code ->> function: say_hi(name="Camila") - function ->> code: return stored result - end - - rect rgba(0, 255, 0, .1) - code ->> function: say_hi(name="Rick") - function ->> execute: execute function code - execute ->> code: return the result - end - - rect rgba(0, 255, 0, .1) - code ->> function: say_hi(name="Rick", salutation="Mr.") - function ->> execute: execute function code - execute ->> code: return the result - end - - rect rgba(0, 255, 255, .1) - code ->> function: say_hi(name="Rick") - function ->> code: return stored result - end - - rect rgba(0, 255, 255, .1) - code ->> function: say_hi(name="Camila") - function ->> code: return stored result - end -``` - -๐Ÿ’ผ ๐Ÿ‘† ๐Ÿ”— `get_settings()`, ๐Ÿ”ข ๐Ÿšซ โœŠ ๐Ÿ™† โŒ, โšซ๏ธ ๐Ÿ•ง ๐Ÿ“จ ๐ŸŽ ๐Ÿ’ฒ. - -๐Ÿ‘ˆ ๐ŸŒŒ, โšซ๏ธ ๐ŸŽญ ๐ŸŒ– ๐Ÿšฅ โšซ๏ธ ๐ŸŒ ๐Ÿ”ข. โœ‹๏ธ โšซ๏ธ โš™๏ธ ๐Ÿ”— ๐Ÿ”ข, โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ” โšซ๏ธ ๐Ÿ’ช ๐Ÿ”ฌ. - -`@lru_cache` ๐Ÿ• `functools` โ” ๐Ÿ• ๐Ÿ ๐Ÿฉ ๐Ÿ—ƒ, ๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ… ๐Ÿ”ƒ โšซ๏ธ ๐Ÿ ๐Ÿฉบ `@lru_cache`. - -## ๐ŸŒƒ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ Pydantic โš’ ๐Ÿต โš’ โš–๏ธ ๐Ÿ“ณ ๐Ÿ‘† ๐Ÿˆธ, โฎ๏ธ ๐ŸŒ ๐Ÿ‹๏ธ Pydantic ๐Ÿท. - -* โš™๏ธ ๐Ÿ”— ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“‰ ๐Ÿ”ฌ. -* ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `.env` ๐Ÿ“ โฎ๏ธ โšซ๏ธ. -* โš™๏ธ `@lru_cache` โžก๏ธ ๐Ÿ‘† โŽ ๐Ÿ‘‚ ๐Ÿ‡จ๐Ÿ‡ป ๐Ÿ“ ๐Ÿ”„ & ๐Ÿ”„ ๐Ÿ”  ๐Ÿ“จ, โช ๐Ÿค ๐Ÿ‘† ๐Ÿ” โšซ๏ธ โฎ๏ธ ๐Ÿ”ฌ. diff --git a/docs/em/docs/advanced/sub-applications.md b/docs/em/docs/advanced/sub-applications.md deleted file mode 100644 index 7a802cd77..000000000 --- a/docs/em/docs/advanced/sub-applications.md +++ /dev/null @@ -1,67 +0,0 @@ -# ๐ŸŽง ๐Ÿˆธ - ๐Ÿ—ป - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ 2๏ธโƒฃ ๐Ÿ”ฌ FastAPI ๐Ÿˆธ, โฎ๏ธ ๐Ÿ‘ซ ๐Ÿ‘ ๐Ÿ”ฌ ๐Ÿ—„ & ๐Ÿ‘ซ ๐Ÿ‘ ๐Ÿฉบ โšœ, ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ‘‘ ๐Ÿ“ฑ & "๐Ÿ—ป" 1๏ธโƒฃ (โš–๏ธ ๐ŸŒ…) ๐ŸŽง-๐Ÿˆธ(โ“‚). - -## ๐Ÿ—œ **FastAPI** ๐Ÿˆธ - -"๐Ÿ—œ" โ›“ โŽ ๐Ÿ• "๐Ÿ”ฌ" ๐Ÿˆธ ๐ŸŽฏ โžก, ๐Ÿ‘ˆ โคด๏ธ โœŠ ๐Ÿ’… ๐Ÿšš ๐ŸŒ ๐Ÿ”ฝ ๐Ÿ‘ˆ โžก, โฎ๏ธ _โžก ๐Ÿ› ๏ธ_ ๐Ÿ“ฃ ๐Ÿ‘ˆ ๐ŸŽง-๐Ÿˆธ. - -### ๐Ÿ”-๐ŸŽš ๐Ÿˆธ - -๐Ÿฅ‡, โœ ๐Ÿ‘‘, ๐Ÿ”-๐ŸŽš, **FastAPI** ๐Ÿˆธ, & ๐Ÿšฎ *โžก ๐Ÿ› ๏ธ*: - -{* ../../docs_src/sub_applications/tutorial001.py hl[3,6:8] *} - -### ๐ŸŽง-๐Ÿˆธ - -โคด๏ธ, โœ ๐Ÿ‘† ๐ŸŽง-๐Ÿˆธ, & ๐Ÿšฎ *โžก ๐Ÿ› ๏ธ*. - -๐Ÿ‘‰ ๐ŸŽง-๐Ÿˆธ โž•1๏ธโƒฃ ๐Ÿฉ FastAPI ๐Ÿˆธ, โœ‹๏ธ ๐Ÿ‘‰ 1๏ธโƒฃ ๐Ÿ‘ˆ ๐Ÿ”œ "๐Ÿ—ป": - -{* ../../docs_src/sub_applications/tutorial001.py hl[11,14:16] *} - -### ๐Ÿ—ป ๐ŸŽง-๐Ÿˆธ - -๐Ÿ‘† ๐Ÿ”-๐ŸŽš ๐Ÿˆธ, `app`, ๐Ÿ—ป ๐ŸŽง-๐Ÿˆธ, `subapi`. - -๐Ÿ‘‰ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ“Œ โžก `/subapi`: - -{* ../../docs_src/sub_applications/tutorial001.py hl[11,19] *} - -### โœ… ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ - -๐Ÿ”œ, ๐Ÿƒ `uvicorn` โฎ๏ธ ๐Ÿ‘‘ ๐Ÿ“ฑ, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ `main.py`, โšซ๏ธ ๐Ÿ”œ: - -
- -```console -$ uvicorn main:app --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -& ๐Ÿ“‚ ๐Ÿฉบ http://127.0.0.1:8000/docs. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ ๐Ÿ‘‘ ๐Ÿ“ฑ, ๐Ÿ”Œ ๐Ÿ•ด ๐Ÿšฎ ๐Ÿ‘ _โžก ๐Ÿ› ๏ธ_: - - - -& โคด๏ธ, ๐Ÿ“‚ ๐Ÿฉบ ๐ŸŽง-๐Ÿˆธ, http://127.0.0.1:8000/subapi/docs. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ ๐ŸŽง-๐Ÿˆธ, โœ… ๐Ÿ•ด ๐Ÿšฎ ๐Ÿ‘ _โžก ๐Ÿ› ๏ธ_, ๐ŸŒ ๐Ÿ”ฝ โ˜‘ ๐ŸŽง-โžก ๐Ÿ”ก `/subapi`: - - - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ”„ ๐Ÿ”— โฎ๏ธ ๐Ÿ™† 2๏ธโƒฃ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข, ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ‘ท โ˜‘, โ†ฉ๏ธ ๐Ÿ–ฅ ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ’ฌ ๐Ÿ”  ๐ŸŽฏ ๐Ÿ“ฑ โš–๏ธ ๐ŸŽง-๐Ÿ“ฑ. - -### ๐Ÿ“ก โ„น: `root_path` - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ—ป ๐ŸŽง-๐Ÿˆธ ๐Ÿ”ฌ ๐Ÿ”›, FastAPI ๐Ÿ”œ โœŠ ๐Ÿ’… ๐Ÿ”— ๐Ÿ—ป โžก ๐ŸŽง-๐Ÿˆธ โš™๏ธ ๐Ÿ› ๏ธ โšช๏ธโžก๏ธ ๐Ÿ”ซ ๐Ÿ”ง ๐Ÿค™ `root_path`. - -๐Ÿ‘ˆ ๐ŸŒŒ, ๐ŸŽง-๐Ÿˆธ ๐Ÿ”œ ๐Ÿ’ญ โš™๏ธ ๐Ÿ‘ˆ โžก ๐Ÿ”ก ๐Ÿฉบ ๐ŸŽš. - -& ๐ŸŽง-๐Ÿˆธ ๐Ÿ’ช โœ”๏ธ ๐Ÿšฎ ๐Ÿ‘ ๐Ÿ“Œ ๐ŸŽง-๐Ÿˆธ & ๐ŸŒ ๐Ÿ”œ ๐Ÿ‘ท โ˜‘, โ†ฉ๏ธ FastAPI ๐Ÿต ๐ŸŒ ๐Ÿ‘‰ `root_path`โ“‚ ๐Ÿ”. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ก ๐ŸŒ… ๐Ÿ”ƒ `root_path` & โ” โš™๏ธ โšซ๏ธ ๐ŸŽฏ ๐Ÿ“„ ๐Ÿ”ƒ [โ›… ๐Ÿ—ณ](behind-a-proxy.md){.internal-link target=_blank}. diff --git a/docs/em/docs/advanced/templates.md b/docs/em/docs/advanced/templates.md deleted file mode 100644 index 2e8f56228..000000000 --- a/docs/em/docs/advanced/templates.md +++ /dev/null @@ -1,84 +0,0 @@ -# ๐Ÿ“„ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ™† ๐Ÿ“„ ๐Ÿš’ ๐Ÿ‘† ๐Ÿ’š โฎ๏ธ **FastAPI**. - -โš  โš’ Jinja2๏ธโƒฃ, ๐ŸŽ 1๏ธโƒฃ โš™๏ธ ๐Ÿบ & ๐ŸŽ ๐Ÿงฐ. - -๐Ÿ“ค ๐Ÿš™ ๐Ÿ”— โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ”— ๐Ÿ‘† **FastAPI** ๐Ÿˆธ (๐Ÿšš ๐Ÿ’ƒ). - -## โŽ ๐Ÿ”— - -โŽ `jinja2`: - -
- -```console -$ pip install jinja2 - ----> 100% -``` - -
- -## โš™๏ธ `Jinja2Templates` - -* ๐Ÿ—„ `Jinja2Templates`. -* โœ `templates` ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค-โš™๏ธ โช. -* ๐Ÿ“ฃ `Request` ๐Ÿ”ข *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“„. -* โš™๏ธ `templates` ๐Ÿ‘† โœ โœ & ๐Ÿ“จ `TemplateResponse`, ๐Ÿšถโ€โ™€๏ธ `request` 1๏ธโƒฃ ๐Ÿ”‘-๐Ÿ’ฒ ๐Ÿ‘ซ Jinja2๏ธโƒฃ "๐Ÿ”‘". - -{* ../../docs_src/templates/tutorial001.py hl[4,11,15:18] *} - -/// note - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿšถโ€โ™€๏ธ `request` ๐Ÿ• ๐Ÿ”‘-๐Ÿ’ฒ ๐Ÿ‘ซ ๐Ÿ”‘ Jinja2๏ธโƒฃ. , ๐Ÿ‘† โœ”๏ธ ๐Ÿ“ฃ โšซ๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. - -/// - -/// tip - -๐Ÿ“ฃ `response_class=HTMLResponse` ๐Ÿฉบ ๐ŸŽš ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ”œ ๐Ÿ•ธ. - -/// - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.templating import Jinja2Templates`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.templating` `fastapi.templating` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. ๐ŸŽ โฎ๏ธ `Request` & `StaticFiles`. - -/// - -## โœ ๐Ÿ“„ - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿ“„ `templates/item.html` โฎ๏ธ: - -```jinja hl_lines="7" -{!../../docs_src/templates/templates/item.html!} -``` - -โšซ๏ธ ๐Ÿ”œ ๐ŸŽฆ `id` โœŠ โšช๏ธโžก๏ธ "๐Ÿ”‘" `dict` ๐Ÿ‘† ๐Ÿšถโ€โ™€๏ธ: - -```Python -{"request": request, "id": id} -``` - -## ๐Ÿ“„ & ๐ŸŽป ๐Ÿ“ - -& ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `url_for()` ๐Ÿ”˜ ๐Ÿ“„, & โš™๏ธ โšซ๏ธ, ๐Ÿ–ผ, โฎ๏ธ `StaticFiles` ๐Ÿ‘† ๐Ÿ“Œ. - -```jinja hl_lines="4" -{!../../docs_src/templates/templates/item.html!} -``` - -๐Ÿ‘‰ ๐Ÿ–ผ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ”— ๐ŸŽš ๐Ÿ“ `static/styles.css` โฎ๏ธ: - -```CSS hl_lines="4" -{!../../docs_src/templates/static/styles.css!} -``` - -& โ†ฉ๏ธ ๐Ÿ‘† โš™๏ธ `StaticFiles`, ๐Ÿ‘ˆ ๐ŸŽš ๐Ÿ“ ๐Ÿ”œ ๐Ÿฆ ๐Ÿ” ๐Ÿ‘† **FastAPI** ๐Ÿˆธ ๐Ÿ“› `/static/styles.css`. - -## ๐ŸŒ… โ„น - -๐ŸŒ… โ„น, ๐Ÿ”Œ โ” ๐Ÿ’ฏ ๐Ÿ“„, โœ… ๐Ÿ’ƒ ๐Ÿฉบ ๐Ÿ”› ๐Ÿ“„. diff --git a/docs/em/docs/advanced/testing-dependencies.md b/docs/em/docs/advanced/testing-dependencies.md deleted file mode 100644 index b2b4b480d..000000000 --- a/docs/em/docs/advanced/testing-dependencies.md +++ /dev/null @@ -1,53 +0,0 @@ -# ๐Ÿ”ฌ ๐Ÿ”— โฎ๏ธ ๐Ÿ” - -## ๐Ÿ”‘ ๐Ÿ”— โฎ๏ธ ๐Ÿ”ฌ - -๐Ÿ“ค ๐Ÿ˜ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿ” ๐Ÿ”— โฎ๏ธ ๐Ÿ”ฌ. - -๐Ÿ‘† ๐Ÿšซ ๐Ÿ’š โฎ๏ธ ๐Ÿ”— ๐Ÿƒ (๐Ÿšซ ๐Ÿ™† ๐ŸŽง-๐Ÿ”— โšซ๏ธ ๐Ÿ’ช โœ”๏ธ). - -โ†ฉ๏ธ, ๐Ÿ‘† ๐Ÿ’š ๐Ÿšš ๐ŸŽ ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ”œ โš™๏ธ ๐Ÿ•ด โฎ๏ธ ๐Ÿ’ฏ (๐ŸŽฒ ๐Ÿ•ด ๐ŸŽฏ ๐Ÿ’ฏ), & ๐Ÿ”œ ๐Ÿšš ๐Ÿ’ฒ ๐Ÿ‘ˆ ๐Ÿ’ช โš™๏ธ ๐ŸŒโ” ๐Ÿ’ฒ โฎ๏ธ ๐Ÿ”— โš™๏ธ. - -### โš™๏ธ ๐Ÿ’ผ: ๐Ÿ”ข ๐Ÿ•โ€๐Ÿฆบ - -๐Ÿ–ผ ๐Ÿ’ช ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿ”ข ๐Ÿค ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค™. - -๐Ÿ‘† ๐Ÿ“จ โšซ๏ธ ๐Ÿค & โšซ๏ธ ๐Ÿ“จ ๐Ÿ”“ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -๐Ÿ‘‰ ๐Ÿ•โ€๐Ÿฆบ 5๏ธโƒฃ๐Ÿ“† ๐Ÿ”Œ ๐Ÿ‘† ๐Ÿ“ ๐Ÿ“จ, & ๐Ÿค™ โšซ๏ธ ๐Ÿ’ช โœŠ โž• ๐Ÿ•ฐ ๐ŸŒ˜ ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ”ง ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ฏ. - -๐Ÿ‘† ๐ŸŽฒ ๐Ÿ’š ๐Ÿ’ฏ ๐Ÿ”ข ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ•, โœ‹๏ธ ๐Ÿšซ ๐ŸŽฏ ๐Ÿค™ โšซ๏ธ ๐Ÿ”  ๐Ÿ’ฏ ๐Ÿ‘ˆ ๐Ÿƒ. - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿค™ ๐Ÿ‘ˆ ๐Ÿ•โ€๐Ÿฆบ, & โš™๏ธ ๐Ÿ›ƒ ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ“จ ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ’ป, ๐Ÿ•ด ๐Ÿ‘† ๐Ÿ’ฏ. - -### โš™๏ธ `app.dependency_overrides` ๐Ÿ”ข - -๐Ÿ‘ซ ๐Ÿ’ผ, ๐Ÿ‘† **FastAPI** ๐Ÿˆธ โœ”๏ธ ๐Ÿ”ข `app.dependency_overrides`, โšซ๏ธ ๐Ÿ™… `dict`. - -๐Ÿ” ๐Ÿ”— ๐Ÿ”ฌ, ๐Ÿ‘† ๐Ÿšฎ ๐Ÿ”‘ โฎ๏ธ ๐Ÿ”— (๐Ÿ”ข), & ๐Ÿ’ฒ, ๐Ÿ‘† ๐Ÿ”— ๐Ÿ” (โž•1๏ธโƒฃ ๐Ÿ”ข). - -& โคด๏ธ **FastAPI** ๐Ÿ”œ ๐Ÿค™ ๐Ÿ‘ˆ ๐Ÿ” โ†ฉ๏ธ โฎ๏ธ ๐Ÿ”—. - -{* ../../docs_src/dependency_testing/tutorial001.py hl[28:29,32] *} - -/// tip - -๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ”— ๐Ÿ” ๐Ÿ”— โš™๏ธ ๐Ÿ™† ๐Ÿ‘† **FastAPI** ๐Ÿˆธ. - -โฎ๏ธ ๐Ÿ”— ๐Ÿ’ช โš™๏ธ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* (๐Ÿ•โ” ๐Ÿ‘† ๐Ÿšซ โš™๏ธ ๐Ÿ“จ ๐Ÿ’ฒ), `.include_router()` ๐Ÿค™, โ™’๏ธ. - -FastAPI ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ” โšซ๏ธ. - -/// - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โฒ ๐Ÿ‘† ๐Ÿ” (โŽ ๐Ÿ‘ซ) โš’ `app.dependency_overrides` ๐Ÿ› `dict`: - -```Python -app.dependency_overrides = {} -``` - -/// tip - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ” ๐Ÿ”— ๐Ÿ•ด โฎ๏ธ ๐Ÿ’ฏ, ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ” โ–ถ๏ธ ๐Ÿ’ฏ (๐Ÿ”˜ ๐Ÿ’ฏ ๐Ÿ”ข) & โฒ โšซ๏ธ ๐Ÿ”š (๐Ÿ”š ๐Ÿ’ฏ ๐Ÿ”ข). - -/// diff --git a/docs/em/docs/advanced/testing-events.md b/docs/em/docs/advanced/testing-events.md deleted file mode 100644 index f62e9e069..000000000 --- a/docs/em/docs/advanced/testing-events.md +++ /dev/null @@ -1,5 +0,0 @@ -# ๐Ÿ”ฌ ๐ŸŽ‰: ๐Ÿ•ด - ๐Ÿคซ - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘† ๐ŸŽ‰ ๐Ÿ•โ€๐Ÿฆบ (`startup` & `shutdown`) ๐Ÿƒ ๐Ÿ‘† ๐Ÿ’ฏ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `TestClient` โฎ๏ธ `with` ๐Ÿ“„: - -{* ../../docs_src/app_testing/tutorial003.py hl[9:12,20:24] *} diff --git a/docs/em/docs/advanced/testing-websockets.md b/docs/em/docs/advanced/testing-websockets.md deleted file mode 100644 index 96aa8b765..000000000 --- a/docs/em/docs/advanced/testing-websockets.md +++ /dev/null @@ -1,13 +0,0 @@ -# ๐Ÿ”ฌ *๏ธโƒฃ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ `TestClient` ๐Ÿ’ฏ*๏ธโƒฃ. - -๐Ÿ‘‰, ๐Ÿ‘† โš™๏ธ `TestClient` `with` ๐Ÿ“„, ๐Ÿ”—*๏ธโƒฃ: - -{* ../../docs_src/app_testing/tutorial002.py hl[27:31] *} - -/// note - -๐ŸŒ… โ„น, โœ… ๐Ÿ’ƒ ๐Ÿงพ ๐Ÿ”ฌ *๏ธโƒฃ . - -/// diff --git a/docs/em/docs/advanced/using-request-directly.md b/docs/em/docs/advanced/using-request-directly.md deleted file mode 100644 index 238557e5e..000000000 --- a/docs/em/docs/advanced/using-request-directly.md +++ /dev/null @@ -1,56 +0,0 @@ -# โš™๏ธ ๐Ÿ“จ ๐Ÿ”— - -๐Ÿ†™ ๐Ÿ”œ, ๐Ÿ‘† โœ”๏ธ ๐Ÿ“ฃ ๐Ÿ• ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โฎ๏ธ ๐Ÿ‘ซ ๐Ÿ†Ž. - -โœŠ ๐Ÿ“Š โšช๏ธโžก๏ธ: - -* โžก ๐Ÿ”ข. -* ๐ŸŽš. -* ๐Ÿช. -* โ™’๏ธ. - -& ๐Ÿ”จ, **FastAPI** โš– ๐Ÿ‘ˆ ๐Ÿ’ฝ, ๐Ÿญ โšซ๏ธ & ๐Ÿญ ๐Ÿงพ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ”. - -โœ‹๏ธ ๐Ÿ“ค โš  ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช ๐Ÿ” `Request` ๐ŸŽš ๐Ÿ”—. - -## โ„น ๐Ÿ”ƒ `Request` ๐ŸŽš - -**FastAPI** ๐Ÿค™ **๐Ÿ’ƒ** ๐Ÿ”˜, โฎ๏ธ ๐Ÿงฝ ๐Ÿ“š ๐Ÿงฐ ๐Ÿ”› ๐Ÿ”, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ’ƒ `Request` ๐ŸŽš ๐Ÿ”— ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’ช. - -โšซ๏ธ ๐Ÿ”œ โ›“ ๐Ÿ‘ˆ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿคš ๐Ÿ“Š โšช๏ธโžก๏ธ `Request` ๐ŸŽš ๐Ÿ”— (๐Ÿ–ผ, โœ ๐Ÿ’ช) โšซ๏ธ ๐Ÿ† ๐Ÿšซ โœ”, ๐Ÿ—œ โš–๏ธ ๐Ÿ“„ (โฎ๏ธ ๐Ÿ—„, ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข) FastAPI. - -๐Ÿ‘ ๐Ÿ™† ๐ŸŽ ๐Ÿ”ข ๐Ÿ“ฃ ๐Ÿ›Ž (๐Ÿ–ผ, ๐Ÿ’ช โฎ๏ธ Pydantic ๐Ÿท) ๐Ÿ”œ โœ”, ๐Ÿ—œ, โœ, โ™’๏ธ. - -โœ‹๏ธ ๐Ÿ“ค ๐ŸŽฏ ๐Ÿ’ผ ๐ŸŒโ” โšซ๏ธ โš  ๐Ÿคš `Request` ๐ŸŽš. - -## โš™๏ธ `Request` ๐ŸŽš ๐Ÿ”— - -โžก๏ธ ๐ŸŒˆ ๐Ÿ‘† ๐Ÿ’š ๐Ÿคš ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“ข ๐Ÿ“ข/๐Ÿฆ  ๐Ÿ”˜ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” ๐Ÿ“จ ๐Ÿ”—. - -{* ../../docs_src/using_request_directly/tutorial001.py hl[1,7:8] *} - -๐Ÿ“ฃ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”ข โฎ๏ธ ๐Ÿ†Ž โž– `Request` **FastAPI** ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿšถโ€โ™€๏ธ `Request` ๐Ÿ‘ˆ ๐Ÿ”ข. - -/// tip - -๐Ÿ—’ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘ฅ ๐Ÿ“ฃ โžก ๐Ÿ”ข โคด๏ธ ๐Ÿ“จ ๐Ÿ”ข. - -, โžก ๐Ÿ”ข ๐Ÿ”œ โš—, โœ”, ๐Ÿ—œ โœ” ๐Ÿ†Ž & โœ โฎ๏ธ ๐Ÿ—„. - -๐ŸŽ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ™† ๐ŸŽ ๐Ÿ”ข ๐Ÿ›Ž, & โžก, ๐Ÿคš `Request` ๐Ÿ’โ€โ™‚๏ธ. - -/// - -## `Request` ๐Ÿงพ - -๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ… โ„น ๐Ÿ”ƒ `Request` ๐ŸŽš ๐Ÿ›‚ ๐Ÿ’ƒ ๐Ÿงพ ๐Ÿ•ธ. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.requests import Request`. - -**FastAPI** ๐Ÿšš โšซ๏ธ ๐Ÿ”— ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ โšซ๏ธ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// diff --git a/docs/em/docs/advanced/websockets.md b/docs/em/docs/advanced/websockets.md deleted file mode 100644 index a097778c7..000000000 --- a/docs/em/docs/advanced/websockets.md +++ /dev/null @@ -1,186 +0,0 @@ -# *๏ธโƒฃ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ *๏ธโƒฃ โฎ๏ธ **FastAPI**. - -## โŽ `WebSockets` - -๐Ÿฅ‡ ๐Ÿ‘† ๐Ÿ’ช โŽ `WebSockets`: - -
- -```console -$ pip install websockets - ----> 100% -``` - -
- -## *๏ธโƒฃ ๐Ÿ‘ฉโ€๐Ÿ’ป - -### ๐Ÿญ - -๐Ÿ‘† ๐Ÿญ โš™๏ธ, ๐Ÿ‘† ๐ŸŽฒ โœ”๏ธ ๐Ÿ•ธ โœ โฎ๏ธ ๐Ÿ› ๐Ÿ› ๏ธ ๐Ÿ’– ๐Ÿ˜ฅ, Vue.js โš–๏ธ ๐Ÿ“. - -& ๐Ÿ”— โš™๏ธ *๏ธโƒฃ โฎ๏ธ ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ โš™๏ธ ๐Ÿ‘† ๐Ÿ•ธ ๐Ÿš™. - -โš–๏ธ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ‡ฆ๐Ÿ‡ธ ๐Ÿ“ฑ ๐Ÿˆธ ๐Ÿ‘ˆ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘† *๏ธโƒฃ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”—, ๐Ÿ‡ฆ๐Ÿ‡ธ ๐Ÿ“Ÿ. - -โš–๏ธ ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† โœ”๏ธ ๐Ÿ™† ๐ŸŽ ๐ŸŒŒ ๐Ÿ”— โฎ๏ธ *๏ธโƒฃ ๐Ÿ”—. - ---- - -โœ‹๏ธ ๐Ÿ‘‰ ๐Ÿ–ผ, ๐Ÿ‘ฅ ๐Ÿ”œ โš™๏ธ ๐Ÿ“ถ ๐Ÿ™… ๐Ÿ•ธ ๐Ÿ“„ โฎ๏ธ ๐Ÿ•ธ, ๐ŸŒ ๐Ÿ”˜ ๐Ÿ“ ๐ŸŽป. - -๐Ÿ‘‰, โ†—๏ธ, ๐Ÿšซ โš– & ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ โš™๏ธ โšซ๏ธ ๐Ÿญ. - -๐Ÿญ ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ 1๏ธโƒฃ ๐ŸŽ› ๐Ÿ”›. - -โœ‹๏ธ โšซ๏ธ ๐Ÿ™… ๐ŸŒŒ ๐ŸŽฏ ๐Ÿ”› ๐Ÿ’ฝ-๐Ÿš„ *๏ธโƒฃ & โœ”๏ธ ๐Ÿ‘ท ๐Ÿ–ผ: - -{* ../../docs_src/websockets/tutorial001.py hl[2,6:38,41:43] *} - -## โœ `websocket` - -๐Ÿ‘† **FastAPI** ๐Ÿˆธ, โœ `websocket`: - -{* ../../docs_src/websockets/tutorial001.py hl[1,46:47] *} - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.websockets import WebSocket`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `WebSocket` ๐Ÿ”— ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ โšซ๏ธ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -## โŒ› ๐Ÿ“ง & ๐Ÿ“จ ๐Ÿ“ง - -๐Ÿ‘† *๏ธโƒฃ ๐Ÿ›ฃ ๐Ÿ‘† ๐Ÿ’ช `await` ๐Ÿ“ง & ๐Ÿ“จ ๐Ÿ“ง. - -{* ../../docs_src/websockets/tutorial001.py hl[48:52] *} - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ’ฑ, โœ, & ๐ŸŽป ๐Ÿ’ฝ. - -## ๐Ÿ”„ โšซ๏ธ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ ๐Ÿ“› `main.py`, ๐Ÿƒ ๐Ÿ‘† ๐Ÿˆธ โฎ๏ธ: - -
- -```console -$ uvicorn main:app --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -๐Ÿ“‚ ๐Ÿ‘† ๐Ÿ–ฅ http://127.0.0.1:8000. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ™… ๐Ÿ“ƒ ๐Ÿ’–: - - - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ†Ž ๐Ÿ“ง ๐Ÿ”ข ๐Ÿ“ฆ, & ๐Ÿ“จ ๐Ÿ‘ซ: - - - -& ๐Ÿ‘† **FastAPI** ๐Ÿˆธ โฎ๏ธ *๏ธโƒฃ ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ”™: - - - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ (& ๐Ÿ“จ) ๐Ÿ“š ๐Ÿ“ง: - - - -& ๐ŸŒ ๐Ÿ‘ซ ๐Ÿ”œ โš™๏ธ ๐ŸŽ *๏ธโƒฃ ๐Ÿ”—. - -## โš™๏ธ `Depends` & ๐ŸŽ - -*๏ธโƒฃ ๐Ÿ”— ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ—„ โšช๏ธโžก๏ธ `fastapi` & โš™๏ธ: - -* `Depends` -* `Security` -* `Cookie` -* `Header` -* `Path` -* `Query` - -๐Ÿ‘ซ ๐Ÿ‘ท ๐ŸŽ ๐ŸŒŒ ๐ŸŽ FastAPI ๐Ÿ”—/*โžก ๐Ÿ› ๏ธ*: - -{* ../../docs_src/websockets/tutorial002.py hl[66:77,76:91] *} - -/// info - -๐Ÿ‘‰ *๏ธโƒฃ โšซ๏ธ ๐Ÿšซ ๐Ÿค™ โš’ ๐Ÿ”‘ ๐Ÿคš `HTTPException`, โ†ฉ๏ธ ๐Ÿ‘ฅ ๐Ÿคš `WebSocketException`. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ“ช ๐Ÿ“Ÿ โšช๏ธโžก๏ธ โ˜‘ ๐Ÿ“Ÿ ๐Ÿ”ฌ ๐Ÿ”ง. - -/// - -### ๐Ÿ”„ *๏ธโƒฃ โฎ๏ธ ๐Ÿ”— - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ ๐Ÿ“› `main.py`, ๐Ÿƒ ๐Ÿ‘† ๐Ÿˆธ โฎ๏ธ: - -
- -```console -$ uvicorn main:app --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -๐Ÿ“‚ ๐Ÿ‘† ๐Ÿ–ฅ http://127.0.0.1:8000. - -๐Ÿ“ค ๐Ÿ‘† ๐Ÿ’ช โš’: - -* "๐Ÿฌ ๐Ÿ†”", โš™๏ธ โžก. -* "๐Ÿค" โš™๏ธ ๐Ÿ”ข ๐Ÿ”ข. - -/// tip - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ”ข `token` ๐Ÿ”œ ๐Ÿต ๐Ÿ”—. - -/// - -โฎ๏ธ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— *๏ธโƒฃ & โคด๏ธ ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ“ง: - - - -## ๐Ÿšš ๐Ÿ”€ & ๐Ÿ’— ๐Ÿ‘ฉโ€๐Ÿ’ป - -๐Ÿ•โ” *๏ธโƒฃ ๐Ÿ”— ๐Ÿ“ช, `await websocket.receive_text()` ๐Ÿ”œ ๐Ÿคš `WebSocketDisconnect` โš , โ” ๐Ÿ‘† ๐Ÿ’ช โคด๏ธ โœŠ & ๐Ÿต ๐Ÿ’– ๐Ÿ‘‰ ๐Ÿ–ผ. - -{* ../../docs_src/websockets/tutorial003.py hl[81:83] *} - -๐Ÿ”„ โšซ๏ธ ๐Ÿ‘…: - -* ๐Ÿ“‚ ๐Ÿ“ฑ โฎ๏ธ ๐Ÿ“š ๐Ÿ–ฅ ๐Ÿ“‘. -* โœ ๐Ÿ“ง โšช๏ธโžก๏ธ ๐Ÿ‘ซ. -* โคด๏ธ ๐Ÿ” 1๏ธโƒฃ ๐Ÿ“‘. - -๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿคš `WebSocketDisconnect` โš , & ๐ŸŒ ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“ง ๐Ÿ’–: - -``` -Client #1596980209979 left the chat -``` - -/// tip - -๐Ÿ“ฑ ๐Ÿ”› โญ & ๐Ÿ™… ๐Ÿ–ผ ๐ŸŽฆ โ” ๐Ÿต & ๐Ÿ“ป ๐Ÿ“ง ๐Ÿ“š *๏ธโƒฃ ๐Ÿ”—. - -โœ‹๏ธ โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ, ๐ŸŒ ๐Ÿต ๐Ÿ’พ, ๐Ÿ‘ ๐Ÿ“‡, โšซ๏ธ ๐Ÿ”œ ๐Ÿ•ด ๐Ÿ‘ท โช ๐Ÿ› ๏ธ ๐Ÿƒ, & ๐Ÿ”œ ๐Ÿ•ด ๐Ÿ‘ท โฎ๏ธ ๐Ÿ‘ ๐Ÿ› ๏ธ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ•ณ โฉ ๐Ÿ› ๏ธ โฎ๏ธ FastAPI โœ‹๏ธ ๐Ÿ‘ˆ ๐ŸŒ– ๐Ÿ‹๏ธ, ๐Ÿ•โ€๐Ÿฆบ โœณ, โœณ โš–๏ธ ๐ŸŽ, โœ… ๐Ÿ—œ/๐Ÿ“ป. - -/// - -## ๐ŸŒ… โ„น - -๐Ÿ’ก ๐ŸŒ… ๐Ÿ”ƒ ๐ŸŽ›, โœ… ๐Ÿ’ƒ ๐Ÿงพ: - -* `WebSocket` ๐ŸŽ“. -* ๐ŸŽ“-โš“๏ธ *๏ธโƒฃ ๐Ÿšš. diff --git a/docs/em/docs/advanced/wsgi.md b/docs/em/docs/advanced/wsgi.md deleted file mode 100644 index d923347d5..000000000 --- a/docs/em/docs/advanced/wsgi.md +++ /dev/null @@ -1,35 +0,0 @@ -# โœ… ๐Ÿ‡จ๐Ÿ‡ป - ๐Ÿบ, โœณ, ๐ŸŽ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ—ป ๐Ÿ‡จ๐Ÿ‡ป ๐Ÿˆธ ๐Ÿ‘† ๐Ÿ‘€ โฎ๏ธ [๐ŸŽง ๐Ÿˆธ - ๐Ÿ—ป](sub-applications.md){.internal-link target=_blank}, [โ›… ๐Ÿ—ณ](behind-a-proxy.md){.internal-link target=_blank}. - -๐Ÿ‘ˆ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `WSGIMiddleware` & โš™๏ธ โšซ๏ธ ๐ŸŽ ๐Ÿ‘† ๐Ÿ‡จ๐Ÿ‡ป ๐Ÿˆธ, ๐Ÿ–ผ, ๐Ÿบ, โœณ, โ™’๏ธ. - -## โš™๏ธ `WSGIMiddleware` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ—„ `WSGIMiddleware`. - -โคด๏ธ ๐ŸŽ ๐Ÿ‡จ๐Ÿ‡ป (โœ… ๐Ÿบ) ๐Ÿ“ฑ โฎ๏ธ ๐Ÿ› ๏ธ. - -& โคด๏ธ ๐Ÿ—ป ๐Ÿ‘ˆ ๐Ÿ”ฝ โžก. - -{* ../../docs_src/wsgi/tutorial001.py hl[2:3,22] *} - -## โœ… โšซ๏ธ - -๐Ÿ”œ, ๐Ÿ”  ๐Ÿ“จ ๐Ÿ”ฝ โžก `/v1/` ๐Ÿ”œ ๐Ÿต ๐Ÿบ ๐Ÿˆธ. - -& ๐ŸŽ‚ ๐Ÿ”œ ๐Ÿต **FastAPI**. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒ โšซ๏ธ โฎ๏ธ Uvicorn & ๐Ÿšถ http://localhost:8000/v1/ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ“จ โšช๏ธโžก๏ธ ๐Ÿบ: - -```txt -Hello, World from Flask! -``` - -& ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถ http://localhost:8000/v2 ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ“จ โšช๏ธโžก๏ธ FastAPI: - -```JSON -{ - "message": "Hello World" -} -``` diff --git a/docs/em/docs/alternatives.md b/docs/em/docs/alternatives.md deleted file mode 100644 index 4cbac7539..000000000 --- a/docs/em/docs/alternatives.md +++ /dev/null @@ -1,485 +0,0 @@ -# ๐ŸŽ›, ๐ŸŒˆ & ๐Ÿ”บ - -โšซ๏ธโ” ๐Ÿ˜ฎ **FastAPI**, โ” โšซ๏ธ ๐Ÿ”ฌ ๐ŸŽ ๐ŸŽ› & โšซ๏ธโ” โšซ๏ธ ๐Ÿ‡ญ๐Ÿ‡ฒ โšช๏ธโžก๏ธ ๐Ÿ‘ซ. - -## ๐ŸŽถ - -**FastAPI** ๐Ÿšซ๐Ÿ”œ ๐Ÿ”€ ๐Ÿšฅ ๐Ÿšซ โฎ๏ธ ๐Ÿ‘ท ๐ŸŽ. - -๐Ÿ“ค โœ”๏ธ ๐Ÿ“š ๐Ÿงฐ โœ โญ ๐Ÿ‘ˆ โœ”๏ธ โ„น ๐Ÿ˜ฎ ๐Ÿšฎ ๐Ÿ—. - -๐Ÿ‘ค โœ”๏ธ โŽ ๐Ÿ— ๐Ÿ†• ๐Ÿ› ๏ธ ๐Ÿ“š 1๏ธโƒฃ2๏ธโƒฃ๐Ÿ—“๏ธ. ๐Ÿฅ‡ ๐Ÿ‘ค ๐Ÿ”„ โŽ ๐ŸŒ โš’ ๐Ÿ“” **FastAPI** โš™๏ธ ๐Ÿ“š ๐ŸŽ ๐Ÿ› ๏ธ, ๐Ÿ”Œ-๐Ÿ”Œ, & ๐Ÿงฐ. - -โœ‹๏ธ โ˜, ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ ๐ŸŽ ๐ŸŽ› ๐ŸŒ˜ ๐Ÿ— ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿšš ๐ŸŒ ๐Ÿ‘ซ โš’, โœŠ ๐Ÿ† ๐Ÿ’ญ โšช๏ธโžก๏ธ โฎ๏ธ ๐Ÿงฐ, & ๐ŸŒ€ ๐Ÿ‘ซ ๐Ÿ† ๐ŸŒŒ ๐Ÿ’ช, โš™๏ธ ๐Ÿ‡ช๐Ÿ‡ธ โš’ ๐Ÿ‘ˆ โž–๐Ÿšซ ๐Ÿ’ช โญ (๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ โž• ๐Ÿ†Ž ๐Ÿ”‘). - -## โฎ๏ธ ๐Ÿงฐ - -### โœณ - -โšซ๏ธ ๐ŸŒ… ๐ŸŒŸ ๐Ÿ ๐Ÿ› ๏ธ & ๐Ÿ›Ž ๐Ÿ•ด. โšซ๏ธ โš™๏ธ ๐Ÿ— โš™๏ธ ๐Ÿ’– ๐Ÿ‘ฑ๐Ÿ“”. - -โšซ๏ธ ๐Ÿ“ถ ๐Ÿ˜† ๐Ÿ”— โฎ๏ธ ๐Ÿ”— ๐Ÿ’ฝ (๐Ÿ’– โœณ โš–๏ธ โœณ),, โœ”๏ธ โ˜ ๐Ÿ’ฝ (๐Ÿ’– ๐Ÿ—„, โœณ, ๐Ÿ‘ธ, โ™’๏ธ) ๐Ÿ‘‘ ๐Ÿช ๐Ÿš’ ๐Ÿšซ ๐Ÿ“ถ โฉ. - -โšซ๏ธ โœ ๐Ÿ— ๐Ÿ•ธ ๐Ÿ‘ฉโ€๐Ÿ’ป, ๐Ÿšซ โœ ๐Ÿ”— โš™๏ธ ๐Ÿ› ๐Ÿ•ธ (๐Ÿ’– ๐Ÿ˜ฅ, Vue.js & ๐Ÿ“) โš–๏ธ ๐ŸŽ โš™๏ธ (๐Ÿ’– โ˜ ๐Ÿ“ณ) ๐Ÿ”— โฎ๏ธ โšซ๏ธ. - -### โœณ ๐ŸŽ‚ ๐Ÿ› ๏ธ - -โœณ ๐ŸŽ‚ ๐Ÿ› ๏ธ โœ ๐Ÿ—œ ๐Ÿงฐ ๐Ÿ— ๐Ÿ•ธ ๐Ÿ”— โš™๏ธ โœณ ๐Ÿ”˜, ๐Ÿ“‰ ๐Ÿšฎ ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ. - -โšซ๏ธ โš™๏ธ ๐Ÿ“š ๐Ÿข โœ… ๐ŸฆŽ, ๐ŸŸฅ ๐Ÿ‘’ & ๐ŸŽŸ. - -โšซ๏ธ ๐Ÿ• ๐Ÿฅ‡ ๐Ÿ–ผ **๐Ÿง ๐Ÿ› ๏ธ ๐Ÿงพ**, & ๐Ÿ‘‰ ๐ŸŽฏ ๐Ÿ• ๐Ÿฅ‡ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ˜ฎ "๐Ÿ”Ž" **FastAPI**. - -/// note - -โœณ ๐ŸŽ‚ ๐Ÿ› ๏ธ โœ โœก ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ›. ๐ŸŽ ๐Ÿ‘ผ ๐Ÿ’ƒ & Uvicorn, ๐Ÿ”› โ” **FastAPI** โš“๏ธ. - -/// - -/// check | ๐Ÿ˜ฎ **FastAPI** - -โœ”๏ธ ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿงพ ๐Ÿ•ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข. - -/// - -### ๐Ÿบ - -๐Ÿบ "๐Ÿ•ธ", โšซ๏ธ ๐Ÿšซ ๐Ÿ”Œ ๐Ÿ’ฝ ๐Ÿ› ๏ธ ๐Ÿšซ ๐Ÿ“š ๐Ÿ‘œ ๐Ÿ‘ˆ ๐Ÿ‘Ÿ ๐Ÿ”ข โœณ. - -๐Ÿ‘‰ ๐Ÿฆ & ๐Ÿ’ช โœ” ๐Ÿ”จ ๐Ÿ‘œ ๐Ÿ’– โš™๏ธ โ˜ ๐Ÿ’ฝ ๐Ÿ‘‘ ๐Ÿ’ฝ ๐Ÿ’พ โš™๏ธ. - -โšซ๏ธ ๐Ÿ“ถ ๐Ÿ™…, โšซ๏ธ ๐Ÿ“ถ ๐Ÿ‹๏ธ ๐Ÿ’ก, ๐Ÿ‘ ๐Ÿงพ ๐Ÿคš ๐Ÿ™ ๐Ÿ“ก โ˜. - -โšซ๏ธ ๐Ÿ›Ž โš™๏ธ ๐ŸŽ ๐Ÿˆธ ๐Ÿ‘ˆ ๐Ÿšซ ๐ŸŽฏ ๐Ÿ’ช ๐Ÿ’ฝ, ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿงพ, โš–๏ธ ๐Ÿ™† ๐Ÿ“š โš’ ๐Ÿ‘ˆ ๐Ÿ‘Ÿ ๐Ÿค-๐Ÿ— โœณ. ๐Ÿ‘ ๐Ÿ“š ๐Ÿ‘ซ โš’ ๐Ÿ’ช ๐Ÿšฎ โฎ๏ธ ๐Ÿ”Œ-๐Ÿ”Œ. - -๐Ÿ‘‰ โš– ๐Ÿ•, & โž– "๐Ÿ•ธ" ๐Ÿ‘ˆ ๐Ÿ’ช โ†” ๐Ÿ“” โšซ๏ธโ” โšซ๏ธโ” ๐Ÿ’ช ๐Ÿ”‘ โš’ ๐Ÿ‘ˆ ๐Ÿ‘ค ๐Ÿ’š ๐Ÿšง. - -๐Ÿ‘ ๐Ÿฆ ๐Ÿบ, โšซ๏ธ ๐Ÿ˜‘ ๐Ÿ’– ๐Ÿ‘ ๐Ÿ ๐Ÿ— ๐Ÿ”—. โญ ๐Ÿ‘œ ๐Ÿ”Ž "โœณ ๐ŸŽ‚ ๐Ÿ› ๏ธ" ๐Ÿบ. - -/// check | ๐Ÿ˜ฎ **FastAPI** - -โ—พ-๐Ÿ› ๏ธ. โš’ โšซ๏ธ โฉ ๐ŸŒ€ & ๐Ÿ ๐Ÿงฐ & ๐Ÿ• ๐Ÿ’ช. - -โœ”๏ธ ๐Ÿ™… & โฉ โš™๏ธ ๐Ÿ•น โš™๏ธ. - -/// - -### ๐Ÿ“จ - -**FastAPI** ๐Ÿšซ ๐Ÿค™ ๐ŸŽ› **๐Ÿ“จ**. ๐Ÿ‘ซ โ†” ๐Ÿ“ถ ๐ŸŽ. - -โšซ๏ธ ๐Ÿ”œ ๐Ÿค™ โš  โš™๏ธ ๐Ÿ“จ *๐Ÿ”˜* FastAPI ๐Ÿˆธ. - -โœ‹๏ธ, FastAPI ๐Ÿคš ๐ŸŒˆ โšช๏ธโžก๏ธ ๐Ÿ“จ. - -**๐Ÿ“จ** ๐Ÿ—ƒ *๐Ÿ”—* โฎ๏ธ ๐Ÿ”— (๐Ÿ‘ฉโ€๐Ÿ’ป), โช **FastAPI** ๐Ÿ—ƒ *๐Ÿ—* ๐Ÿ”— (๐Ÿ’ฝ). - -๐Ÿ‘ซ, ๐ŸŒ– โš–๏ธ ๐ŸŒ˜, ๐Ÿ”„ ๐Ÿ”š, ๐Ÿ”— ๐Ÿ”  ๐ŸŽ. - -๐Ÿ“จ โœ”๏ธ ๐Ÿ“ถ ๐Ÿ™… & ๐Ÿ‹๏ธ ๐Ÿ”ง, โšซ๏ธ ๐Ÿ“ถ โฉ โš™๏ธ, โฎ๏ธ ๐Ÿค” ๐Ÿ”ข. โœ‹๏ธ ๐ŸŽ ๐Ÿ•ฐ, โšซ๏ธ ๐Ÿ“ถ ๐Ÿ‹๏ธ & ๐Ÿ›ƒ. - -๐Ÿ‘ˆ โšซ๏ธโ”, ๐Ÿ’ฌ ๐Ÿ›‚ ๐Ÿ•ธ: - -> ๐Ÿ“จ 1๏ธโƒฃ ๐Ÿ† โฌ ๐Ÿ ๐Ÿ“ฆ ๐ŸŒ ๐Ÿ•ฐ - -๐ŸŒŒ ๐Ÿ‘† โš™๏ธ โšซ๏ธ ๐Ÿ“ถ ๐Ÿ™…. ๐Ÿ–ผ, `GET` ๐Ÿ“จ, ๐Ÿ‘† ๐Ÿ”œ โœ: - -```Python -response = requests.get("http://example.com/some/url") -``` - -FastAPI ๐Ÿ˜‘ ๐Ÿ› ๏ธ *โžก ๐Ÿ› ๏ธ* ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’–: - -```Python hl_lines="1" -@app.get("/some/url") -def read_url(): - return {"message": "Hello World"} -``` - -๐Ÿ‘€ ๐Ÿ”€ `requests.get(...)` & `@app.get(...)`. - -/// check | ๐Ÿ˜ฎ **FastAPI** - -* โœ”๏ธ ๐Ÿ™… & ๐Ÿ‹๏ธ ๐Ÿ› ๏ธ. -* โš™๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“› (๐Ÿ› ๏ธ) ๐Ÿ”—, ๐ŸŽฏ & ๐Ÿ‹๏ธ ๐ŸŒŒ. -* โœ”๏ธ ๐Ÿค” ๐Ÿ”ข, โœ‹๏ธ ๐Ÿ‹๏ธ ๐Ÿ›ƒ. - -/// - -### ๐Ÿฆ / ๐Ÿ—„ - -๐Ÿ‘‘ โš’ ๐Ÿ‘ค ๐Ÿ’š โšช๏ธโžก๏ธ โœณ ๐ŸŽ‚ ๐Ÿ› ๏ธ ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿงพ. - -โคด๏ธ ๐Ÿ‘ค ๐Ÿ”Ž ๐Ÿ‘ˆ ๐Ÿ“ค ๐Ÿฉ ๐Ÿ“„ ๐Ÿ”—, โš™๏ธ ๐ŸŽป (โš–๏ธ ๐Ÿ“, โ†” ๐ŸŽป) ๐Ÿค™ ๐Ÿฆ. - -& ๐Ÿ“ค ๐Ÿ•ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿฆ ๐Ÿ› ๏ธ โช โœ. , ๐Ÿ’†โ€โ™‚ ๐Ÿ’ช ๐Ÿ— ๐Ÿฆ ๐Ÿงพ ๐Ÿ› ๏ธ ๐Ÿ”œ โœ” โš™๏ธ ๐Ÿ‘‰ ๐Ÿ•ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿ”. - -โ˜, ๐Ÿฆ ๐Ÿ‘ ๐Ÿ’พ ๐Ÿ›, ๐Ÿ“ ๐Ÿ—„. - -๐Ÿ‘ˆ โšซ๏ธโ” ๐Ÿ•โ” ๐Ÿ’ฌ ๐Ÿ”ƒ โฌ 2๏ธโƒฃ.0๏ธโƒฃ โšซ๏ธ โš  ๐Ÿ’ฌ "๐Ÿฆ", & โฌ 3๏ธโƒฃ โž• "๐Ÿ—„". - -/// check | ๐Ÿ˜ฎ **FastAPI** - -๐Ÿ› ๏ธ & โš™๏ธ ๐Ÿ“‚ ๐Ÿฉ ๐Ÿ› ๏ธ ๐Ÿ”ง, โ†ฉ๏ธ ๐Ÿ›ƒ ๐Ÿ”—. - - & ๐Ÿ› ๏ธ ๐Ÿฉ-โš“๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿงฐ: - -* ๐Ÿฆ ๐ŸŽš -* ๐Ÿ“„ - -๐Ÿ‘ซ 2๏ธโƒฃ ๐Ÿ‘ โž– ๐Ÿ“ถ ๐ŸŒŸ & โš–, โœ‹๏ธ ๐Ÿ”จ โฉ ๐Ÿ”Ž, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”Ž ๐Ÿ’ฏ ๐ŸŒ– ๐ŸŽ› ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿ—„ (๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โฎ๏ธ **FastAPI**). - -/// - -### ๐Ÿบ ๐ŸŽ‚ ๐Ÿ› ๏ธ - -๐Ÿ“ค ๐Ÿ“š ๐Ÿบ ๐ŸŽ‚ ๐Ÿ› ๏ธ, โœ‹๏ธ โฎ๏ธ ๐Ÿ’ฐ ๐Ÿ•ฐ & ๐Ÿ‘ท ๐Ÿ”˜ ๐Ÿ”ฌ ๐Ÿ‘ซ, ๐Ÿ‘ค ๐Ÿ”Ž ๐Ÿ‘ˆ ๐Ÿ“š ๐Ÿ˜ž โš–๏ธ ๐Ÿšซ, โฎ๏ธ ๐Ÿ“š ๐Ÿง โ” ๐Ÿ‘ˆ โš’ ๐Ÿ‘ซ ๐Ÿ™ƒ. - -### ๐Ÿญ - -1๏ธโƒฃ ๐Ÿ‘‘ โš’ ๐Ÿ’ช ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿ“Š "๐Ÿ› ๏ธ" โ” โœŠ ๐Ÿ“Š โšช๏ธโžก๏ธ ๐Ÿ“Ÿ (๐Ÿ) & ๐Ÿญ โšซ๏ธ ๐Ÿ”˜ ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ”˜ ๐Ÿ•ธ. ๐Ÿ–ผ, ๐Ÿญ ๐ŸŽš โš— ๐Ÿ“Š โšช๏ธโžก๏ธ ๐Ÿ’ฝ ๐Ÿ”˜ ๐ŸŽป ๐ŸŽš. ๐Ÿญ `datetime` ๐ŸŽš ๐Ÿ”˜ ๐ŸŽป, โ™’๏ธ. - -โž•1๏ธโƒฃ ๐Ÿฆ โš’ ๐Ÿ’š ๐Ÿ”— ๐Ÿ’ฝ ๐Ÿ”ฌ, โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ’ฝ โ˜‘, ๐Ÿค ๐ŸŽฏ ๐Ÿ”ข. ๐Ÿ–ผ, ๐Ÿ‘ˆ ๐Ÿ‘ `int`, & ๐Ÿšซ ๐ŸŽฒ ๐ŸŽป. ๐Ÿ‘‰ โœด๏ธ โš  ๐Ÿ“จ ๐Ÿ’ฝ. - -๐Ÿต ๐Ÿ’ฝ ๐Ÿ”ฌ โš™๏ธ, ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐ŸŒ โœ… โœ‹, ๐Ÿ“Ÿ. - -๐Ÿ‘ซ โš’ โšซ๏ธโ” ๐Ÿญ ๐Ÿ— ๐Ÿšš. โšซ๏ธ ๐Ÿ‘‘ ๐Ÿ—ƒ, & ๐Ÿ‘ค โœ”๏ธ โš™๏ธ โšซ๏ธ ๐Ÿ“š โญ. - -โœ‹๏ธ โšซ๏ธ โœ โญ ๐Ÿ“ค ๐Ÿ”€ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘. , ๐Ÿ”ฌ ๐Ÿ”  ๐Ÿ”— ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽฏ ๐Ÿ‡จ๐Ÿ‡ป & ๐ŸŽ“ ๐Ÿšš ๐Ÿญ. - -/// check | ๐Ÿ˜ฎ **FastAPI** - -โš™๏ธ ๐Ÿ“Ÿ ๐Ÿ”ฌ "๐Ÿ”—" ๐Ÿ‘ˆ ๐Ÿšš ๐Ÿ’ฝ ๐Ÿ†Ž & ๐Ÿ”ฌ, ๐Ÿ”. - -/// - -### Webarg - -โž•1๏ธโƒฃ ๐Ÿฆ โš’ โœ” ๐Ÿ”— โœ ๐Ÿ“Š โšช๏ธโžก๏ธ ๐Ÿ“จ ๐Ÿ“จ. - -Webarg ๐Ÿงฐ ๐Ÿ‘ˆ โš’ ๐Ÿšš ๐Ÿ‘ˆ ๐Ÿ”› ๐Ÿ” ๐Ÿ“š ๐Ÿ› ๏ธ, ๐Ÿ”Œ ๐Ÿบ. - -โšซ๏ธ โš™๏ธ ๐Ÿญ ๐Ÿ”˜ ๐Ÿ’ฝ ๐Ÿ”ฌ. & โšซ๏ธ โœ ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -โšซ๏ธ ๐Ÿ‘‘ ๐Ÿงฐ & ๐Ÿ‘ค โœ”๏ธ โš™๏ธ โšซ๏ธ ๐Ÿ“š ๐Ÿ’โ€โ™‚๏ธ, โญ โœ”๏ธ **FastAPI**. - -/// info - -Webarg โœ ๐ŸŽ ๐Ÿญ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -/// - -/// check | ๐Ÿ˜ฎ **FastAPI** - -โœ”๏ธ ๐Ÿง ๐Ÿ”ฌ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ’ฝ. - -/// - -### APISpec - -๐Ÿญ & Webarg ๐Ÿšš ๐Ÿ”ฌ, โœ & ๐Ÿ› ๏ธ ๐Ÿ”Œ-๐Ÿ”Œ. - -โœ‹๏ธ ๐Ÿงพ โŒ. โคด๏ธ APISpec โœ. - -โšซ๏ธ ๐Ÿ”Œ-๐Ÿ“š ๐Ÿ› ๏ธ (& ๐Ÿ“ค ๐Ÿ”Œ-๐Ÿ’ƒ ๐Ÿ’โ€โ™‚๏ธ). - -๐ŸŒŒ โšซ๏ธ ๐Ÿ‘ท ๐Ÿ‘ˆ ๐Ÿ‘† โœ ๐Ÿ”‘ ๐Ÿ”— โš™๏ธ ๐Ÿ“ ๐Ÿ“ ๐Ÿ”˜ #๏ธโƒฃ ๐Ÿ”  ๐Ÿ”ข ๐Ÿšš ๐Ÿ›ฃ. - -& โšซ๏ธ ๐Ÿ— ๐Ÿ—„ ๐Ÿ”—. - -๐Ÿ‘ˆ โ” โšซ๏ธ ๐Ÿ‘ท ๐Ÿบ, ๐Ÿ’ƒ, ๐Ÿ†˜, โ™’๏ธ. - -โœ‹๏ธ โคด๏ธ, ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ”„ โš  โœ”๏ธ โ—พ-โ•, ๐Ÿ”˜ ๐Ÿ ๐ŸŽป (๐Ÿฆ ๐Ÿ“). - -๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ’ช ๐Ÿšซ โ„น ๐ŸŒ… โฎ๏ธ ๐Ÿ‘ˆ. & ๐Ÿšฅ ๐Ÿ‘ฅ ๐Ÿ”€ ๐Ÿ”ข โš–๏ธ ๐Ÿญ ๐Ÿ”— & ๐Ÿ’ญ ๐Ÿ”€ ๐Ÿ‘ˆ ๐Ÿ“#๏ธโƒฃ, ๐Ÿ— ๐Ÿ”— ๐Ÿ”œ โŒ. - -/// info - -APISpec โœ ๐ŸŽ ๐Ÿญ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -/// - -/// check | ๐Ÿ˜ฎ **FastAPI** - -๐Ÿ•โ€๐Ÿฆบ ๐Ÿ“‚ ๐Ÿฉ ๐Ÿ› ๏ธ, ๐Ÿ—„. - -/// - -### ๐Ÿบ-Apispec - -โšซ๏ธ ๐Ÿบ ๐Ÿ”Œ -, ๐Ÿ‘ˆ ๐Ÿ‘” ๐Ÿ‘ฏโ€โ™‚๏ธ Webarg, ๐Ÿญ & APISpec. - -โšซ๏ธ โš™๏ธ โ„น โšช๏ธโžก๏ธ Webarg & ๐Ÿญ ๐Ÿ” ๐Ÿ— ๐Ÿ—„ ๐Ÿ”—, โš™๏ธ APISpec. - -โšซ๏ธ ๐Ÿ‘‘ ๐Ÿงฐ, ๐Ÿ“ถ ๐Ÿ”ฝ-๐Ÿ“ˆ. โšซ๏ธ ๐Ÿ”œ ๐ŸŒŒ ๐ŸŒ– ๐ŸŒŸ ๐ŸŒ˜ ๐Ÿ“š ๐Ÿบ ๐Ÿ”Œ-๐Ÿ”Œ ๐Ÿ‘… ๐Ÿ“ค. โšซ๏ธ ๐Ÿ’ช โ†ฉ๏ธ ๐Ÿšฎ ๐Ÿงพ โž– ๐Ÿ’โ€โ™‚๏ธ ๐Ÿฉฒ & ๐Ÿ“. - -๐Ÿ‘‰ โŽ โœ”๏ธ โœ ๐Ÿ“ (โž•1๏ธโƒฃ โ•) ๐Ÿ”˜ ๐Ÿ โœ. - -๐Ÿ‘‰ ๐ŸŒ€ ๐Ÿบ, ๐Ÿบ-Apispec โฎ๏ธ ๐Ÿญ & Webarg ๐Ÿ‘‡ ๐Ÿ’• ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“š โญ ๐Ÿ— **FastAPI**. - -โš™๏ธ โšซ๏ธ โ†˜๏ธ ๐Ÿ— ๐Ÿ“š ๐Ÿบ ๐ŸŒ•-๐Ÿ“š ๐Ÿš‚. ๐Ÿ‘ซ ๐Ÿ‘‘ ๐Ÿ“š ๐Ÿ‘ค (& ๐Ÿ“š ๐Ÿ”ข ๐Ÿ‰) โœ”๏ธ โš™๏ธ ๐Ÿ†™ ๐Ÿ”œ: - -* https://github.com/tiangolo/full-stack -* https://github.com/tiangolo/full-stack-flask-couchbase -* https://github.com/tiangolo/full-stack-flask-couchdb - -& ๐Ÿ‘ซ ๐ŸŽ ๐ŸŒ•-๐Ÿ“š ๐Ÿš‚ ๐Ÿงข [**FastAPI** ๐Ÿ— ๐Ÿš‚](project-generation.md){.internal-link target=_blank}. - -/// info - -๐Ÿบ-Apispec โœ ๐ŸŽ ๐Ÿญ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -/// - -/// check | ๐Ÿ˜ฎ **FastAPI** - -๐Ÿ— ๐Ÿ—„ ๐Ÿ”— ๐Ÿ”, โšช๏ธโžก๏ธ ๐ŸŽ ๐Ÿ“Ÿ ๐Ÿ‘ˆ ๐Ÿ”ฌ ๐Ÿ› ๏ธ & ๐Ÿ”ฌ. - -/// - -### NestJS (& ๐Ÿ“) - -๐Ÿ‘‰ โž–๐Ÿšซ ๐Ÿšซ ๐Ÿ, NestJS ๐Ÿ•ธ (๐Ÿ“•) โœณ ๐Ÿ› ๏ธ ๐Ÿ˜ฎ ๐Ÿ“. - -โšซ๏ธ ๐Ÿ† ๐Ÿ•ณ ๐Ÿ™ ๐ŸŽ โšซ๏ธโ” ๐Ÿ’ช ๐Ÿ”จ โฎ๏ธ ๐Ÿบ-Apispec. - -โšซ๏ธ โœ”๏ธ ๐Ÿ› ๏ธ ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ, ๐Ÿ˜ฎ ๐Ÿ“ 2๏ธโƒฃ. โšซ๏ธ ๐Ÿšš ๐Ÿค-ยฎ "๐Ÿ’‰" (๐Ÿ’– ๐ŸŒ ๐ŸŽ ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ ๐Ÿ‘ค ๐Ÿ’ญ),, โšซ๏ธ ๐Ÿšฎ ๐ŸŽญ & ๐Ÿ“Ÿ ๐Ÿ”. - -๐Ÿ”ข ๐Ÿ”ฌ โฎ๏ธ ๐Ÿ“• ๐Ÿ†Ž (๐ŸŽ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘), ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘. - -โœ‹๏ธ ๐Ÿ“• ๐Ÿ“Š ๐Ÿšซ ๐Ÿ›ก โฎ๏ธ ๐Ÿ“น ๐Ÿ•ธ, โšซ๏ธ ๐Ÿšซ๐Ÿ”œ โš“๏ธ ๐Ÿ”› ๐Ÿ†Ž ๐Ÿ”ฌ ๐Ÿ”ฌ, ๐Ÿ› ๏ธ & ๐Ÿงพ ๐ŸŽ ๐Ÿ•ฐ. โ†ฉ๏ธ ๐Ÿ‘‰ & ๐Ÿ”ง ๐Ÿšซ, ๐Ÿคš ๐Ÿ”ฌ, ๐Ÿ› ๏ธ & ๐Ÿง ๐Ÿ”— โšก, โšซ๏ธ ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ“š ๐Ÿฅ‰. , โšซ๏ธ โ–ถ๏ธ๏ธ ๐Ÿ”. - -โšซ๏ธ ๐Ÿ’ช ๐Ÿšซ ๐Ÿต ๐Ÿ” ๐Ÿท ๐Ÿ“ถ ๐Ÿ‘. , ๐Ÿšฅ ๐ŸŽป ๐Ÿ’ช ๐Ÿ“จ ๐ŸŽป ๐ŸŽš ๐Ÿ‘ˆ โœ”๏ธ ๐Ÿ”˜ ๐Ÿ‘ ๐Ÿ‘ˆ ๐Ÿ”„ ๐Ÿฆ ๐ŸŽป ๐ŸŽš, โšซ๏ธ ๐Ÿšซ๐Ÿ”œ โ˜‘ ๐Ÿ“„ & โœ”. - -/// check | ๐Ÿ˜ฎ **FastAPI** - -โš™๏ธ ๐Ÿ ๐Ÿ†Ž โœ”๏ธ ๐Ÿ‘‘ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ. - -โœ”๏ธ ๐Ÿ‹๏ธ ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ. ๐Ÿ”Ž ๐ŸŒŒ ๐Ÿ“‰ ๐Ÿ“Ÿ ๐Ÿ”. - -/// - -### ๐Ÿคฃ - -โšซ๏ธ ๐Ÿ• ๐Ÿฅ‡ ๐Ÿ“ถ โฉ ๐Ÿ ๐Ÿ› ๏ธ โš“๏ธ ๐Ÿ”› `asyncio`. โšซ๏ธ โš’ ๐Ÿ“ถ ๐ŸŽ ๐Ÿบ. - -/// note | ๐Ÿ“ก โ„น - -โšซ๏ธ โš™๏ธ `uvloop` โ†ฉ๏ธ ๐Ÿ”ข ๐Ÿ `asyncio` โžฐ. ๐Ÿ‘ˆ โšซ๏ธโ” โš’ โšซ๏ธ โฉ. - -โšซ๏ธ ๐ŸŽฏ ๐Ÿ˜ฎ Uvicorn & ๐Ÿ’ƒ, ๐Ÿ‘ˆ โณ โฉ ๐ŸŒ˜ ๐Ÿคฃ ๐Ÿ“‚ ๐Ÿ“‡. - -/// - -/// check | ๐Ÿ˜ฎ **FastAPI** - -๐Ÿ”Ž ๐ŸŒŒ โœ”๏ธ ๐Ÿ˜œ ๐ŸŽญ. - -๐Ÿ‘ˆ โšซ๏ธโ” **FastAPI** โš“๏ธ ๐Ÿ”› ๐Ÿ’ƒ, โšซ๏ธ โฉ ๐Ÿ› ๏ธ ๐Ÿ’ช (๐Ÿ’ฏ ๐Ÿฅ‰-๐Ÿฅณ ๐Ÿ“‡). - -/// - -### ๐Ÿฆ… - -๐Ÿฆ… โž•1๏ธโƒฃ โ†• ๐ŸŽญ ๐Ÿ ๐Ÿ› ๏ธ, โšซ๏ธ ๐Ÿ”ง โญ, & ๐Ÿ‘ท ๐Ÿ› ๐ŸŽ ๐Ÿ› ๏ธ ๐Ÿ’– ๐Ÿค—. - -โšซ๏ธ ๐Ÿ— โœ”๏ธ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“จ 2๏ธโƒฃ ๐Ÿ”ข, 1๏ธโƒฃ "๐Ÿ“จ" & 1๏ธโƒฃ "๐Ÿ“จ". โคด๏ธ ๐Ÿ‘† "โœ" ๐Ÿ• โšช๏ธโžก๏ธ ๐Ÿ“จ, & "โœ" ๐Ÿ• ๐Ÿ“จ. โ†ฉ๏ธ ๐Ÿ‘‰ ๐Ÿ”ง, โšซ๏ธ ๐Ÿšซ ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“จ ๐Ÿ”ข & ๐Ÿ’ช โฎ๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘ ๐Ÿ”ข ๐Ÿ”ข. - -, ๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿ› ๏ธ, & ๐Ÿงพ, โœ”๏ธ โŒ› ๐Ÿ“Ÿ, ๐Ÿšซ ๐Ÿ”. โš–๏ธ ๐Ÿ‘ซ โœ”๏ธ ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ ๐Ÿ”› ๐Ÿ” ๐Ÿฆ…, ๐Ÿ’– ๐Ÿค—. ๐Ÿ‘‰ ๐ŸŽ ๐Ÿ”บ ๐Ÿ”จ ๐ŸŽ ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ˜ฎ ๐Ÿฆ… ๐Ÿ”ง, โœ”๏ธ 1๏ธโƒฃ ๐Ÿ“จ ๐ŸŽš & 1๏ธโƒฃ ๐Ÿ“จ ๐ŸŽš ๐Ÿ”ข. - -/// check | ๐Ÿ˜ฎ **FastAPI** - -๐Ÿ”Ž ๐ŸŒŒ ๐Ÿคš ๐Ÿ‘‘ ๐ŸŽญ. - -โคด๏ธ โฎ๏ธ ๐Ÿค— (๐Ÿค— โš“๏ธ ๐Ÿ”› ๐Ÿฆ…) ๐Ÿ˜ฎ **FastAPI** ๐Ÿ“ฃ `response` ๐Ÿ”ข ๐Ÿ”ข. - -๐Ÿ‘ FastAPI โšซ๏ธ ๐Ÿ“ฆ, & โš™๏ธ โœด๏ธ โš’ ๐ŸŽš, ๐Ÿช, & ๐ŸŽ› ๐Ÿ‘” ๐Ÿ“Ÿ. - -/// - -### โ™จ - -๐Ÿ‘ค ๐Ÿ”Ž โ™จ ๐Ÿฅ‡ โ–ถ๏ธ ๐Ÿ— **FastAPI**. & โšซ๏ธ โœ”๏ธ ๐ŸŽ ๐Ÿ’ญ: - -* โš“๏ธ ๐Ÿ”› ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘. -* ๐Ÿ”ฌ & ๐Ÿงพ โšช๏ธโžก๏ธ ๐Ÿ‘ซ ๐Ÿ†Ž. -* ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ. - -โšซ๏ธ ๐Ÿšซ โš™๏ธ ๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿ› ๏ธ & ๐Ÿงพ ๐Ÿฅ‰-๐Ÿฅณ ๐Ÿ—ƒ ๐Ÿ’– Pydantic, โšซ๏ธ โœ”๏ธ ๐Ÿšฎ ๐Ÿ‘. , ๐Ÿ‘ซ ๐Ÿ’ฝ ๐Ÿ†Ž ๐Ÿ”‘ ๐Ÿ”œ ๐Ÿšซ โ™ป ๐Ÿ’ช. - -โšซ๏ธ ๐Ÿšš ๐Ÿฅ ๐Ÿ– ๐ŸŒ… ๐Ÿ” ๐Ÿ“ณ. & โšซ๏ธ โš“๏ธ ๐Ÿ”› ๐Ÿ‡จ๐Ÿ‡ป (โ†ฉ๏ธ ๐Ÿ”ซ), โšซ๏ธ ๐Ÿšซ ๐Ÿ”ง โœŠ ๐Ÿ“ˆ โ†•-๐ŸŽญ ๐Ÿšš ๐Ÿงฐ ๐Ÿ’– Uvicorn, ๐Ÿ’ƒ & ๐Ÿคฃ. - -๐Ÿ”— ๐Ÿ’‰ โš™๏ธ ๐Ÿšš ๐Ÿค-ยฎ ๐Ÿ”— & ๐Ÿ”— โŽ ๐Ÿงข ๐Ÿ”› ๐Ÿ“ฃ ๐Ÿ†Ž. , โšซ๏ธ ๐Ÿšซ ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ… ๐ŸŒ˜ 1๏ธโƒฃ "๐Ÿฆฒ" ๐Ÿ‘ˆ ๐Ÿšš ๐ŸŽฏ ๐Ÿ†Ž. - -๐Ÿ›ฃ ๐Ÿ“ฃ ๐Ÿ‘ ๐Ÿฅ‰, โš™๏ธ ๐Ÿ”ข ๐Ÿ“ฃ ๐ŸŽ ๐Ÿฅ‰ (โ†ฉ๏ธ โš™๏ธ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿฅ‰ โ–ถ๏ธ๏ธ ๐Ÿ”› ๐Ÿ” ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿต ๐Ÿ”—). ๐Ÿ‘‰ ๐Ÿ” โ” โœณ ๐Ÿ”จ โšซ๏ธ ๐ŸŒ˜ โ” ๐Ÿบ (& ๐Ÿ’ƒ) ๐Ÿ”จ โšซ๏ธ. โšซ๏ธ ๐ŸŽ ๐Ÿ“Ÿ ๐Ÿ‘œ ๐Ÿ‘ˆ ๐Ÿ“ถ ๐Ÿ˜† ๐Ÿ”—. - -/// check | ๐Ÿ˜ฎ **FastAPI** - -๐Ÿ”ฌ โž• ๐Ÿ”ฌ ๐Ÿ’ฝ ๐Ÿ†Ž โš™๏ธ "๐Ÿ”ข" ๐Ÿ’ฒ ๐Ÿท ๐Ÿ”ข. ๐Ÿ‘‰ ๐Ÿ“‰ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ, & โšซ๏ธ ๐Ÿšซ ๐Ÿ’ช Pydantic โญ. - -๐Ÿ‘‰ ๐Ÿค™ ๐Ÿ˜ฎ ๐Ÿ› ๏ธ ๐Ÿ• Pydantic, ๐Ÿ•โ€๐Ÿฆบ ๐ŸŽ ๐Ÿ”ฌ ๐Ÿ“„ ๐Ÿ‘— (๐ŸŒ ๐Ÿ‘‰ ๐Ÿ› ๏ธ ๐Ÿ”œ โช ๐Ÿ’ช Pydantic). - -/// - -### ๐Ÿค— - -๐Ÿค— ๐Ÿ• ๐Ÿฅ‡ ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ ๐Ÿ“„ ๐Ÿ› ๏ธ ๐Ÿ”ข ๐Ÿ†Ž โš™๏ธ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘. ๐Ÿ‘‰ ๐Ÿ‘‘ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ˜ฎ ๐ŸŽ ๐Ÿงฐ ๐ŸŽ. - -โšซ๏ธ โš™๏ธ ๐Ÿ›ƒ ๐Ÿ†Ž ๐Ÿšฎ ๐Ÿ“„ โ†ฉ๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž, โœ‹๏ธ โšซ๏ธ ๐Ÿฆ ๐Ÿ” โฉ. - -โšซ๏ธ ๐Ÿ• ๐Ÿฅ‡ ๐Ÿ› ๏ธ ๐Ÿ— ๐Ÿ›ƒ ๐Ÿ”— ๐Ÿ“ฃ ๐ŸŽ‚ ๐Ÿ› ๏ธ ๐ŸŽป. - -โšซ๏ธ ๐Ÿšซ โš“๏ธ ๐Ÿ”› ๐Ÿฉ ๐Ÿ’– ๐Ÿ—„ & ๐ŸŽป ๐Ÿ”—. โšซ๏ธ ๐Ÿšซ๐Ÿ”œ ๐ŸŽฏ ๐Ÿ› ๏ธ โšซ๏ธ โฎ๏ธ ๐ŸŽ ๐Ÿงฐ, ๐Ÿ’– ๐Ÿฆ ๐ŸŽš. โœ‹๏ธ ๐Ÿ”„, โšซ๏ธ ๐Ÿ“ถ ๐Ÿ’ก ๐Ÿ’ญ. - -โšซ๏ธ โœ”๏ธ ๐Ÿ˜Œ, โญ โš’: โš™๏ธ ๐ŸŽ ๐Ÿ› ๏ธ, โšซ๏ธ ๐Ÿ’ช โœ ๐Ÿ”— & ๐Ÿ‡ณ๐Ÿ‡จ. - -โšซ๏ธ โš“๏ธ ๐Ÿ”› โฎ๏ธ ๐Ÿฉ ๐Ÿ” ๐Ÿ ๐Ÿ•ธ ๐Ÿ› ๏ธ (๐Ÿ‡จ๐Ÿ‡ป), โšซ๏ธ ๐Ÿ’ช ๐Ÿšซ ๐Ÿต *๏ธโƒฃ & ๐ŸŽ ๐Ÿ‘œ, ๐Ÿ‘ โšซ๏ธ โœ”๏ธ โ†• ๐ŸŽญ ๐Ÿ’โ€โ™‚๏ธ. - -/// info - -๐Ÿค— โœ โœก ๐Ÿ—„, ๐ŸŽ ๐Ÿ‘ผ `isort`, ๐Ÿ‘‘ ๐Ÿงฐ ๐Ÿ” ๐Ÿ˜‡ ๐Ÿ—„ ๐Ÿ ๐Ÿ“. - -/// - -/// check | ๐Ÿ’ญ ๐Ÿ˜ฎ **FastAPI** - -๐Ÿค— ๐Ÿ˜ฎ ๐Ÿ• APIStar, & 1๏ธโƒฃ ๐Ÿงฐ ๐Ÿ‘ค ๐Ÿ”Ž ๐Ÿ† ๐Ÿ‘, ๐ŸŒŸ APIStar. - -๐Ÿค— โ„น ๐Ÿ˜ **FastAPI** โš™๏ธ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘ ๐Ÿ“ฃ ๐Ÿ”ข, & ๐Ÿ— ๐Ÿ”— โš– ๐Ÿ› ๏ธ ๐Ÿ”. - -๐Ÿค— ๐Ÿ˜ฎ **FastAPI** ๐Ÿ“ฃ `response` ๐Ÿ”ข ๐Ÿ”ข โš’ ๐ŸŽš & ๐Ÿช. - -/// - -### APIStar (<= 0๏ธโƒฃ.5๏ธโƒฃ) - -โ–ถ๏ธ๏ธ โญ ๐Ÿค” ๐Ÿ— **FastAPI** ๐Ÿ‘ค ๐Ÿ”Ž **APIStar** ๐Ÿ’ฝ. โšซ๏ธ โœ”๏ธ ๐ŸŒ– ๐ŸŒ ๐Ÿ‘ค ๐Ÿ‘€ & โœ”๏ธ ๐Ÿ‘‘ ๐Ÿ”ง. - -โšซ๏ธ ๐Ÿ• ๐Ÿฅ‡ ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘ ๐Ÿ“ฃ ๐Ÿ”ข & ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ‘ค โฑ ๐Ÿ‘€ (โญ NestJS & โ™จ). ๐Ÿ‘ค ๐Ÿ”Ž โšซ๏ธ ๐ŸŒ… โš–๏ธ ๐ŸŒ˜ ๐ŸŽ ๐Ÿ•ฐ ๐Ÿค—. โœ‹๏ธ APIStar โš™๏ธ ๐Ÿ—„ ๐Ÿฉ. - -โšซ๏ธ โœ”๏ธ ๐Ÿง ๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿ’ฝ ๐Ÿ› ๏ธ & ๐Ÿ—„ ๐Ÿ”— โšก โš“๏ธ ๐Ÿ”› ๐ŸŽ ๐Ÿ†Ž ๐Ÿ”‘ ๐Ÿ“š ๐Ÿฅ‰. - -๐Ÿ’ช ๐Ÿ”— ๐Ÿ”‘ ๐Ÿšซ โš™๏ธ ๐ŸŽ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘ ๐Ÿ’– Pydantic, โšซ๏ธ ๐Ÿ– ๐ŸŒ… ๐ŸŽ ๐Ÿญ,, ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿšซ๐Ÿ”œ ๐Ÿ‘, โœ‹๏ธ, APIStar ๐Ÿ† ๐Ÿ’ช ๐ŸŽ›. - -โšซ๏ธ โœ”๏ธ ๐Ÿ† ๐ŸŽญ ๐Ÿ“‡ ๐Ÿ•ฐ (๐Ÿ•ด ๐Ÿ’ฅ ๐Ÿ’ƒ). - -๐Ÿฅ‡, โšซ๏ธ ๐Ÿšซ โœ”๏ธ ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿงพ ๐Ÿ•ธ ๐ŸŽš, โœ‹๏ธ ๐Ÿ‘ค ๐Ÿ’ญ ๐Ÿ‘ค ๐Ÿ’ช ๐Ÿšฎ ๐Ÿฆ ๐ŸŽš โšซ๏ธ. - -โšซ๏ธ โœ”๏ธ ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ. โšซ๏ธ โœ” ๐Ÿค-ยฎ ๐Ÿฆฒ, ๐ŸŽ ๐Ÿงฐ ๐Ÿ”ฌ ๐Ÿ”›. โœ‹๏ธ, โšซ๏ธ ๐Ÿ‘‘ โš’. - -๐Ÿ‘ค ๐Ÿ™… ๐Ÿ’ช โš™๏ธ โšซ๏ธ ๐ŸŒ• ๐Ÿ—, โšซ๏ธ ๐Ÿšซ โœ”๏ธ ๐Ÿ’‚โ€โ™‚ ๐Ÿ› ๏ธ,, ๐Ÿ‘ค ๐Ÿšซ ๐Ÿšซ โŽ ๐ŸŒ โš’ ๐Ÿ‘ค โœ”๏ธ โฎ๏ธ ๐ŸŒ•-๐Ÿ“š ๐Ÿš‚ โš“๏ธ ๐Ÿ”› ๐Ÿบ-Apispec. ๐Ÿ‘ค โœ”๏ธ ๐Ÿ‘‡ ๐Ÿ“ˆ ๐Ÿ— โœ ๐Ÿšฒ ๐Ÿ“จ โŽ ๐Ÿ‘ˆ ๐Ÿ› ๏ธ. - -โœ‹๏ธ โคด๏ธ, ๐Ÿ— ๐ŸŽฏ ๐Ÿ”€. - -โšซ๏ธ ๐Ÿ™…โ€โ™‚ ๐Ÿ“ ๐Ÿ› ๏ธ ๐Ÿ•ธ ๐Ÿ› ๏ธ, ๐Ÿ‘ผ ๐Ÿ’ช ๐ŸŽฏ ๐Ÿ”› ๐Ÿ’ƒ. - -๐Ÿ”œ APIStar โš’ ๐Ÿงฐ โœ” ๐Ÿ—„ ๐Ÿ”ง, ๐Ÿšซ ๐Ÿ•ธ ๐Ÿ› ๏ธ. - -/// info - -APIStar โœ โœก ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ›. ๐ŸŽ ๐Ÿ‘จ ๐Ÿ‘ˆ โœ: - -* โœณ ๐ŸŽ‚ ๐Ÿ› ๏ธ -* ๐Ÿ’ƒ (โ” **FastAPI** โš“๏ธ) -* Uvicorn (โš™๏ธ ๐Ÿ’ƒ & **FastAPI**) - -/// - -/// check | ๐Ÿ˜ฎ **FastAPI** - -๐Ÿ”€. - -๐Ÿ’ญ ๐Ÿ“ฃ ๐Ÿ’— ๐Ÿ‘œ (๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿ› ๏ธ & ๐Ÿงพ) โฎ๏ธ ๐ŸŽ ๐Ÿ ๐Ÿ†Ž, ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿ•ฐ ๐Ÿšš ๐Ÿ‘‘ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ, ๐Ÿ•ณ ๐Ÿ‘ค ๐Ÿค” ๐Ÿ’Ž ๐Ÿ’ญ. - - & โฎ๏ธ ๐Ÿ”Ž ๐Ÿ“ ๐Ÿ•ฐ ๐ŸŽ ๐Ÿ› ๏ธ & ๐Ÿ”ฌ ๐Ÿ“š ๐ŸŽ ๐ŸŽ›, APIStar ๐Ÿ† ๐ŸŽ› ๐Ÿ’ช. - -โคด๏ธ APIStar โ›”๏ธ ๐Ÿ”€ ๐Ÿ’ฝ & ๐Ÿ’ƒ โœ, & ๐Ÿ†• ๐Ÿ‘ป ๐Ÿ› โœ… โš™๏ธ. ๐Ÿ‘ˆ ๐Ÿ ๐ŸŒˆ ๐Ÿ— **FastAPI**. - -๐Ÿ‘ค ๐Ÿค” **FastAPI** "๐Ÿ› ๐Ÿ‘จโ€๐Ÿ’ผ" APIStar, โช ๐Ÿ“‰ & ๐Ÿ“ˆ โš’, โŒจ โš™๏ธ, & ๐ŸŽ ๐Ÿ•, โš“๏ธ ๐Ÿ”› ๐Ÿซ โšช๏ธโžก๏ธ ๐ŸŒ ๐Ÿ‘‰ โฎ๏ธ ๐Ÿงฐ. - -/// - -## โš™๏ธ **FastAPI** - -### Pydantic - -Pydantic ๐Ÿ—ƒ ๐Ÿ”ฌ ๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿ› ๏ธ & ๐Ÿงพ (โš™๏ธ ๐ŸŽป ๐Ÿ”—) โš“๏ธ ๐Ÿ”› ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘. - -๐Ÿ‘ˆ โš’ โšซ๏ธ ๐Ÿ“ถ ๐Ÿ‹๏ธ. - -โšซ๏ธ โญ ๐Ÿญ. ๐Ÿ‘ โšซ๏ธ โฉ ๐ŸŒ˜ ๐Ÿญ ๐Ÿ“‡. & โšซ๏ธ โš“๏ธ ๐Ÿ”› ๐ŸŽ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘, ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘‘. - -/// check | **FastAPI** โš™๏ธ โšซ๏ธ - -๐Ÿต ๐ŸŒ ๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿ’ฝ ๐Ÿ› ๏ธ & ๐Ÿง ๐Ÿท ๐Ÿงพ (โš“๏ธ ๐Ÿ”› ๐ŸŽป ๐Ÿ”—). - -**FastAPI** โคด๏ธ โœŠ ๐Ÿ‘ˆ ๐ŸŽป ๐Ÿ”— ๐Ÿ’ฝ & ๐Ÿšฎ โšซ๏ธ ๐Ÿ—„, โ†–๏ธ โšช๏ธโžก๏ธ ๐ŸŒ ๐ŸŽ ๐Ÿ‘œ โšซ๏ธ ๐Ÿ”จ. - -/// - -### ๐Ÿ’ƒ - -๐Ÿ’ƒ ๐Ÿ’ฟ ๐Ÿ”ซ ๐Ÿ› ๏ธ/๐Ÿงฐ, โ” ๐Ÿ’ฏ ๐Ÿ— โ†•-๐ŸŽญ โœณ ๐Ÿ•โ€๐Ÿฆบ. - -โšซ๏ธ ๐Ÿ“ถ ๐Ÿ™… & ๐Ÿ‹๏ธ. โšซ๏ธ ๐Ÿ”ง ๐Ÿ’ช ๐Ÿง, & โœ”๏ธ ๐Ÿ”ง ๐Ÿฆฒ. - -โšซ๏ธ โœ”๏ธ: - -* ๐Ÿค™ ๐ŸŽ† ๐ŸŽญ. -* *๏ธโƒฃ ๐Ÿ•โ€๐Ÿฆบ. -* -๐Ÿ› ๏ธ ๐Ÿ–ฅ ๐Ÿ“‹. -* ๐Ÿ•ด & ๐Ÿคซ ๐ŸŽ‰. -* ๐Ÿ’ฏ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ— ๐Ÿ”› ๐Ÿ‡ธ๐Ÿ‡ฒ. -* โšœ, ๐Ÿ—œ, ๐ŸŽป ๐Ÿ“, ๐ŸŽ ๐Ÿ“จ. -* ๐ŸŽ‰ & ๐Ÿช ๐Ÿ•โ€๐Ÿฆบ. -* 1๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ’ฏ ๐Ÿ’ฐ. -* 1๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ†Ž โœ โœ. -* ๐Ÿ‘ฉโ€โคโ€๐Ÿ‘จ ๐Ÿ‹๏ธ ๐Ÿ”—. - -๐Ÿ’ƒ โณ โฉ ๐Ÿ ๐Ÿ› ๏ธ ๐Ÿ’ฏ. ๐Ÿ•ด ๐Ÿ’ฅ Uvicorn, โ” ๐Ÿšซ ๐Ÿ› ๏ธ, โœ‹๏ธ ๐Ÿ’ฝ. - -๐Ÿ’ƒ ๐Ÿšš ๐ŸŒ ๐Ÿ”ฐ ๐Ÿ•ธ ๐Ÿ•ธ ๐Ÿ› ๏ธ. - -โœ‹๏ธ โšซ๏ธ ๐Ÿšซ ๐Ÿšš ๐Ÿง ๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿ› ๏ธ โš–๏ธ ๐Ÿงพ. - -๐Ÿ‘ˆ 1๏ธโƒฃ ๐Ÿ‘‘ ๐Ÿ‘œ ๐Ÿ‘ˆ **FastAPI** ๐Ÿšฎ ๐Ÿ”› ๐Ÿ”, ๐ŸŒ โš“๏ธ ๐Ÿ”› ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘ (โš™๏ธ Pydantic). ๐Ÿ‘ˆ, โž• ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ, ๐Ÿ’‚โ€โ™‚ ๐Ÿš™, ๐Ÿ—„ ๐Ÿ”— โšก, โ™’๏ธ. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ”ซ ๐Ÿ†• "๐Ÿฉ" โž– ๐Ÿ› ๏ธ โœณ ๐Ÿš ๐Ÿ‰ ๐Ÿ‘จโ€๐ŸŽ“. โšซ๏ธ ๐Ÿšซ "๐Ÿ ๐Ÿฉ" (๐Ÿ‡ฉ๐Ÿ‡ฌ), ๐Ÿ‘ ๐Ÿ‘ซ ๐Ÿ› ๏ธ ๐Ÿ”จ ๐Ÿ‘ˆ. - -๐Ÿ‘, โšซ๏ธ โช โž– โš™๏ธ "๐Ÿฉ" ๐Ÿ“š ๐Ÿงฐ. ๐Ÿ‘‰ ๐Ÿ“‰ ๐Ÿ“‰ ๐Ÿ› ๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽ› Uvicorn ๐Ÿ™† ๐ŸŽ ๐Ÿ”ซ ๐Ÿ’ฝ (๐Ÿ’– ๐Ÿ‘ธ โš–๏ธ Hypercorn), โš–๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ”ซ ๐Ÿ”— ๐Ÿงฐ, ๐Ÿ’– `python-socketio`. - -/// - -/// check | **FastAPI** โš™๏ธ โšซ๏ธ - -๐Ÿต ๐ŸŒ ๐Ÿš ๐Ÿ•ธ ๐Ÿ•. โŽ โš’ ๐Ÿ”› ๐Ÿ”. - -๐ŸŽ“ `FastAPI` โšซ๏ธ ๐Ÿ˜– ๐Ÿ”— โšช๏ธโžก๏ธ ๐ŸŽ“ `Starlette`. - -, ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โฎ๏ธ ๐Ÿ’ƒ, ๐Ÿ‘† ๐Ÿ’ช โšซ๏ธ ๐Ÿ”— โฎ๏ธ **FastAPI**, โšซ๏ธ ๐ŸŒ– ๐Ÿ’ƒ ๐Ÿ”› ๐Ÿ’Š. - -/// - -### Uvicorn - -Uvicorn ๐ŸŒฉ-โฉ ๐Ÿ”ซ ๐Ÿ’ฝ, ๐Ÿ— ๐Ÿ”› uvloop & httptool. - -โšซ๏ธ ๐Ÿšซ ๐Ÿ•ธ ๐Ÿ› ๏ธ, โœ‹๏ธ ๐Ÿ’ฝ. ๐Ÿ–ผ, โšซ๏ธ ๐Ÿšซ ๐Ÿšš ๐Ÿงฐ ๐Ÿ•น โžก. ๐Ÿ‘ˆ ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿ’– ๐Ÿ’ƒ (โš–๏ธ **FastAPI**) ๐Ÿ”œ ๐Ÿšš ๐Ÿ”› ๐Ÿ”. - -โšซ๏ธ ๐Ÿ‘ ๐Ÿ’ฝ ๐Ÿ’ƒ & **FastAPI**. - -/// check | **FastAPI** ๐Ÿ‘ โšซ๏ธ - -๐Ÿ‘‘ ๐Ÿ•ธ ๐Ÿ’ฝ ๐Ÿƒ **FastAPI** ๐Ÿˆธ. - -๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ€ โšซ๏ธ โฎ๏ธ ๐Ÿ, โœ”๏ธ ๐Ÿ” ๐Ÿ‘-๐Ÿ› ๏ธ ๐Ÿ’ฝ. - -โœ… ๐ŸŒ… โ„น [๐Ÿ› ๏ธ](deployment/index.md){.internal-link target=_blank} ๐Ÿ“„. - -/// - -## ๐Ÿ“‡ & ๐Ÿš… - -๐Ÿค”, ๐Ÿ”ฌ, & ๐Ÿ‘€ ๐Ÿ”บ ๐Ÿ–– Uvicorn, ๐Ÿ’ƒ & FastAPI, โœ… ๐Ÿ“„ ๐Ÿ”ƒ [๐Ÿ“‡](benchmarks.md){.internal-link target=_blank}. diff --git a/docs/em/docs/async.md b/docs/em/docs/async.md deleted file mode 100644 index cde778b0f..000000000 --- a/docs/em/docs/async.md +++ /dev/null @@ -1,442 +0,0 @@ -# ๐Ÿ› ๏ธ & ๐Ÿ” / โŒ› - -โ„น ๐Ÿ”ƒ `async def` โ• *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* & ๐Ÿ–ฅ ๐Ÿ”ƒ ๐Ÿ” ๐Ÿ“Ÿ, ๐Ÿ› ๏ธ, & ๐Ÿ”. - -## ๐Ÿƒ โ“ - -๐Ÿ†‘;๐Ÿ‘ฉโ€โš•๏ธ: - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿฅ‰ ๐Ÿฅณ ๐Ÿ—ƒ ๐Ÿ‘ˆ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿค™ ๐Ÿ‘ซ โฎ๏ธ `await`, ๐Ÿ’–: - -```Python -results = await some_library() -``` - -โคด๏ธ, ๐Ÿ“ฃ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* โฎ๏ธ `async def` ๐Ÿ’–: - -```Python hl_lines="2" -@app.get('/') -async def read_results(): - results = await some_library() - return results -``` - -/// note - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ•ด โš™๏ธ `await` ๐Ÿ”˜ ๐Ÿ”ข โœ โฎ๏ธ `async def`. - -/// - ---- - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿฅ‰ ๐Ÿฅณ ๐Ÿ—ƒ ๐Ÿ‘ˆ ๐Ÿ”— โฎ๏ธ ๐Ÿ•ณ (๐Ÿ’ฝ, ๐Ÿ› ๏ธ, ๐Ÿ“ โš™๏ธ, โ™’๏ธ.) & ๐Ÿšซ โœ”๏ธ ๐Ÿ•โ€๐Ÿฆบ โš™๏ธ `await`, (๐Ÿ‘‰ โณ ๐Ÿ’ผ ๐ŸŒ… ๐Ÿ’ฝ ๐Ÿ—ƒ), โคด๏ธ ๐Ÿ“ฃ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ›Ž, โฎ๏ธ `def`, ๐Ÿ’–: - -```Python hl_lines="2" -@app.get('/') -def results(): - results = some_library() - return results -``` - ---- - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿˆธ (๐Ÿ˜ซ) ๐Ÿšซ โœ”๏ธ ๐Ÿ”— โฎ๏ธ ๐Ÿ•ณ ๐Ÿ™† & โŒ› โšซ๏ธ ๐Ÿ“จ, โš™๏ธ `async def`. - ---- - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ญ, โš™๏ธ ๐Ÿ˜ `def`. - ---- - -**๐Ÿ—’**: ๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ€ `def` & `async def` ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐ŸŒ… ๐Ÿ‘† ๐Ÿ’ช & ๐Ÿ”ฌ ๐Ÿ”  1๏ธโƒฃ โš™๏ธ ๐Ÿ† ๐ŸŽ› ๐Ÿ‘†. FastAPI ๐Ÿ”œ โ–ถ๏ธ๏ธ ๐Ÿ‘œ โฎ๏ธ ๐Ÿ‘ซ. - -๐Ÿ˜†, ๐Ÿ™† ๐Ÿ’ผ ๐Ÿ”›, FastAPI ๐Ÿ”œ ๐Ÿ‘ท ๐Ÿ” & ๐Ÿ“ถ โฉ. - -โœ‹๏ธ ๐Ÿ“„ ๐Ÿ“ถ ๐Ÿ”›, โšซ๏ธ ๐Ÿ”œ ๐Ÿ’ช ๐ŸŽญ ๐Ÿ› ๏ธ. - -## ๐Ÿ“ก โ„น - -๐Ÿ› โฌ ๐Ÿ โœ”๏ธ ๐Ÿ•โ€๐Ÿฆบ **"๐Ÿ” ๐Ÿ“Ÿ"** โš™๏ธ ๐Ÿ•ณ ๐Ÿค™ **"๐Ÿ”"**, โฎ๏ธ **`async` & `await`** โ•. - -โžก๏ธ ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ”ค ๐Ÿ• ๐Ÿ“„ ๐Ÿ”›: - -* **๐Ÿ” ๐Ÿ“Ÿ** -* **`async` & `await`** -* **๐Ÿ”** - -## ๐Ÿ” ๐Ÿ“Ÿ - -๐Ÿ” ๐Ÿ“Ÿ โ›“ ๐Ÿ‘ˆ ๐Ÿ‡ช๐Ÿ‡ธ ๐Ÿ‘ถ โœ”๏ธ ๐ŸŒŒ ๐Ÿ’ฌ ๐Ÿ’ป / ๐Ÿ“‹ ๐Ÿ‘ถ ๐Ÿ‘ˆ โ˜ ๐Ÿ“Ÿ, โšซ๏ธ ๐Ÿ‘ถ ๐Ÿ”œ โœ”๏ธ โŒ› *๐Ÿ•ณ ๐Ÿ™†* ๐Ÿ ๐Ÿ‘ฑ ๐Ÿ™†. โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘ˆ *๐Ÿ•ณ ๐Ÿ™†* ๐Ÿค™ "๐ŸŒ-๐Ÿ“" ๐Ÿ‘ถ. - -, โฎ๏ธ ๐Ÿ‘ˆ ๐Ÿ•ฐ, ๐Ÿ’ป ๐Ÿ’ช ๐Ÿšถ & ๐ŸŽ ๐Ÿ‘ท, โช "๐ŸŒ-๐Ÿ“" ๐Ÿ‘ถ ๐Ÿ. - -โคด๏ธ ๐Ÿ’ป / ๐Ÿ“‹ ๐Ÿ‘ถ ๐Ÿ”œ ๐Ÿ‘Ÿ ๐Ÿ”™ ๐Ÿ”  ๐Ÿ•ฐ โšซ๏ธ โœ”๏ธ ๐Ÿคž โ†ฉ๏ธ โšซ๏ธ โŒ› ๐Ÿ”„, โš–๏ธ ๐Ÿ•โ” โšซ๏ธ ๐Ÿ‘ถ ๐Ÿ ๐ŸŒ ๐Ÿ‘ท โšซ๏ธ โœ”๏ธ ๐Ÿ‘ˆ โ˜. & โšซ๏ธ ๐Ÿ‘ถ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿšฅ ๐Ÿ™† ๐Ÿ“‹ โšซ๏ธ โŒ› โœ”๏ธ โช ๐Ÿ, ๐Ÿคธ โšซ๏ธโ” โšซ๏ธ โœ”๏ธ. - -โญ, โšซ๏ธ ๐Ÿ‘ถ โœŠ ๐Ÿฅ‡ ๐Ÿ“‹ ๐Ÿ (โžก๏ธ ๐Ÿ’ฌ, ๐Ÿ‘† "๐ŸŒ-๐Ÿ“" ๐Ÿ‘ถ) & ๐Ÿ˜ฃ โšซ๏ธโ” โšซ๏ธ โœ”๏ธ โฎ๏ธ โšซ๏ธ. - -๐Ÿ‘ˆ "โŒ› ๐Ÿ•ณ ๐Ÿ™†" ๐Ÿ›Ž ๐Ÿ”— ๐Ÿ‘ค/๐Ÿ…พ ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ“ถ "๐ŸŒ" (๐Ÿ”ฌ ๐Ÿš… ๐Ÿ•น & ๐Ÿ’พ ๐Ÿ’พ), ๐Ÿ’– โŒ›: - -* ๐Ÿ“Š โšช๏ธโžก๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“จ ๐Ÿ”˜ ๐Ÿ•ธ -* ๐Ÿ“Š ๐Ÿ“จ ๐Ÿ‘† ๐Ÿ“‹ ๐Ÿ“จ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”˜ ๐Ÿ•ธ -* ๐ŸŽš ๐Ÿ“ ๐Ÿ’พ โœ โš™๏ธ & ๐Ÿค ๐Ÿ‘† ๐Ÿ“‹ -* ๐ŸŽš ๐Ÿ‘† ๐Ÿ“‹ ๐Ÿค โš™๏ธ โœ ๐Ÿ’พ -* ๐Ÿ›ฐ ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ -* ๐Ÿ’ฝ ๐Ÿ› ๏ธ ๐Ÿ -* ๐Ÿ’ฝ ๐Ÿ”ข ๐Ÿ“จ ๐Ÿ -* โ™’๏ธ. - -๐Ÿ› ๏ธ ๐Ÿ•ฐ ๐Ÿด โœด๏ธ โŒ› ๐Ÿ‘ค/๐Ÿ…พ ๐Ÿ› ๏ธ, ๐Ÿ‘ซ ๐Ÿค™ ๐Ÿ‘ซ "๐Ÿ‘ค/๐Ÿ…พ ๐Ÿ”—" ๐Ÿ› ๏ธ. - -โšซ๏ธ ๐Ÿค™ "๐Ÿ”" โ†ฉ๏ธ ๐Ÿ’ป / ๐Ÿ“‹ ๐Ÿšซ โœ”๏ธ "๐Ÿ”" โฎ๏ธ ๐ŸŒ ๐Ÿ“‹, โŒ› โ˜‘ ๐Ÿ™ ๐Ÿ‘ˆ ๐Ÿ“‹ ๐Ÿ, โช ๐Ÿ”จ ๐Ÿ•ณ, ๐Ÿ’ช โœŠ ๐Ÿ“‹ ๐Ÿ & ๐Ÿ˜ฃ ๐Ÿ‘ท. - -โ†ฉ๏ธ ๐Ÿ‘ˆ, ๐Ÿ’†โ€โ™‚ "๐Ÿ”" โš™๏ธ, ๐Ÿ• ๐Ÿ, ๐Ÿ“‹ ๐Ÿ’ช โŒ› โธ ๐Ÿฅ ๐Ÿ‘„ (โฒ) ๐Ÿ’ป / ๐Ÿ“‹ ๐Ÿ โšซ๏ธโ” โšซ๏ธ ๐Ÿšถ, & โคด๏ธ ๐Ÿ‘Ÿ ๐Ÿ”™ โœŠ ๐Ÿ & ๐Ÿ˜ฃ ๐Ÿ‘ท โฎ๏ธ ๐Ÿ‘ซ. - -"๐Ÿ”" (๐Ÿ‘ฝ "๐Ÿ”") ๐Ÿ‘ซ ๐Ÿ›Ž โš™๏ธ โš– "๐Ÿ”", โ†ฉ๏ธ ๐Ÿ’ป / ๐Ÿ“‹ โฉ ๐ŸŒ ๐Ÿ“ถ ๐Ÿ” โญ ๐Ÿ”€ ๐ŸŽ ๐Ÿ“‹, ๐Ÿšฅ ๐Ÿ‘ˆ ๐Ÿ” ๐Ÿ”Œ โŒ›. - -### ๐Ÿ› ๏ธ & ๐Ÿ” - -๐Ÿ‘‰ ๐Ÿ’ญ **๐Ÿ”** ๐Ÿ“Ÿ ๐Ÿ”ฌ ๐Ÿ”› ๐Ÿ•ฃ ๐Ÿค™ **"๐Ÿ› ๏ธ"**. โšซ๏ธ ๐ŸŽ โšช๏ธโžก๏ธ **"๐Ÿ”"**. - -**๐Ÿ› ๏ธ** & **๐Ÿ”** ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ”— "๐ŸŽ ๐Ÿ‘œ ๐Ÿ˜ฅ ๐ŸŒ… โš–๏ธ ๐ŸŒ˜ ๐ŸŽ ๐Ÿ•ฐ". - -โœ‹๏ธ โ„น ๐Ÿ–– *๐Ÿ› ๏ธ* & *๐Ÿ”* ๐ŸŽ. - -๐Ÿ‘€ ๐Ÿ”บ, ๐ŸŒˆ ๐Ÿ“„ ๐Ÿ“– ๐Ÿ”ƒ ๐Ÿ”: - -### ๐Ÿ› ๏ธ ๐Ÿ” - -๐Ÿ‘† ๐Ÿšถ โฎ๏ธ ๐Ÿ‘† ๐Ÿฅฐ ๐Ÿคš โฉ ๐Ÿฅ•, ๐Ÿ‘† ๐Ÿง โธ โช ๐Ÿง โœŠ โœ” โšช๏ธโžก๏ธ ๐Ÿ‘ซ๐Ÿ‘ซ ๐Ÿšช ๐Ÿ‘†. ๐Ÿ‘ถ - - - -โคด๏ธ โšซ๏ธ ๐Ÿ‘† ๐Ÿ”„, ๐Ÿ‘† ๐Ÿฅ‰ ๐Ÿ‘† โœ” 2๏ธโƒฃ ๐Ÿ“ถ ๐ŸŽ€ ๐Ÿ” ๐Ÿ‘† ๐Ÿฅฐ & ๐Ÿ‘†. ๐Ÿ‘ถ ๐Ÿ‘ถ - - - -๐Ÿง ๐Ÿ’ฌ ๐Ÿ•ณ ๐Ÿณ ๐Ÿ‘จโ€๐Ÿณ ๐Ÿ‘ซ ๐Ÿ’ญ ๐Ÿ‘ซ โœ”๏ธ ๐Ÿ— ๐Ÿ‘† ๐Ÿ” (โœ‹๏ธ ๐Ÿ‘ซ โณ ๐Ÿ— ๐Ÿ• โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป). - - - -๐Ÿ‘† ๐Ÿ’ธ. ๐Ÿ‘ถ - -๐Ÿง ๐Ÿค ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ”„. - - - -โช ๐Ÿ‘† โŒ›, ๐Ÿ‘† ๐Ÿšถ โฎ๏ธ ๐Ÿ‘† ๐Ÿฅฐ & โš’ ๐Ÿ“, ๐Ÿ‘† ๐ŸงŽ & ๐Ÿ’ฌ โฎ๏ธ ๐Ÿ‘† ๐Ÿฅฐ ๐Ÿ“ ๐Ÿ•ฐ (๐Ÿ‘† ๐Ÿ” ๐Ÿ“ถ ๐ŸŽ€ & โœŠ ๐Ÿ•ฐ ๐Ÿ—). - -๐Ÿ‘† ๐Ÿ– ๐Ÿ“ โฎ๏ธ ๐Ÿ‘† ๐Ÿฅฐ, โช ๐Ÿ‘† โŒ› ๐Ÿ”, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ธ ๐Ÿ‘ˆ ๐Ÿ•ฐ ๐Ÿ˜ฎ โ” ๐Ÿ‘Œ, ๐Ÿจ & ๐Ÿ™ƒ ๐Ÿ‘† ๐Ÿฅฐ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ. - - - -โช โŒ› & ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿฅฐ, โšช๏ธโžก๏ธ ๐Ÿ•ฐ ๐Ÿ•ฐ, ๐Ÿ‘† โœ… ๐Ÿ”ข ๐Ÿ–ฅ ๐Ÿ”› โฒ ๐Ÿ‘€ ๐Ÿšฅ โšซ๏ธ ๐Ÿ‘† ๐Ÿ”„ โช. - -โคด๏ธ โ˜, โšซ๏ธ ๐Ÿ˜’ ๐Ÿ‘† ๐Ÿ”„. ๐Ÿ‘† ๐Ÿšถ โฒ, ๐Ÿคš ๐Ÿ‘† ๐Ÿ” & ๐Ÿ‘Ÿ ๐Ÿ”™ ๐Ÿ“. - - - -๐Ÿ‘† & ๐Ÿ‘† ๐Ÿฅฐ ๐Ÿด ๐Ÿ” & โœ”๏ธ ๐Ÿ‘Œ ๐Ÿ•ฐ. ๐Ÿ‘ถ - - - -/// info - -๐ŸŒน ๐Ÿ–ผ ๐Ÿ‘ฏ ๐Ÿ. ๐Ÿ‘ถ - -/// - ---- - -๐ŸŒˆ ๐Ÿ‘† ๐Ÿ’ป / ๐Ÿ“‹ ๐Ÿ‘ถ ๐Ÿ‘ˆ ๐Ÿ“–. - -โช ๐Ÿ‘† โธ, ๐Ÿ‘† โ›ฝ ๐Ÿ‘ถ, โŒ› ๐Ÿ‘† ๐Ÿ”„, ๐Ÿšซ ๐Ÿ”จ ๐Ÿ•ณ ๐Ÿ“ถ "๐Ÿ˜Œ". โœ‹๏ธ โธ โฉ โ†ฉ๏ธ ๐Ÿง ๐Ÿ•ด โœŠ โœ” (๐Ÿšซ ๐Ÿ— ๐Ÿ‘ซ), ๐Ÿ‘ˆ ๐Ÿ‘Œ. - -โคด๏ธ, ๐Ÿ•โ” โšซ๏ธ ๐Ÿ‘† ๐Ÿ”„, ๐Ÿ‘† โ˜‘ "๐Ÿ˜Œ" ๐Ÿ‘ท, ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿฃ, ๐Ÿ’ญ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ’š, ๐Ÿคš ๐Ÿ‘† ๐Ÿฅฐ โš’, ๐Ÿ’ธ, โœ… ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿค โ˜‘ ๐Ÿ’ต โš–๏ธ ๐Ÿ’ณ, โœ… ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿˆš โ˜‘, โœ… ๐Ÿ‘ˆ โœ” โœ”๏ธ โ˜‘ ๐Ÿฌ, โ™’๏ธ. - -โœ‹๏ธ โคด๏ธ, โœ‹๏ธ ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿ‘† ๐Ÿ”, ๐Ÿ‘† ๐Ÿ‘ท โฎ๏ธ ๐Ÿง "๐Ÿ”› โธ" โธ, โ†ฉ๏ธ ๐Ÿ‘† โœ”๏ธ โŒ› ๐Ÿ‘ถ ๐Ÿ‘† ๐Ÿ” ๐Ÿ”œ. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿšถ โ†–๏ธ โšช๏ธโžก๏ธ โฒ & ๐ŸงŽ ๐Ÿ“ โฎ๏ธ ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ”„, ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽ› ๐Ÿ‘ถ ๐Ÿ‘† ๐Ÿ™‹ ๐Ÿ‘† ๐Ÿฅฐ, & "๐Ÿ‘ท" ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ”› ๐Ÿ‘ˆ. โคด๏ธ ๐Ÿ‘† ๐Ÿ”„ ๐Ÿ”จ ๐Ÿ•ณ ๐Ÿ“ถ "๐Ÿ˜Œ" ๐Ÿ˜ โฎ๏ธ ๐Ÿ‘† ๐Ÿฅฐ ๐Ÿ‘ถ. - -โคด๏ธ ๐Ÿง ๐Ÿ‘ถ ๐Ÿ’ฌ "๐Ÿ‘ค ๐Ÿ โฎ๏ธ ๐Ÿ”จ ๐Ÿ”" ๐Ÿšฎ ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ”› โฒ ๐Ÿ–ฅ, โœ‹๏ธ ๐Ÿ‘† ๐Ÿšซ ๐Ÿฆ˜ ๐Ÿ’– ๐Ÿ˜œ โช ๐Ÿ•โ” ๐Ÿ–ฅ ๐Ÿ”ข ๐Ÿ”€ ๐Ÿ‘† ๐Ÿ”„ ๐Ÿ”ข. ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ™…โ€โ™‚ 1๏ธโƒฃ ๐Ÿ”œ ๐Ÿ“Ž ๐Ÿ‘† ๐Ÿ” โ†ฉ๏ธ ๐Ÿ‘† โœ”๏ธ ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ”„, & ๐Ÿ‘ซ โœ”๏ธ ๐Ÿ‘ซ. - -๐Ÿ‘† โŒ› ๐Ÿ‘† ๐Ÿฅฐ ๐Ÿ ๐Ÿ“– (๐Ÿ โฎ๏ธ ๐Ÿ‘ท ๐Ÿ‘ถ / ๐Ÿ“‹ โž– ๐Ÿ› ๏ธ ๐Ÿ‘ถ), ๐Ÿ˜€ ๐Ÿ– & ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ” โธ. - -โคด๏ธ ๐Ÿ‘† ๐Ÿšถ โฒ ๐Ÿ‘ถ, โ–ถ๏ธ ๐Ÿ“‹ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ ๐Ÿ‘ถ, โš’ ๐Ÿ”, ๐Ÿ’ฌ ๐Ÿ‘ & โœŠ ๐Ÿ‘ซ ๐Ÿ“. ๐Ÿ‘ˆ ๐Ÿ ๐Ÿ‘ˆ ๐Ÿ” / ๐Ÿ“‹ ๐Ÿ”— โฎ๏ธ โฒ โน. ๐Ÿ‘ˆ ๐Ÿ”„, โœ ๐Ÿ†• ๐Ÿ“‹, "๐Ÿด ๐Ÿ”" ๐Ÿ‘ถ ๐Ÿ‘ถ, โœ‹๏ธ โฎ๏ธ 1๏ธโƒฃ "๐Ÿคš ๐Ÿ”" ๐Ÿ โน. - -### ๐Ÿ”— ๐Ÿ” - -๐Ÿ”œ โžก๏ธ ๐ŸŒˆ ๐Ÿ‘ซ โž–๐Ÿšซ ๐Ÿšซ "๐Ÿ› ๏ธ ๐Ÿ”", โœ‹๏ธ "๐Ÿ”— ๐Ÿ”". - -๐Ÿ‘† ๐Ÿšถ โฎ๏ธ ๐Ÿ‘† ๐Ÿฅฐ ๐Ÿคš ๐Ÿ”— โฉ ๐Ÿฅ•. - -๐Ÿ‘† ๐Ÿง โธ โช ๐Ÿ“š (โžก๏ธ ๐Ÿ’ฌ 8๏ธโƒฃ) ๐Ÿง ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿ•ฐ ๐Ÿณ โœŠ โœ” โšช๏ธโžก๏ธ ๐Ÿ‘ซ๐Ÿ‘ซ ๐Ÿšช ๐Ÿ‘†. - -๐Ÿ‘ฑ โญ ๐Ÿ‘† โŒ› ๐Ÿ‘ซ ๐Ÿ” ๐Ÿ”œ โญ ๐Ÿ‚ โฒ โ†ฉ๏ธ ๐Ÿ”  8๏ธโƒฃ ๐Ÿง ๐Ÿšถ & ๐Ÿ— ๐Ÿ” โ–ถ๏ธ๏ธ โ†–๏ธ โญ ๐Ÿ’†โ€โ™‚ โญ โœ”. - - - -โคด๏ธ โšซ๏ธ ๐Ÿ˜’ ๐Ÿ‘† ๐Ÿ”„, ๐Ÿ‘† ๐Ÿฅ‰ ๐Ÿ‘† โœ” 2๏ธโƒฃ ๐Ÿ“ถ ๐ŸŽ€ ๐Ÿ” ๐Ÿ‘† ๐Ÿฅฐ & ๐Ÿ‘†. - -๐Ÿ‘† ๐Ÿ’ธ ๐Ÿ‘ถ. - - - -๐Ÿง ๐Ÿšถ ๐Ÿ‘จโ€๐Ÿณ. - -๐Ÿ‘† โŒ›, ๐Ÿง ๐Ÿšช โฒ ๐Ÿ‘ถ, ๐Ÿ‘ˆ ๐Ÿ™…โ€โ™‚ 1๏ธโƒฃ ๐Ÿ™† โœŠ ๐Ÿ‘† ๐Ÿ” โญ ๐Ÿ‘†, ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ ๐Ÿ”ข ๐Ÿ”„. - - - -๐Ÿ‘† & ๐Ÿ‘† ๐Ÿฅฐ ๐Ÿ˜ฉ ๐Ÿšซ โžก๏ธ ๐Ÿ™† ๐Ÿคš ๐Ÿšช ๐Ÿ‘† & โœŠ ๐Ÿ‘† ๐Ÿ” ๐Ÿ•โ” ๐Ÿ‘ซ ๐Ÿ›ฌ, ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ ๐Ÿ’ธ ๐Ÿ™‹ ๐Ÿ‘† ๐Ÿฅฐ. ๐Ÿ‘ถ - -๐Ÿ‘‰ "๐Ÿ”" ๐Ÿ‘ท, ๐Ÿ‘† "๐Ÿ”" โฎ๏ธ ๐Ÿง/๐Ÿณ ๐Ÿ‘ถ ๐Ÿ‘ถ. ๐Ÿ‘† โœ”๏ธ โŒ› ๐Ÿ‘ถ & ๐Ÿ“ค โ˜‘ ๐Ÿ™ ๐Ÿ‘ˆ ๐Ÿง/๐Ÿณ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ ๐Ÿ” & ๐Ÿค ๐Ÿ‘ซ ๐Ÿ‘†, โš–๏ธ โช, ๐Ÿ‘ฑ ๐Ÿ™† ๐Ÿ’ช โœŠ ๐Ÿ‘ซ. - - - -โคด๏ธ ๐Ÿ‘† ๐Ÿง/๐Ÿณ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ˜’ ๐Ÿ‘Ÿ ๐Ÿ”™ โฎ๏ธ ๐Ÿ‘† ๐Ÿ”, โฎ๏ธ ๐Ÿ“ ๐Ÿ•ฐ โŒ› ๐Ÿ‘ถ ๐Ÿ“ค ๐Ÿšช โฒ. - - - -๐Ÿ‘† โœŠ ๐Ÿ‘† ๐Ÿ” & ๐Ÿšถ ๐Ÿ“ โฎ๏ธ ๐Ÿ‘† ๐Ÿฅฐ. - -๐Ÿ‘† ๐Ÿด ๐Ÿ‘ซ, & ๐Ÿ‘† ๐Ÿ”จ. โน - - - -๐Ÿ“ค ๐Ÿšซ ๐ŸŒ… ๐Ÿ’ฌ โš–๏ธ ๐Ÿ˜ ๐ŸŒ… ๐Ÿ•ฐ ๐Ÿ’ธ โŒ› ๐Ÿ‘ถ ๐Ÿšช โฒ. ๐Ÿ‘ถ - -/// info - -๐ŸŒน ๐Ÿ–ผ ๐Ÿ‘ฏ ๐Ÿ. ๐Ÿ‘ถ - -/// - ---- - -๐Ÿ‘‰ ๐Ÿ˜ ๐Ÿ”— ๐Ÿ”, ๐Ÿ‘† ๐Ÿ’ป / ๐Ÿ“‹ ๐Ÿ‘ถ โฎ๏ธ 2๏ธโƒฃ ๐Ÿ•น (๐Ÿ‘† & ๐Ÿ‘† ๐Ÿฅฐ), ๐Ÿ‘ฏโ€โ™‚๏ธ โŒ› ๐Ÿ‘ถ & ๐Ÿ’ก ๐Ÿ‘ซ ๐Ÿ™‹ ๐Ÿ‘ถ "โŒ› ๐Ÿ”› โฒ" ๐Ÿ‘ถ ๐Ÿ“ ๐Ÿ•ฐ. - -โฉ ๐Ÿฅ• ๐Ÿช โœ”๏ธ 8๏ธโƒฃ ๐Ÿ•น (๐Ÿง/๐Ÿณ). โช ๐Ÿ› ๏ธ ๐Ÿ” ๐Ÿช ๐Ÿ’ช โœ”๏ธ โœ”๏ธ ๐Ÿ•ด 2๏ธโƒฃ (1๏ธโƒฃ ๐Ÿง & 1๏ธโƒฃ ๐Ÿณ). - -โœ‹๏ธ, ๐Ÿ ๐Ÿ’ก ๐Ÿšซ ๐Ÿ†. ๐Ÿ‘ถ - ---- - -๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ”— ๐ŸŒ“ ๐Ÿ“– ๐Ÿ”. ๐Ÿ‘ถ - -๐ŸŒ… "๐ŸŽฐ ๐Ÿ‘จโ€โคโ€๐Ÿ‘จ" ๐Ÿ–ผ ๐Ÿ‘‰, ๐ŸŒˆ ๐Ÿฆ. - -๐Ÿ†™ โณ, ๐Ÿ† ๐Ÿฆ โœ”๏ธ ๐Ÿ’— ๐Ÿง ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ & ๐Ÿฆ โธ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ. - -๐ŸŒ ๐Ÿง ๐Ÿ”จ ๐ŸŒ ๐Ÿ‘ท โฎ๏ธ 1๏ธโƒฃ ๐Ÿ‘ฉโ€๐Ÿ’ป โฎ๏ธ ๐ŸŽ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ. - -& ๐Ÿ‘† โœ”๏ธ โŒ› ๐Ÿ‘ถ โธ ๐Ÿ“ ๐Ÿ•ฐ โš–๏ธ ๐Ÿ‘† ๐Ÿ’ธ ๐Ÿ‘† ๐Ÿ”„. - -๐Ÿ‘† ๐ŸŽฒ ๐Ÿšซ๐Ÿ”œ ๐Ÿ’š โœŠ ๐Ÿ‘† ๐Ÿฅฐ ๐Ÿ‘ถ โฎ๏ธ ๐Ÿ‘† ๐Ÿ‘ท ๐Ÿฆ ๐Ÿ‘ถ. - -### ๐Ÿ” ๐Ÿ - -๐Ÿ‘‰ ๐Ÿ˜ "โฉ ๐Ÿฅ• ๐Ÿ” โฎ๏ธ ๐Ÿ‘† ๐Ÿฅฐ", ๐Ÿ“ค ๐Ÿ“š โŒ› ๐Ÿ‘ถ, โšซ๏ธ โš’ ๐Ÿ“š ๐ŸŒ… ๐Ÿ”‘ โœ”๏ธ ๐Ÿ› ๏ธ โš™๏ธ โธ ๐Ÿ‘ถ ๐Ÿ‘ถ. - -๐Ÿ‘‰ ๐Ÿ’ผ ๐ŸŒ… ๐Ÿ•ธ ๐Ÿˆธ. - -๐Ÿ“š, ๐Ÿ“š ๐Ÿ‘ฉโ€๐Ÿ’ป, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ฝ โŒ› ๐Ÿ‘ถ ๐Ÿ‘ซ ๐Ÿšซ--๐Ÿ‘ ๐Ÿ”— ๐Ÿ“จ ๐Ÿ‘ซ ๐Ÿ“จ. - -& โคด๏ธ โŒ› ๐Ÿ‘ถ ๐Ÿ”„ ๐Ÿ“จ ๐Ÿ‘Ÿ ๐Ÿ”™. - -๐Ÿ‘‰ "โŒ›" ๐Ÿ‘ถ โš– โฒ, โœ‹๏ธ, โš– โšซ๏ธ ๐ŸŒ, โšซ๏ธ ๐Ÿ“š โŒ› ๐Ÿ”š. - -๐Ÿ‘ˆ โšซ๏ธโ” โšซ๏ธ โš’ ๐Ÿ“š ๐Ÿ”‘ โš™๏ธ ๐Ÿ” โธ ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ“Ÿ ๐Ÿ•ธ ๐Ÿ”—. - -๐Ÿ‘‰ ๐Ÿ˜‡ ๐Ÿ”€ โšซ๏ธโ” โš’ โœณ ๐ŸŒŸ (โœ‹๏ธ โœณ ๐Ÿšซ ๐Ÿ”—) & ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿšถ ๐Ÿ› ๏ธ ๐Ÿ‡ช๐Ÿ‡ธ. - -& ๐Ÿ‘ˆ ๐ŸŽ ๐ŸŽš ๐ŸŽญ ๐Ÿ‘† ๐Ÿคš โฎ๏ธ **FastAPI**. - -& ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ” & ๐Ÿ”€ ๐ŸŽ ๐Ÿ•ฐ, ๐Ÿ‘† ๐Ÿคš โ†• ๐ŸŽญ ๐ŸŒ˜ ๐ŸŒ… ๐Ÿ’ฏ โœณ ๐Ÿ› ๏ธ & ๐Ÿ”› ๐Ÿ‡ท๐Ÿ‡ช โฎ๏ธ ๐Ÿšถ, โ” โœ ๐Ÿ‡ช๐Ÿ‡ธ ๐Ÿ” ๐Ÿ…ฑ (๐ŸŒ ๐Ÿ‘ ๐Ÿ’ƒ). - -### ๐Ÿ› ๏ธ ๐Ÿ‘ ๐ŸŒ˜ ๐Ÿ” โ“ - -๐Ÿ˜† โ— ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ› ๐Ÿ“–. - -๐Ÿ› ๏ธ ๐ŸŽ ๐ŸŒ˜ ๐Ÿ”. & โšซ๏ธ ๐Ÿ‘ป ๐Ÿ”› **๐ŸŽฏ** ๐Ÿ˜ ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ“š โŒ›. โ†ฉ๏ธ ๐Ÿ‘ˆ, โšซ๏ธ ๐Ÿ›Ž ๐Ÿ“š ๐Ÿ‘ ๐ŸŒ˜ ๐Ÿ” ๐Ÿ•ธ ๐Ÿˆธ ๐Ÿ› ๏ธ. โœ‹๏ธ ๐Ÿšซ ๐ŸŒ. - -, โš– ๐Ÿ‘ˆ ๐Ÿ‘…, ๐ŸŒˆ ๐Ÿ“„ ๐Ÿ“ ๐Ÿ“–: - -> ๐Ÿ‘† โœ”๏ธ ๐Ÿงน ๐Ÿฆ, ๐Ÿ’ฉ ๐Ÿ . - -*๐Ÿ˜†, ๐Ÿ‘ˆ ๐ŸŽ‚ ๐Ÿ“–*. - ---- - -๐Ÿ“ค ๐Ÿ™…โ€โ™‚ โŒ› ๐Ÿ‘ถ ๐Ÿ™†, ๐Ÿ“š ๐Ÿ‘ท ๐Ÿ”จ, ๐Ÿ”› ๐Ÿ’— ๐Ÿฅ‰ ๐Ÿ . - -๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ”„ ๐Ÿ” ๐Ÿ–ผ, ๐Ÿฅ‡ ๐Ÿ  ๐Ÿง–โ€โ™‚, โคด๏ธ ๐Ÿ‘จโ€๐Ÿณ, โœ‹๏ธ ๐Ÿ‘† ๐Ÿšซ โŒ› ๐Ÿ‘ถ ๐Ÿ•ณ, ๐Ÿงน & ๐Ÿงน, ๐Ÿ”„ ๐Ÿšซ๐Ÿ”œ ๐Ÿ“‰ ๐Ÿ•ณ. - -โšซ๏ธ ๐Ÿ”œ โœŠ ๐ŸŽ ๐Ÿ’ธ ๐Ÿ•ฐ ๐Ÿ โฎ๏ธ โš–๏ธ ๐Ÿต ๐Ÿ”„ (๐Ÿ› ๏ธ) & ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ โŒ› ๐ŸŽ ๐Ÿ’ธ ๐Ÿ‘ท. - -โœ‹๏ธ ๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช โœŠ๏ธ 8๏ธโƒฃ ๐Ÿ‘ฐ-๐Ÿง/๐Ÿณ/๐Ÿ”œ-๐Ÿงน, & ๐Ÿ”  1๏ธโƒฃ ๐Ÿ‘ซ (โž• ๐Ÿ‘†) ๐Ÿ’ช โœŠ ๐Ÿ’ ๐Ÿ  ๐Ÿงน โšซ๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ ๐Ÿ‘ท **๐Ÿ”—**, โฎ๏ธ โž• โ„น, & ๐Ÿ ๐ŸŒ… ๐Ÿ”œ. - -๐Ÿ‘‰ ๐Ÿ˜, ๐Ÿ”  1๏ธโƒฃ ๐Ÿงน (๐Ÿ”Œ ๐Ÿ‘†) ๐Ÿ”œ ๐Ÿ•น, ๐Ÿคธ ๐Ÿ‘ซ ๐Ÿ• ๐Ÿ‘จโ€๐Ÿญ. - -& ๐Ÿ† ๐Ÿ› ๏ธ ๐Ÿ•ฐ โœŠ โ˜‘ ๐Ÿ‘ท (โ†ฉ๏ธ โŒ›), & ๐Ÿ‘ท ๐Ÿ’ป โŒ› ๐Ÿ’ฝ, ๐Ÿ‘ซ ๐Ÿค™ ๐Ÿ‘ซ โš  "๐Ÿ’ฝ ๐ŸŽ". - ---- - -โš  ๐Ÿ–ผ ๐Ÿ’ฝ ๐Ÿ”— ๐Ÿ› ๏ธ ๐Ÿ‘œ ๐Ÿ‘ˆ ๐Ÿšš ๐Ÿ— ๐Ÿงช ๐Ÿญ. - -๐Ÿ–ผ: - -* **๐ŸŽง** โš–๏ธ **๐Ÿ–ผ ๐Ÿญ**. -* **๐Ÿ’ป ๐Ÿ‘“**: ๐Ÿ–ผ โœ ๐Ÿ’ฏ ๐Ÿ”…, ๐Ÿ”  ๐Ÿ”… โœ”๏ธ 3๏ธโƒฃ ๐Ÿ’ฒ / ๐ŸŽจ, ๐Ÿญ ๐Ÿ‘ˆ ๐Ÿ›Ž ๐Ÿšš ๐Ÿ’ป ๐Ÿ•ณ ๐Ÿ”› ๐Ÿ“š ๐Ÿ”…, ๐ŸŒ ๐ŸŽ ๐Ÿ•ฐ. -* **๐ŸŽฐ ๐Ÿซ**: โšซ๏ธ ๐Ÿ›Ž ๐Ÿšš ๐Ÿ“š "โœ–" & "๐Ÿ–ผ" โœ–. ๐Ÿ’ญ ๐Ÿฆ ๐Ÿ“‹ โฎ๏ธ ๐Ÿ”ข & โœ– ๐ŸŒ ๐Ÿ‘ซ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐ŸŽ ๐Ÿ•ฐ. -* **โฌ ๐Ÿซ**: ๐Ÿ‘‰ ๐ŸŽง-๐Ÿ‘ ๐ŸŽฐ ๐Ÿซ,, ๐ŸŽ โœ”. โšซ๏ธ ๐Ÿ‘ˆ ๐Ÿ“ค ๐Ÿšซ ๐Ÿ‘ ๐Ÿ“‹ ๐Ÿ”ข โœ–, โœ‹๏ธ ๐Ÿฆ โš’ ๐Ÿ‘ซ, & ๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘† โš™๏ธ ๐ŸŽ ๐Ÿ•น ๐Ÿ— & / โš–๏ธ โš™๏ธ ๐Ÿ‘ˆ ๐Ÿท. - -### ๐Ÿ› ๏ธ โž• ๐Ÿ”: ๐Ÿ•ธ โž• ๐ŸŽฐ ๐Ÿซ - -โฎ๏ธ **FastAPI** ๐Ÿ‘† ๐Ÿ’ช โœŠ ๐Ÿ“ˆ ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ“ถ โš  ๐Ÿ•ธ ๐Ÿ› ๏ธ (๐ŸŽ ๐Ÿ‘‘ ๐Ÿงฒ โœณ). - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ„ ๐Ÿ’ฐ ๐Ÿ” & ๐Ÿ’พ (โœ”๏ธ ๐Ÿ’— ๐Ÿ› ๏ธ ๐Ÿƒโ€โ™‚ ๐Ÿ”—) **๐Ÿ’ฝ ๐ŸŽ** โš– ๐Ÿ’– ๐Ÿ‘ˆ ๐ŸŽฐ ๐Ÿซ โš™๏ธ. - -๐Ÿ‘ˆ, โž• ๐Ÿ™… ๐Ÿ‘ ๐Ÿ‘ˆ ๐Ÿ ๐Ÿ‘‘ ๐Ÿ‡ช๐Ÿ‡ธ **๐Ÿ’ฝ ๐Ÿงช**, ๐ŸŽฐ ๐Ÿซ & โœด๏ธ โฌ ๐Ÿซ, โš’ FastAPI ๐Ÿ“ถ ๐Ÿ‘ ๐Ÿ ๐Ÿ’ฝ ๐Ÿงช / ๐ŸŽฐ ๐Ÿซ ๐Ÿ•ธ ๐Ÿ”— & ๐Ÿˆธ (๐Ÿ‘ช ๐Ÿ“š ๐ŸŽ). - -๐Ÿ‘€ โ” ๐Ÿ† ๐Ÿ‘‰ ๐Ÿ” ๐Ÿญ ๐Ÿ‘€ ๐Ÿ“„ ๐Ÿ”ƒ [๐Ÿ› ๏ธ](deployment/index.md){.internal-link target=_blank}. - -## `async` & `await` - -๐Ÿ› โฌ ๐Ÿ โœ”๏ธ ๐Ÿ“ถ ๐Ÿ‹๏ธ ๐ŸŒŒ ๐Ÿ”ฌ ๐Ÿ” ๐Ÿ“Ÿ. ๐Ÿ‘‰ โš’ โšซ๏ธ ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ˜ "๐Ÿ”" ๐Ÿ“Ÿ & "โŒ›" ๐Ÿ‘† โ–ถ๏ธ๏ธ ๐Ÿ™. - -๐Ÿ•โ” ๐Ÿ“ค ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿšš โŒ› โญ ๐Ÿค ๐Ÿ & โœ”๏ธ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘‰ ๐Ÿ†• ๐Ÿ โš’, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“Ÿ โšซ๏ธ ๐Ÿ’–: - -```Python -burgers = await get_burgers(2) -``` - -๐Ÿ”‘ ๐Ÿ“ฅ `await`. โšซ๏ธ ๐Ÿ’ฌ ๐Ÿ ๐Ÿ‘ˆ โšซ๏ธ โœ”๏ธ โŒ› โธ `get_burgers(2)` ๐Ÿ ๐Ÿ”จ ๐Ÿšฎ ๐Ÿ‘œ ๐Ÿ‘ถ โญ โ™ป ๐Ÿ `burgers`. โฎ๏ธ ๐Ÿ‘ˆ, ๐Ÿ ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ’ช ๐Ÿšถ & ๐Ÿ•ณ ๐Ÿ™† ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ (๐Ÿ’– ๐Ÿ“จ โž•1๏ธโƒฃ ๐Ÿ“จ). - -`await` ๐Ÿ‘ท, โšซ๏ธ โœ”๏ธ ๐Ÿ”˜ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘‰ ๐Ÿ”€. ๐Ÿ‘ˆ, ๐Ÿ‘† ๐Ÿ“ฃ โšซ๏ธ โฎ๏ธ `async def`: - -```Python hl_lines="1" -async def get_burgers(number: int): - # Do some asynchronous stuff to create the burgers - return burgers -``` - -...โ†ฉ๏ธ `def`: - -```Python hl_lines="2" -# This is not asynchronous -def get_sequential_burgers(number: int): - # Do some sequential stuff to create the burgers - return burgers -``` - -โฎ๏ธ `async def`, ๐Ÿ ๐Ÿ’ญ ๐Ÿ‘ˆ, ๐Ÿ”˜ ๐Ÿ‘ˆ ๐Ÿ”ข, โšซ๏ธ โœ”๏ธ ๐Ÿค” `await` ๐Ÿงฌ, & ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ’ช "โธ" โธ ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ”ข & ๐Ÿšถ ๐Ÿ•ณ ๐Ÿ™† ๐Ÿ‘ถ โญ ๐Ÿ‘Ÿ ๐Ÿ”™. - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’š ๐Ÿค™ `async def` ๐Ÿ”ข, ๐Ÿ‘† โœ”๏ธ "โŒ›" โšซ๏ธ. , ๐Ÿ‘‰ ๐Ÿ† ๐Ÿšซ ๐Ÿ‘ท: - -```Python -# This won't work, because get_burgers was defined with: async def -burgers = get_burgers(2) -``` - ---- - -, ๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿ—ƒ ๐Ÿ‘ˆ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค™ โšซ๏ธ โฎ๏ธ `await`, ๐Ÿ‘† ๐Ÿ’ช โœ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ‘ˆ โš™๏ธ โšซ๏ธ โฎ๏ธ `async def`, ๐Ÿ’–: - -```Python hl_lines="2-3" -@app.get('/burgers') -async def read_burgers(): - burgers = await get_burgers(2) - return burgers -``` - -### ๐ŸŒ… ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ‘€ ๐Ÿ‘ˆ `await` ๐Ÿ’ช ๐Ÿ•ด โš™๏ธ ๐Ÿ”˜ ๐Ÿ”ข ๐Ÿ”ฌ โฎ๏ธ `async def`. - -โœ‹๏ธ ๐ŸŽ ๐Ÿ•ฐ, ๐Ÿ”ข ๐Ÿ”ฌ โฎ๏ธ `async def` โœ”๏ธ "โŒ›". , ๐Ÿ”ข โฎ๏ธ `async def` ๐Ÿ’ช ๐Ÿ•ด ๐Ÿค™ ๐Ÿ”˜ ๐Ÿ”ข ๐Ÿ”ฌ โฎ๏ธ `async def` ๐Ÿ’โ€โ™‚๏ธ. - -, ๐Ÿ”ƒ ๐Ÿฅš & ๐Ÿ”, โ” ๐Ÿ‘† ๐Ÿค™ ๐Ÿฅ‡ `async` ๐Ÿ”ข โ“ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘ท โฎ๏ธ **FastAPI** ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿ˜Ÿ ๐Ÿ”ƒ ๐Ÿ‘ˆ, โ†ฉ๏ธ ๐Ÿ‘ˆ "๐Ÿฅ‡" ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, & FastAPI ๐Ÿ”œ ๐Ÿ’ญ โ” โ–ถ๏ธ๏ธ ๐Ÿ‘œ. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ `async` / `await` ๐Ÿต FastAPI, ๐Ÿ‘† ๐Ÿ’ช โšซ๏ธ ๐Ÿ‘. - -### โœ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ” ๐Ÿ“Ÿ - -๐Ÿ’ƒ (& **FastAPI**) โš“๏ธ ๐Ÿ”› AnyIO, โ” โš’ โšซ๏ธ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ ๐Ÿฉ ๐Ÿ—ƒ โœณ & ๐ŸŽป. - -๐ŸŽฏ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— โš™๏ธ AnyIO ๐Ÿ‘† ๐Ÿง ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿ’ผ ๐Ÿ‘ˆ ๐Ÿšš ๐ŸŒ… ๐Ÿง โš“ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ“Ÿ. - -& ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ โš™๏ธ FastAPI, ๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ” ๐Ÿˆธ โฎ๏ธ AnyIO ๐Ÿ† ๐Ÿ”— & ๐Ÿคš ๐Ÿšฎ ๐Ÿ’ฐ (โœ… *๐Ÿ“Š ๐Ÿ› ๏ธ*). - -### ๐ŸŽ ๐Ÿ“จ ๐Ÿ” ๐Ÿ“Ÿ - -๐Ÿ‘‰ ๐Ÿ‘— โš™๏ธ `async` & `await` ๐Ÿ“ถ ๐Ÿ†• ๐Ÿ‡ช๐Ÿ‡ธ. - -โœ‹๏ธ โšซ๏ธ โš’ ๐Ÿ‘ท โฎ๏ธ ๐Ÿ” ๐Ÿ“Ÿ ๐Ÿ“š โฉ. - -๐Ÿ‘‰ ๐ŸŽ โ• (โš–๏ธ ๐ŸŒ– ๐ŸŒ“) ๐Ÿ”Œ โณ ๐Ÿ› โฌ ๐Ÿ•ธ (๐Ÿ–ฅ & โœณ). - -โœ‹๏ธ โญ ๐Ÿ‘ˆ, ๐Ÿšš ๐Ÿ” ๐Ÿ“Ÿ ๐ŸŒ– ๐Ÿ— & โš . - -โฎ๏ธ โฌ ๐Ÿ, ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ โš™๏ธ ๐Ÿงต โš–๏ธ ๐Ÿ. โœ‹๏ธ ๐Ÿ“Ÿ ๐ŸŒŒ ๐ŸŒ– ๐Ÿ— ๐Ÿค”, โ„น, & ๐Ÿ’ญ ๐Ÿ”ƒ. - -โฎ๏ธ โฌ โœณ / ๐Ÿ–ฅ ๐Ÿ•ธ, ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ โš™๏ธ "โฒ". โ” โ†˜๏ธ "โฒ ๐Ÿ”ฅ๐Ÿ˜ˆ". - -## ๐Ÿ” - -**๐Ÿ”** ๐Ÿ“ถ ๐ŸŽ€ โš– ๐Ÿ‘œ ๐Ÿ“จ `async def` ๐Ÿ”ข. ๐Ÿ ๐Ÿ’ญ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ•ณ ๐Ÿ’– ๐Ÿ”ข ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ’ช โ–ถ๏ธ & ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ”œ ๐Ÿ”š โ˜, โœ‹๏ธ ๐Ÿ‘ˆ โšซ๏ธ 5๏ธโƒฃ๐Ÿ“† โธ โธ ๐Ÿ”˜ ๐Ÿ’โ€โ™‚๏ธ, ๐Ÿ•โ” ๐Ÿ“ค `await` ๐Ÿ”˜ โšซ๏ธ. - -โœ‹๏ธ ๐ŸŒ ๐Ÿ‘‰ ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿ” ๐Ÿ“Ÿ โฎ๏ธ `async` & `await` ๐Ÿ“š ๐Ÿ•ฐ ๐Ÿ”ฌ โš™๏ธ "๐Ÿ”". โšซ๏ธ โญ ๐Ÿ‘‘ ๐Ÿ”‘ โš’ ๐Ÿšถ, "๐Ÿ”". - -## ๐Ÿ - -โžก๏ธ ๐Ÿ‘€ ๐ŸŽ ๐Ÿ”ค โšช๏ธโžก๏ธ ๐Ÿ”›: - -> ๐Ÿ› โฌ ๐Ÿ โœ”๏ธ ๐Ÿ•โ€๐Ÿฆบ **"๐Ÿ” ๐Ÿ“Ÿ"** โš™๏ธ ๐Ÿ•ณ ๐Ÿค™ **"๐Ÿ”"**, โฎ๏ธ **`async` & `await`** โ•. - -๐Ÿ‘ˆ ๐Ÿ”œ โš’ ๐ŸŒ… ๐Ÿ”‘ ๐Ÿ”œ. ๐Ÿ‘ถ - -๐ŸŒ ๐Ÿ‘ˆ โšซ๏ธโ” ๐Ÿ‹๏ธ FastAPI (๐Ÿ”˜ ๐Ÿ’ƒ) & โšซ๏ธโ” โš’ โšซ๏ธ โœ”๏ธ โœ… ๐ŸŽ† ๐ŸŽญ. - -## ๐Ÿ“ถ ๐Ÿ“ก โ„น - -/// warning - -๐Ÿ‘† ๐Ÿ’ช ๐ŸŽฒ ๐Ÿšถ ๐Ÿ‘‰. - -๐Ÿ‘‰ ๐Ÿ“ถ ๐Ÿ“ก โ„น โ” **FastAPI** ๐Ÿ‘ท ๐Ÿ”˜. - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ“ก ๐Ÿ’ก (๐Ÿˆถ-๐Ÿ‹, ๐Ÿงต, ๐Ÿซ, โ™’๏ธ.) & ๐Ÿ˜Ÿ ๐Ÿ”ƒ โ” FastAPI ๐Ÿต `async def` ๐Ÿ†š ๐Ÿ˜ `def`, ๐Ÿšถ โคด๏ธ. - -/// - -### โžก ๐Ÿ› ๏ธ ๐Ÿ”ข - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“ฃ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* โฎ๏ธ ๐Ÿ˜ `def` โ†ฉ๏ธ `async def`, โšซ๏ธ ๐Ÿƒ ๐Ÿ”ข ๐Ÿงต ๐Ÿ‘ˆ โคด๏ธ โŒ›, โ†ฉ๏ธ โž– ๐Ÿค™ ๐Ÿ”— (โšซ๏ธ ๐Ÿ”œ ๐Ÿซ ๐Ÿ’ฝ). - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ โž•1๏ธโƒฃ ๐Ÿ” ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ”จ ๐Ÿšซ ๐Ÿ‘ท ๐ŸŒŒ ๐Ÿ”ฌ ๐Ÿ”› & ๐Ÿ‘† โš™๏ธ โš– ๐Ÿ™ƒ ๐Ÿ“Š-๐Ÿ•ด *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* โฎ๏ธ โœ… `def` ๐Ÿคช ๐ŸŽญ ๐Ÿ“ˆ (๐Ÿ”ƒ 1๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’“), ๐Ÿ™ ๐Ÿ—’ ๐Ÿ‘ˆ **FastAPI** โญ ๐Ÿ”œ ๐Ÿ”„. ๐Ÿ‘ซ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ‘ป โš™๏ธ `async def` ๐Ÿšฅ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* โš™๏ธ ๐Ÿ“Ÿ ๐Ÿ‘ˆ ๐ŸŽญ ๐Ÿšง ๐Ÿ‘ค/๐Ÿ…พ. - -, ๐Ÿ‘ฏโ€โ™‚๏ธ โš , ๐Ÿคž ๐Ÿ‘ˆ **FastAPI** ๐Ÿ”œ [โฉ](index.md#_15){.internal-link target=_blank} ๐ŸŒ˜ (โš–๏ธ ๐ŸŒ˜ โญ) ๐Ÿ‘† โฎ๏ธ ๐Ÿ› ๏ธ. - -### ๐Ÿ”— - -๐ŸŽ โœ” [๐Ÿ”—](tutorial/dependencies/index.md){.internal-link target=_blank}. ๐Ÿšฅ ๐Ÿ”— ๐Ÿฉ `def` ๐Ÿ”ข โ†ฉ๏ธ `async def`, โšซ๏ธ ๐Ÿƒ ๐Ÿ”ข ๐Ÿงต. - -### ๐ŸŽง-๐Ÿ”— - -๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ’— ๐Ÿ”— & [๐ŸŽง-๐Ÿ”—](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank} ๐Ÿšซ ๐Ÿ”  ๐ŸŽ (๐Ÿ”ข ๐Ÿ”ข ๐Ÿ”‘), ๐Ÿ‘ซ ๐Ÿ’ช โœ โฎ๏ธ `async def` & โฎ๏ธ ๐Ÿ˜ `def`. โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘ท, & ๐Ÿ• โœ โฎ๏ธ ๐Ÿ˜ `def` ๐Ÿ”œ ๐Ÿค™ ๐Ÿ”› ๐Ÿ”ข ๐Ÿงต (โšช๏ธโžก๏ธ ๐Ÿงต) โ†ฉ๏ธ โž– "โŒ›". - -### ๐ŸŽ ๐Ÿš™ ๐Ÿ”ข - -๐Ÿ™† ๐ŸŽ ๐Ÿš™ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿค™ ๐Ÿ”— ๐Ÿ’ช โœ โฎ๏ธ ๐Ÿ˜ `def` โš–๏ธ `async def` & FastAPI ๐Ÿ† ๐Ÿšซ ๐Ÿ“‰ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿค™ โšซ๏ธ. - -๐Ÿ‘‰ ๐Ÿ”… ๐Ÿ”ข ๐Ÿ‘ˆ FastAPI ๐Ÿค™ ๐Ÿ‘†: *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* & ๐Ÿ”—. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿš™ ๐Ÿ”ข ๐Ÿ˜ ๐Ÿ”ข โฎ๏ธ `def`, โšซ๏ธ ๐Ÿ”œ ๐Ÿค™ ๐Ÿ”— (๐Ÿ‘† โœ โšซ๏ธ ๐Ÿ‘† ๐Ÿ“Ÿ), ๐Ÿšซ ๐Ÿงต, ๐Ÿšฅ ๐Ÿ”ข โœ โฎ๏ธ `async def` โคด๏ธ ๐Ÿ‘† ๐Ÿ”œ `await` ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿค™ โšซ๏ธ ๐Ÿ‘† ๐Ÿ“Ÿ. - ---- - -๐Ÿ”„, ๐Ÿ‘‰ ๐Ÿ“ถ ๐Ÿ“ก โ„น ๐Ÿ‘ˆ ๐Ÿ”œ ๐ŸŽฒ โš  ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘Ÿ ๐Ÿ”Ž ๐Ÿ‘ซ. - -โช, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘ โฎ๏ธ ๐Ÿ“„ โšช๏ธโžก๏ธ ๐Ÿ“„ ๐Ÿ”›: ๐Ÿƒ โ“. diff --git a/docs/em/docs/benchmarks.md b/docs/em/docs/benchmarks.md deleted file mode 100644 index 003c3f62d..000000000 --- a/docs/em/docs/benchmarks.md +++ /dev/null @@ -1,34 +0,0 @@ -# ๐Ÿ“‡ - -๐Ÿ”ฌ ๐Ÿ‡ธ๐Ÿ‡ฒ ๐Ÿ“‡ ๐ŸŽฆ **FastAPI** ๐Ÿˆธ ๐Ÿƒโ€โ™‚ ๐Ÿ”ฝ Uvicorn 1๏ธโƒฃ โฉ ๐Ÿ ๐Ÿ› ๏ธ ๐Ÿ’ช, ๐Ÿ•ด ๐Ÿ”› ๐Ÿ’ƒ & Uvicorn ๐Ÿ‘ซ (โš™๏ธ ๐Ÿ”˜ FastAPI). (*) - -โœ‹๏ธ ๐Ÿ•โ” โœ… ๐Ÿ“‡ & ๐Ÿ”บ ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐Ÿ“„ ๐Ÿคฏ. - -## ๐Ÿ“‡ & ๐Ÿš… - -๐Ÿ•โ” ๐Ÿ‘† โœ… ๐Ÿ“‡, โšซ๏ธ โš  ๐Ÿ‘€ ๐Ÿ“š ๐Ÿงฐ ๐ŸŽ ๐Ÿ†Ž ๐Ÿ”ฌ ๐ŸŒ“. - -๐ŸŽฏ, ๐Ÿ‘€ Uvicorn, ๐Ÿ’ƒ & FastAPI ๐Ÿ”ฌ ๐Ÿ‘ฏโ€โ™‚๏ธ (๐Ÿ‘ช ๐Ÿ“š ๐ŸŽ ๐Ÿงฐ). - -๐Ÿ™… โš  โŽ ๐Ÿงฐ, ๐Ÿ‘ ๐ŸŽญ โšซ๏ธ ๐Ÿ”œ ๐Ÿคš. & ๐Ÿ† ๐Ÿ“‡ ๐Ÿšซ ๐Ÿ’ฏ ๐ŸŒ– โš’ ๐Ÿšš ๐Ÿงฐ. - -๐Ÿ”— ๐Ÿ’–: - -* **Uvicorn**: ๐Ÿ”ซ ๐Ÿ’ฝ - * **๐Ÿ’ƒ**: (โš™๏ธ Uvicorn) ๐Ÿ•ธ ๐Ÿ•ธ - * **FastAPI**: (โš™๏ธ ๐Ÿ’ƒ) ๐Ÿ› ๏ธ ๐Ÿ•ธ โฎ๏ธ ๐Ÿ“š ๐ŸŒ– โš’ ๐Ÿ— ๐Ÿ”—, โฎ๏ธ ๐Ÿ’ฝ ๐Ÿ”ฌ, โ™’๏ธ. - -* **Uvicorn**: - * ๐Ÿ”œ โœ”๏ธ ๐Ÿ† ๐ŸŽญ, โšซ๏ธ ๐Ÿšซ โœ”๏ธ ๐ŸŒ… โž• ๐Ÿ“Ÿ โ†–๏ธ โšช๏ธโžก๏ธ ๐Ÿ’ฝ โšซ๏ธ. - * ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ โœ ๐Ÿˆธ Uvicorn ๐Ÿ”—. ๐Ÿ‘ˆ ๐Ÿ”œ โ›“ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ“Ÿ ๐Ÿ”œ โœ”๏ธ ๐Ÿ”Œ ๐ŸŒ– โš–๏ธ ๐ŸŒ˜, ๐ŸŒ˜, ๐ŸŒ ๐Ÿ“Ÿ ๐Ÿšš ๐Ÿ’ƒ (โš–๏ธ **FastAPI**). & ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘ˆ, ๐Ÿ‘† ๐Ÿ ๐Ÿˆธ ๐Ÿ”œ โœ”๏ธ ๐ŸŽ ๐ŸŒฅ โœ”๏ธ โš™๏ธ ๐Ÿ› ๏ธ & ๐Ÿ“‰ ๐Ÿ‘† ๐Ÿ“ฑ ๐Ÿ“Ÿ & ๐Ÿ›. - * ๐Ÿšฅ ๐Ÿ‘† โš– Uvicorn, ๐Ÿ”ฌ โšซ๏ธ ๐Ÿ›ก ๐Ÿ‘ธ, Hypercorn, โœณ, โ™’๏ธ. ๐Ÿˆธ ๐Ÿ’ฝ. -* **๐Ÿ’ƒ**: - * ๐Ÿ”œ โœ”๏ธ โญ ๐Ÿ† ๐ŸŽญ, โฎ๏ธ Uvicorn. ๐Ÿ‘, ๐Ÿ’ƒ โš™๏ธ Uvicorn ๐Ÿƒ. , โšซ๏ธ ๐ŸŽฒ ๐Ÿ’ช ๐Ÿ•ด ๐Ÿคš "๐ŸŒ" ๐ŸŒ˜ Uvicorn โœ”๏ธ ๐Ÿ› ๏ธ ๐ŸŒ… ๐Ÿ“Ÿ. - * โœ‹๏ธ โšซ๏ธ ๐Ÿšš ๐Ÿ‘† ๐Ÿงฐ ๐Ÿ— ๐Ÿ™… ๐Ÿ•ธ ๐Ÿˆธ, โฎ๏ธ ๐Ÿ•น โš“๏ธ ๐Ÿ”› โžก, โ™’๏ธ. - * ๐Ÿšฅ ๐Ÿ‘† โš– ๐Ÿ’ƒ, ๐Ÿ”ฌ โšซ๏ธ ๐Ÿ›ก ๐Ÿคฃ, ๐Ÿบ, โœณ, โ™’๏ธ. ๐Ÿ•ธ ๐Ÿ› ๏ธ (โš–๏ธ ๐Ÿ•ธ). -* **FastAPI**: - * ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘ˆ ๐Ÿ’ƒ โš™๏ธ Uvicorn & ๐Ÿšซ๐Ÿ”œ โฉ ๐ŸŒ˜ โšซ๏ธ, **FastAPI** โš™๏ธ ๐Ÿ’ƒ, โšซ๏ธ ๐Ÿšซ๐Ÿ”œ โฉ ๐ŸŒ˜ โšซ๏ธ. - * FastAPI ๐Ÿšš ๐ŸŒ… โš’ ๐Ÿ”› ๐Ÿ” ๐Ÿ’ƒ. โš’ ๐Ÿ‘ˆ ๐Ÿ‘† ๐ŸŒ– ๐Ÿ•ง ๐Ÿ’ช ๐Ÿ•โ” ๐Ÿ— ๐Ÿ”—, ๐Ÿ’– ๐Ÿ’ฝ ๐Ÿ”ฌ & ๐Ÿ› ๏ธ. & โš™๏ธ โšซ๏ธ, ๐Ÿ‘† ๐Ÿคš ๐Ÿง ๐Ÿงพ ๐Ÿ†“ (๐Ÿง ๐Ÿงพ ๐Ÿšซ ๐Ÿšฎ ๐ŸŒฅ ๐Ÿƒโ€โ™‚ ๐Ÿˆธ, โšซ๏ธ ๐Ÿ— ๐Ÿ”› ๐Ÿ•ด). - * ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ โš™๏ธ FastAPI & โš™๏ธ ๐Ÿ’ƒ ๐Ÿ”— (โš–๏ธ โž•1๏ธโƒฃ ๐Ÿงฐ, ๐Ÿ’– ๐Ÿคฃ, ๐Ÿบ, ๐Ÿ†˜, โ™’๏ธ) ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐Ÿ› ๏ธ ๐ŸŒ ๐Ÿ’ฝ ๐Ÿ”ฌ & ๐Ÿ› ๏ธ ๐Ÿ‘†. , ๐Ÿ‘† ๐Ÿ ๐Ÿˆธ ๐Ÿ”œ โœ”๏ธ ๐ŸŽ ๐ŸŒฅ ๐Ÿšฅ โšซ๏ธ ๐Ÿ— โš™๏ธ FastAPI. & ๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘‰ ๐Ÿ’ฝ ๐Ÿ”ฌ & ๐Ÿ› ๏ธ ๐Ÿฆ ๐Ÿ’ธ ๐Ÿ“Ÿ โœ ๐Ÿˆธ. - * , โš™๏ธ FastAPI ๐Ÿ‘† โ™ป ๐Ÿ› ๏ธ ๐Ÿ•ฐ, ๐Ÿ›, โธ ๐Ÿ“Ÿ, & ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿคš ๐ŸŽ ๐ŸŽญ (โš–๏ธ ๐Ÿ‘) ๐Ÿ‘† ๐Ÿ”œ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ โš™๏ธ โšซ๏ธ (๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐Ÿ› ๏ธ โšซ๏ธ ๐ŸŒ ๐Ÿ‘† ๐Ÿ“Ÿ). - * ๐Ÿšฅ ๐Ÿ‘† โš– FastAPI, ๐Ÿ”ฌ โšซ๏ธ ๐Ÿ›ก ๐Ÿ•ธ ๐Ÿˆธ ๐Ÿ› ๏ธ (โš–๏ธ โš’ ๐Ÿงฐ) ๐Ÿ‘ˆ ๐Ÿšš ๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿ› ๏ธ & ๐Ÿงพ, ๐Ÿ’– ๐Ÿบ-apispec, NestJS, โ™จ, โ™’๏ธ. ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ› ๏ธ ๐Ÿง ๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿ› ๏ธ & ๐Ÿงพ. diff --git a/docs/em/docs/deployment/concepts.md b/docs/em/docs/deployment/concepts.md deleted file mode 100644 index bbb017277..000000000 --- a/docs/em/docs/deployment/concepts.md +++ /dev/null @@ -1,323 +0,0 @@ -# ๐Ÿ› ๏ธ ๐Ÿ”ง - -๐Ÿ•โ” ๐Ÿ› ๏ธ **FastAPI** ๐Ÿˆธ, โš–๏ธ ๐Ÿค™, ๐Ÿ™† ๐Ÿ†Ž ๐Ÿ•ธ ๐Ÿ› ๏ธ, ๐Ÿ“ค ๐Ÿ“š ๐Ÿ”ง ๐Ÿ‘ˆ ๐Ÿ‘† ๐ŸŽฒ ๐Ÿ’… ๐Ÿ”ƒ, & โš™๏ธ ๐Ÿ‘ซ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”Ž **๐Ÿ† โ˜‘** ๐ŸŒŒ **๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿˆธ**. - -โš  ๐Ÿ”ง: - -* ๐Ÿ’‚โ€โ™‚ - ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” -* ๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ•ด -* โ -* ๐Ÿงฌ (๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿƒ) -* ๐Ÿ’พ -* โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ - -๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘€ โ” ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ“‰ **๐Ÿ› ๏ธ**. - -๐Ÿ”š, ๐Ÿ† ๐ŸŽฏ ๐Ÿ’ช **๐Ÿฆ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป** ๐ŸŒŒ ๐Ÿ‘ˆ **๐Ÿ”**, **โŽ ๐Ÿ“‰**, & โš™๏ธ **๐Ÿ“Š โ„น** (๐Ÿ–ผ ๐Ÿ›ฐ ๐Ÿ’ฝ/๐Ÿ•น ๐ŸŽฐ) โ™ป ๐Ÿ’ช. ๐Ÿ‘ถ - -๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿ– ๐ŸŒ– ๐Ÿ”ƒ ๐Ÿ‘ซ **๐Ÿ”ง** ๐Ÿ“ฅ, & ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿคž ๐Ÿค ๐Ÿ‘† **๐Ÿค”** ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ’ญ โ” ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ“ถ ๐ŸŽ ๐ŸŒ, ๐ŸŽฒ **๐Ÿ”ฎ** ๐Ÿ• ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ”€. - -๐Ÿค” ๐Ÿ‘ซ ๐Ÿ”ง, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช **๐Ÿ”ฌ & ๐Ÿ”ง** ๐Ÿ† ๐ŸŒŒ ๐Ÿ› ๏ธ **๐Ÿ‘† ๐Ÿ‘ ๐Ÿ”—**. - -โญ ๐Ÿ“ƒ, ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿค ๐Ÿ‘† ๐ŸŒ… **๐Ÿงฑ ๐Ÿฎ** ๐Ÿ› ๏ธ FastAPI ๐Ÿˆธ. - -โœ‹๏ธ ๐Ÿ”œ, โžก๏ธ โœ… ๐Ÿ‘‰ โš  **โš› ๐Ÿ’ญ**. ๐Ÿ‘ซ ๐Ÿ”ง โœ” ๐Ÿ™† ๐ŸŽ ๐Ÿ†Ž ๐Ÿ•ธ ๐Ÿ› ๏ธ. ๐Ÿ‘ถ - -## ๐Ÿ’‚โ€โ™‚ - ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” - -[โฎ๏ธ ๐Ÿ“ƒ ๐Ÿ”ƒ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”](https.md){.internal-link target=_blank} ๐Ÿ‘ฅ ๐Ÿ‡ญ๐Ÿ‡ฒ ๐Ÿ”ƒ โ” ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿšš ๐Ÿ” ๐Ÿ‘† ๐Ÿ› ๏ธ. - -๐Ÿ‘ฅ ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ›Ž ๐Ÿšš ๐Ÿฆฒ **๐Ÿ”ข** ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ’ฝ, **๐Ÿค โŽ ๐Ÿ—ณ**. - -& ๐Ÿ“ค โœ”๏ธ ๐Ÿ•ณ ๐Ÿˆš **โ™ป ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“„**, โšซ๏ธ ๐Ÿ’ช ๐ŸŽ ๐Ÿฆฒ โš–๏ธ โšซ๏ธ ๐Ÿ’ช ๐Ÿ•ณ ๐ŸŽ. - -### ๐Ÿ–ผ ๐Ÿงฐ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” - -๐Ÿงฐ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿค โŽ ๐Ÿ—ณ: - -* Traefik - * ๐Ÿ” ๐Ÿต ๐Ÿ“„ ๐Ÿ”• ๐Ÿ‘ถ -* ๐Ÿ“ฅ - * ๐Ÿ” ๐Ÿต ๐Ÿ“„ ๐Ÿ”• ๐Ÿ‘ถ -* ๐Ÿ‘Œ - * โฎ๏ธ ๐Ÿ”ข ๐Ÿฆฒ ๐Ÿ’– Certbot ๐Ÿ“„ ๐Ÿ”• -* โœณ - * โฎ๏ธ ๐Ÿ”ข ๐Ÿฆฒ ๐Ÿ’– Certbot ๐Ÿ“„ ๐Ÿ”• -* Kubernetes โฎ๏ธ ๐Ÿšง ๐Ÿ•น ๐Ÿ’– ๐Ÿ‘Œ - * โฎ๏ธ ๐Ÿ”ข ๐Ÿฆฒ ๐Ÿ’– ๐Ÿ›‚-๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ“„ ๐Ÿ”• -* ๐Ÿต ๐Ÿ”˜ โ˜ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ• ๐Ÿ‘ซ ๐Ÿ•โ€๐Ÿฆบ (โœ ๐Ÿ”› ๐Ÿ‘ถ) - -โž•1๏ธโƒฃ ๐ŸŽ› ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ **โ˜ ๐Ÿ•โ€๐Ÿฆบ** ๐Ÿ‘ˆ ๐Ÿ”จ ๐ŸŒ– ๐Ÿ‘ท โœ… โš’ ๐Ÿ†™ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”. โšซ๏ธ ๐Ÿ’ช โœ”๏ธ ๐Ÿšซ โš–๏ธ ๐Ÿˆš ๐Ÿ‘† ๐ŸŒ…, โ™’๏ธ. โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ โœ”๏ธ โš’ ๐Ÿ†™ ๐Ÿค โŽ ๐Ÿ—ณ ๐Ÿ‘†. - -๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ‘† ๐Ÿงฑ ๐Ÿ–ผ โญ ๐Ÿ“ƒ. - ---- - -โคด๏ธ โญ ๐Ÿ”ง ๐Ÿค” ๐ŸŒ ๐Ÿ”ƒ ๐Ÿ“‹ ๐Ÿƒ ๐Ÿ‘† โ˜‘ ๐Ÿ› ๏ธ (โœ… Uvicorn). - -## ๐Ÿ“‹ & ๐Ÿ› ๏ธ - -๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ’ฌ ๐Ÿ“š ๐Ÿ”ƒ ๐Ÿƒ "**๐Ÿ› ๏ธ**", โšซ๏ธ โš  โœ”๏ธ โ˜ฏ ๐Ÿ”ƒ โšซ๏ธโ” โšซ๏ธ โ›“, & โšซ๏ธโ” ๐Ÿ”บ โฎ๏ธ ๐Ÿ”ค "**๐Ÿ“‹**". - -### โšซ๏ธโ” ๐Ÿ“‹ - -๐Ÿ”ค **๐Ÿ“‹** ๐Ÿ›Ž โš™๏ธ ๐Ÿ”ฌ ๐Ÿ“š ๐Ÿ‘œ: - -* **๐Ÿ“Ÿ** ๐Ÿ‘ˆ ๐Ÿ‘† โœ, **๐Ÿ ๐Ÿ“**. -* **๐Ÿ“** ๐Ÿ‘ˆ ๐Ÿ’ช **๐Ÿ› ๏ธ** ๐Ÿƒโ€โ™‚ โš™๏ธ, ๐Ÿ–ผ: `python`, `python.exe` โš–๏ธ `uvicorn`. -* ๐ŸŽฏ ๐Ÿ“‹ โช โšซ๏ธ **๐Ÿƒโ€โ™‚** ๐Ÿ”› ๐Ÿ— โš™๏ธ, โš™๏ธ ๐Ÿ’ฝ, & โ™ป ๐Ÿ‘œ ๐Ÿ”› ๐Ÿ’พ. ๐Ÿ‘‰ ๐Ÿค™ **๐Ÿ› ๏ธ**. - -### โšซ๏ธโ” ๐Ÿ› ๏ธ - -๐Ÿ”ค **๐Ÿ› ๏ธ** ๐Ÿ›Ž โš™๏ธ ๐ŸŒ– ๐ŸŽฏ ๐ŸŒŒ, ๐Ÿ•ด ๐Ÿ”— ๐Ÿ‘œ ๐Ÿ‘ˆ ๐Ÿƒ ๐Ÿƒโ€โ™‚ โš™๏ธ (๐Ÿ’– ๐Ÿ โ˜ ๐Ÿ”›): - -* ๐ŸŽฏ ๐Ÿ“‹ โช โšซ๏ธ **๐Ÿƒโ€โ™‚** ๐Ÿ”› ๐Ÿƒโ€โ™‚ โš™๏ธ. - * ๐Ÿ‘‰ ๐Ÿšซ ๐Ÿ”— ๐Ÿ“, ๐Ÿšซ ๐Ÿ“Ÿ, โšซ๏ธ ๐Ÿ”— **๐ŸŽฏ** ๐Ÿ‘œ ๐Ÿ‘ˆ โž– **๐Ÿ› ๏ธ** & ๐Ÿ”„ ๐Ÿƒโ€โ™‚ โš™๏ธ. -* ๐Ÿ™† ๐Ÿ“‹, ๐Ÿ™† ๐Ÿ“Ÿ, **๐Ÿ’ช ๐Ÿ•ด ๐Ÿ‘œ** ๐Ÿ•โ” โšซ๏ธ โž– **๐Ÿ› ๏ธ**. , ๐Ÿ•โ” ๐Ÿ“ค **๐Ÿ› ๏ธ ๐Ÿƒ**. -* ๐Ÿ› ๏ธ ๐Ÿ’ช **โŽ** (โš–๏ธ "๐Ÿ’ฅ") ๐Ÿ‘†, โš–๏ธ ๐Ÿƒโ€โ™‚ โš™๏ธ. ๐Ÿ‘ˆ โ˜, โšซ๏ธ โ›”๏ธ ๐Ÿƒ/โž– ๐Ÿ› ๏ธ, & โšซ๏ธ ๐Ÿ’ช **๐Ÿ™…โ€โ™‚ ๐Ÿ“ ๐Ÿ‘œ**. -* ๐Ÿ”  ๐Ÿˆธ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿƒ ๐Ÿ”› ๐Ÿ‘† ๐Ÿ’ป โœ”๏ธ ๐Ÿ› ๏ธ โ›… โšซ๏ธ, ๐Ÿ”  ๐Ÿƒโ€โ™‚ ๐Ÿ“‹, ๐Ÿ”  ๐Ÿšช, โ™’๏ธ. & ๐Ÿ“ค ๐Ÿ›Ž ๐Ÿ“š ๐Ÿ› ๏ธ ๐Ÿƒ **๐ŸŽ ๐Ÿ•ฐ** โช ๐Ÿ’ป ๐Ÿ”›. -* ๐Ÿ“ค ๐Ÿ’ช **๐Ÿ’— ๐Ÿ› ๏ธ** **๐ŸŽ ๐Ÿ“‹** ๐Ÿƒ ๐ŸŽ ๐Ÿ•ฐ. - -๐Ÿšฅ ๐Ÿ‘† โœ… ๐Ÿ‘… "๐Ÿ“‹ ๐Ÿ‘จโ€๐Ÿ’ผ" โš–๏ธ "โš™๏ธ ๐Ÿ–ฅ" (โš–๏ธ ๐ŸŽ ๐Ÿงฐ) ๐Ÿ‘† ๐Ÿƒโ€โ™‚ โš™๏ธ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ“š ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿƒโ€โ™‚. - -& , ๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ“ค ๐Ÿ’— ๐Ÿ› ๏ธ ๐Ÿƒ ๐ŸŽ ๐Ÿ–ฅ ๐Ÿ“‹ (๐ŸฆŽ, ๐Ÿ’„, ๐Ÿ“, โ™’๏ธ). ๐Ÿ‘ซ ๐Ÿ›Ž ๐Ÿƒ 1๏ธโƒฃ ๐Ÿ› ๏ธ ๐Ÿ“ ๐Ÿ“‘, โž• ๐ŸŽ โž• ๐Ÿ› ๏ธ. - - - ---- - -๐Ÿ”œ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ’ญ ๐Ÿ”บ ๐Ÿ–– โš– **๐Ÿ› ๏ธ** & **๐Ÿ“‹**, โžก๏ธ ๐Ÿ˜ฃ ๐Ÿ’ฌ ๐Ÿ”ƒ ๐Ÿ› ๏ธ. - -## ๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ•ด - -๐ŸŒ… ๐Ÿ’ผ, ๐Ÿ•โ” ๐Ÿ‘† โœ ๐Ÿ•ธ ๐Ÿ› ๏ธ, ๐Ÿ‘† ๐Ÿ’š โšซ๏ธ **๐Ÿ•ง ๐Ÿƒโ€โ™‚**, โžก, ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ช ๐Ÿ•ง ๐Ÿ” โšซ๏ธ. ๐Ÿ‘‰ โ†—๏ธ, ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐ŸŽฏ ๐Ÿค” โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ’š โšซ๏ธ ๐Ÿƒ ๐Ÿ•ด ๐ŸŽฏ โš , โœ‹๏ธ ๐ŸŒ… ๐Ÿ•ฐ ๐Ÿ‘† ๐Ÿ’š โšซ๏ธ ๐Ÿ•ง ๐Ÿƒโ€โ™‚ & **๐Ÿ’ช**. - -### ๐Ÿ›ฐ ๐Ÿ’ฝ - -๐Ÿ•โ” ๐Ÿ‘† โš’ ๐Ÿ†™ ๐Ÿ›ฐ ๐Ÿ’ฝ (โ˜ ๐Ÿ’ฝ, ๐Ÿ•น ๐ŸŽฐ, โ™’๏ธ.) ๐Ÿ™… ๐Ÿ‘œ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿƒ Uvicorn (โš–๏ธ ๐ŸŽ) โŽ, ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ•โ” ๐Ÿ› ๏ธ ๐ŸŒ. - -& โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘ท & ๐Ÿ”œ โš  **โฎ๏ธ ๐Ÿ› ๏ธ**. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ”— ๐Ÿ’ฝ ๐Ÿ’ธ, **๐Ÿƒโ€โ™‚ ๐Ÿ› ๏ธ** ๐Ÿ”œ ๐ŸŽฒ โ˜ ๏ธ. - -& ๐Ÿšฅ ๐Ÿ’ฝ โ (๐Ÿ–ผ โฎ๏ธ โ„น, โš–๏ธ ๐Ÿ› ๏ธ โšช๏ธโžก๏ธ โ˜ ๐Ÿ•โ€๐Ÿฆบ) ๐Ÿ‘† ๐ŸŽฒ **๐Ÿ† ๐Ÿšซ ๐Ÿ‘€ โšซ๏ธ**. & โ†ฉ๏ธ ๐Ÿ‘ˆ, ๐Ÿ‘† ๐Ÿ† ๐Ÿšซ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ โ ๐Ÿ› ๏ธ โŽ. , ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿšง โ˜ ๏ธ. ๐Ÿ‘ถ - -### ๐Ÿƒ ๐Ÿ” ๐Ÿ”› ๐Ÿ•ด - -๐Ÿข, ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’š ๐Ÿ’ฝ ๐Ÿ“‹ (โœ… Uvicorn) โ–ถ๏ธ ๐Ÿ” ๐Ÿ”› ๐Ÿ’ฝ ๐Ÿ•ด, & ๐Ÿต ๐Ÿ’ช ๐Ÿ™† **๐Ÿ—ฟ ๐Ÿฅ**, โœ”๏ธ ๐Ÿ› ๏ธ ๐Ÿ•ง ๐Ÿƒ โฎ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ (โœ… Uvicorn ๐Ÿƒโ€โ™‚ ๐Ÿ‘† FastAPI ๐Ÿ“ฑ). - -### ๐ŸŽ ๐Ÿ“‹ - -๐Ÿ† ๐Ÿ‘‰, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ›Ž โœ”๏ธ **๐ŸŽ ๐Ÿ“‹** ๐Ÿ‘ˆ ๐Ÿ”œ โš’ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿƒ ๐Ÿ”› ๐Ÿ•ด. & ๐Ÿ“š ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ”œ โš’ ๐Ÿ’ญ ๐ŸŽ ๐Ÿฆฒ โš–๏ธ ๐Ÿˆธ ๐Ÿƒ, ๐Ÿ–ผ, ๐Ÿ’ฝ. - -### ๐Ÿ–ผ ๐Ÿงฐ ๐Ÿƒ ๐Ÿ•ด - -๐Ÿ–ผ ๐Ÿงฐ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ‘‰ ๐Ÿ‘จโ€๐Ÿญ: - -* โ˜ -* Kubernetes -* โ˜ โœ -* โ˜ ๐Ÿ ๐Ÿ“ณ -* โœณ -* ๐Ÿ‘จโ€๐Ÿ’ป -* ๐Ÿต ๐Ÿ”˜ โ˜ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ• ๐Ÿ‘ซ ๐Ÿ•โ€๐Ÿฆบ -* ๐ŸŽ... - -๐Ÿ‘ค ๐Ÿ”œ ๐Ÿค ๐Ÿ‘† ๐ŸŒ… ๐Ÿงฑ ๐Ÿ–ผ โญ ๐Ÿ“ƒ. - -## โ - -๐ŸŽ โš’ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿƒ ๐Ÿ”› ๐Ÿ•ด, ๐Ÿ‘† ๐ŸŽฒ ๐Ÿ’š โš’ ๐Ÿ’ญ โšซ๏ธ **โ** โฎ๏ธ โŒ. - -### ๐Ÿ‘ฅ โš’ โŒ - -๐Ÿ‘ฅ, ๐Ÿ—ฟ, โš’ **โŒ**, ๐ŸŒ ๐Ÿ•ฐ. ๐Ÿ–ฅ ๐ŸŒ– *๐Ÿ•ง* โœ”๏ธ **๐Ÿ›** ๐Ÿ•ตโ€โ™‚ ๐ŸŽ ๐Ÿฅ‰. ๐Ÿ‘ถ - -& ๐Ÿ‘ฅ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿšง ๐Ÿ“‰ ๐Ÿ“Ÿ ๐Ÿ‘ฅ ๐Ÿ”Ž ๐Ÿ‘ˆ ๐Ÿ› & ๐Ÿ‘ฅ ๐Ÿ› ๏ธ ๐Ÿ†• โš’ (๐ŸŽฒ โŽ ๐Ÿ†• ๐Ÿ› ๐Ÿ’โ€โ™‚๏ธ ๐Ÿ‘ถ). - -### ๐Ÿคช โŒ ๐Ÿ” ๐Ÿต - -๐Ÿ•โ” ๐Ÿ— ๐Ÿ•ธ ๐Ÿ”— โฎ๏ธ FastAPI, ๐Ÿšฅ ๐Ÿ“ค โŒ ๐Ÿ‘† ๐Ÿ“Ÿ, FastAPI ๐Ÿ”œ ๐Ÿ›Ž ๐Ÿ”Œ โšซ๏ธ ๐Ÿ‘ ๐Ÿ“จ ๐Ÿ‘ˆ โฒ โŒ. ๐Ÿ›ก - -๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿคš **5๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ”— ๐Ÿ’ฝ โŒ** ๐Ÿ‘ˆ ๐Ÿ“จ, โœ‹๏ธ ๐Ÿˆธ ๐Ÿ”œ ๐Ÿ˜ฃ ๐Ÿ‘ท โญ ๐Ÿ“จ โ†ฉ๏ธ ๐Ÿ’ฅ ๐Ÿ•. - -### ๐Ÿฆ โŒ - ๐Ÿ’ฅ - -๐Ÿ‘, ๐Ÿ“ค 5๏ธโƒฃ๐Ÿ“† ๐Ÿ’ผ ๐ŸŒโ” ๐Ÿ‘ฅ โœ ๐Ÿ“Ÿ ๐Ÿ‘ˆ **๐Ÿ’ฅ ๐ŸŽ‚ ๐Ÿˆธ** โš’ Uvicorn & ๐Ÿ ๐Ÿ’ฅ. ๐Ÿ‘ถ - -& , ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿšซ ๐Ÿ’š ๐Ÿˆธ ๐Ÿšง โ˜ ๏ธ โ†ฉ๏ธ ๐Ÿ“ค โŒ 1๏ธโƒฃ ๐Ÿฅ‰, ๐Ÿ‘† ๐ŸŽฒ ๐Ÿ’š โšซ๏ธ **๐Ÿ˜ฃ ๐Ÿƒ** ๐ŸŒ˜ *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ’”. - -### โ โฎ๏ธ ๐Ÿ’ฅ - -โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿ’ผ โฎ๏ธ ๐Ÿค™ ๐Ÿ‘Ž โŒ ๐Ÿ‘ˆ ๐Ÿ’ฅ ๐Ÿƒโ€โ™‚ **๐Ÿ› ๏ธ**, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’š ๐Ÿ”ข ๐Ÿฆฒ ๐Ÿ‘ˆ ๐Ÿˆš **๐Ÿ”** ๐Ÿ› ๏ธ, ๐ŸŒ˜ ๐Ÿ‘ฉโ€โคโ€๐Ÿ‘จ ๐Ÿ•ฐ... - -/// tip - -...๐Ÿ‘ ๐Ÿšฅ ๐ŸŽ‚ ๐Ÿˆธ **๐Ÿ’ฅ โช** โšซ๏ธ ๐ŸŽฒ ๐Ÿšซ โš’ ๐Ÿ”‘ ๐Ÿšง ๐Ÿ” โšซ๏ธ โ™พ. โœ‹๏ธ ๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ‘€ โšซ๏ธ โฎ๏ธ ๐Ÿ› ๏ธ, โš–๏ธ ๐ŸŒ˜ โ–ถ๏ธ๏ธ โฎ๏ธ ๐Ÿ› ๏ธ. - -โžก๏ธ ๐ŸŽฏ ๐Ÿ”› ๐Ÿ‘‘ ๐Ÿ’ผ, ๐ŸŒโ” โšซ๏ธ ๐Ÿ’ช ๐Ÿ’ฅ ๐Ÿ• ๐ŸŽฏ ๐Ÿ’ผ **๐Ÿ”ฎ**, & โšซ๏ธ โš’ ๐Ÿ”‘ โ โšซ๏ธ. - -/// - -๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’š โœ”๏ธ ๐Ÿ‘œ ๐Ÿˆš ๐Ÿ” ๐Ÿ‘† ๐Ÿˆธ **๐Ÿ”ข ๐Ÿฆฒ**, โ†ฉ๏ธ ๐Ÿ‘ˆ โ˜, ๐ŸŽ ๐Ÿˆธ โฎ๏ธ Uvicorn & ๐Ÿ โช ๐Ÿ’ฅ, ๐Ÿ“ค ๐Ÿ•ณ ๐ŸŽ ๐Ÿ“Ÿ ๐ŸŽ ๐Ÿ“ฑ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ•ณ ๐Ÿ”ƒ โšซ๏ธ. - -### ๐Ÿ–ผ ๐Ÿงฐ โ ๐Ÿ” - -๐Ÿ† ๐Ÿ’ผ, ๐ŸŽ ๐Ÿงฐ ๐Ÿ‘ˆ โš™๏ธ **๐Ÿƒ ๐Ÿ“‹ ๐Ÿ”› ๐Ÿ•ด** โš™๏ธ ๐Ÿต ๐Ÿง **โ**. - -๐Ÿ–ผ, ๐Ÿ‘‰ ๐Ÿ’ช ๐Ÿต: - -* โ˜ -* Kubernetes -* โ˜ โœ -* โ˜ ๐Ÿ ๐Ÿ“ณ -* โœณ -* ๐Ÿ‘จโ€๐Ÿ’ป -* ๐Ÿต ๐Ÿ”˜ โ˜ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ• ๐Ÿ‘ซ ๐Ÿ•โ€๐Ÿฆบ -* ๐ŸŽ... - -## ๐Ÿงฌ - ๐Ÿ› ๏ธ & ๐Ÿ’พ - -โฎ๏ธ FastAPI ๐Ÿˆธ, โš™๏ธ ๐Ÿ’ฝ ๐Ÿ“‹ ๐Ÿ’– Uvicorn, ๐Ÿƒโ€โ™‚ โšซ๏ธ ๐Ÿ• **1๏ธโƒฃ ๐Ÿ› ๏ธ** ๐Ÿ’ช ๐Ÿฆ ๐Ÿ’— ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”. - -โœ‹๏ธ ๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’š ๐Ÿƒ ๐Ÿ“š ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ ๐ŸŽ ๐Ÿ•ฐ. - -### ๐Ÿ’— ๐Ÿ› ๏ธ - ๐Ÿ‘จโ€๐Ÿญ - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐ŸŒ… ๐Ÿ‘ฉโ€๐Ÿ’ป ๐ŸŒ˜ โšซ๏ธโ” ๐Ÿ‘ ๐Ÿ› ๏ธ ๐Ÿ’ช ๐Ÿต (๐Ÿ–ผ ๐Ÿšฅ ๐Ÿ•น ๐ŸŽฐ ๐Ÿšซ ๐Ÿ’โ€โ™‚๏ธ ๐Ÿฆ) & ๐Ÿ‘† โœ”๏ธ **๐Ÿ’— ๐Ÿš** ๐Ÿ’ฝ ๐Ÿ’ฝ, โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ **๐Ÿ’— ๐Ÿ› ๏ธ** ๐Ÿƒโ€โ™‚ โฎ๏ธ ๐ŸŽ ๐Ÿˆธ ๐ŸŽ ๐Ÿ•ฐ, & ๐Ÿ“Ž ๐ŸŒ ๐Ÿ“จ ๐Ÿ‘ช ๐Ÿ‘ซ. - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿƒ **๐Ÿ’— ๐Ÿ› ๏ธ** ๐ŸŽ ๐Ÿ› ๏ธ ๐Ÿ“‹, ๐Ÿ‘ซ ๐Ÿ›Ž ๐Ÿค™ **๐Ÿ‘จโ€๐Ÿญ**. - -### ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ & โ›ด - -๐Ÿ’ญ โšช๏ธโžก๏ธ ๐Ÿฉบ [๐Ÿ”ƒ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”](https.md){.internal-link target=_blank} ๐Ÿ‘ˆ ๐Ÿ•ด 1๏ธโƒฃ ๐Ÿ› ๏ธ ๐Ÿ’ช ๐Ÿ‘‚ ๐Ÿ”› 1๏ธโƒฃ ๐ŸŒ€ โ›ด & ๐Ÿ“ข ๐Ÿ“ข ๐Ÿ’ฝ โ“ - -๐Ÿ‘‰ โ˜‘. - -, ๐Ÿ’ช โœ”๏ธ **๐Ÿ’— ๐Ÿ› ๏ธ** ๐ŸŽ ๐Ÿ•ฐ, ๐Ÿ“ค โœ”๏ธ **๐Ÿ‘ ๐Ÿ› ๏ธ ๐Ÿ‘‚ ๐Ÿ”› โ›ด** ๐Ÿ‘ˆ โคด๏ธ ๐Ÿ“ถ ๐Ÿ“ป ๐Ÿ”  ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ ๐ŸŒŒ. - -### ๐Ÿ’พ ๐Ÿ“ ๐Ÿ› ๏ธ - -๐Ÿ”œ, ๐Ÿ•โ” ๐Ÿ“‹ ๐Ÿ“ ๐Ÿ‘œ ๐Ÿ’พ, ๐Ÿ–ผ, ๐ŸŽฐ ๐Ÿซ ๐Ÿท ๐Ÿ”ข, โš–๏ธ ๐ŸŽš โญ• ๐Ÿ“ ๐Ÿ”ข, ๐ŸŒ ๐Ÿ‘ˆ **๐Ÿด ๐Ÿ‘„ ๐Ÿ’พ (๐Ÿ’พ)** ๐Ÿ’ฝ. - -& ๐Ÿ’— ๐Ÿ› ๏ธ ๐Ÿ›Ž **๐Ÿšซ ๐Ÿ’ฐ ๐Ÿ™† ๐Ÿ’พ**. ๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ ๐Ÿ”  ๐Ÿƒ ๐Ÿ› ๏ธ โœ”๏ธ ๐Ÿšฎ ๐Ÿ‘ ๐Ÿ‘œ, ๐Ÿ”ข, & ๐Ÿ’พ. & ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ˜ฉ โญ• ๐Ÿ’ธ ๐Ÿ’พ ๐Ÿ‘† ๐Ÿ“Ÿ, **๐Ÿ”  ๐Ÿ› ๏ธ** ๐Ÿ”œ ๐Ÿด ๐ŸŒ“ ๐Ÿ’ธ ๐Ÿ’พ. - -### ๐Ÿ’ฝ ๐Ÿ’พ - -๐Ÿ–ผ, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“Ÿ ๐Ÿ“ ๐ŸŽฐ ๐Ÿซ ๐Ÿท โฎ๏ธ **1๏ธโƒฃ ๐Ÿ’พ ๐Ÿ“**, ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿƒ 1๏ธโƒฃ ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ, โšซ๏ธ ๐Ÿ”œ ๐Ÿด ๐ŸŒ˜ 1๏ธโƒฃ ๐Ÿ’พ ๐Ÿ’พ. & ๐Ÿšฅ ๐Ÿ‘† โ–ถ๏ธ **4๏ธโƒฃ ๐Ÿ› ๏ธ** (4๏ธโƒฃ ๐Ÿ‘จโ€๐Ÿญ), ๐Ÿ”  ๐Ÿ”œ ๐Ÿด 1๏ธโƒฃ ๐Ÿ’พ ๐Ÿ’พ. ๐ŸŒ, ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿด **4๏ธโƒฃ ๐Ÿ’พ ๐Ÿ’พ**. - -& ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ›ฐ ๐Ÿ’ฝ โš–๏ธ ๐Ÿ•น ๐ŸŽฐ ๐Ÿ•ด โœ”๏ธ 3๏ธโƒฃ ๐Ÿ’พ ๐Ÿ’พ, ๐Ÿ”„ ๐Ÿ“ ๐ŸŒ… ๐ŸŒ˜ 4๏ธโƒฃ ๐Ÿ’พ ๐Ÿ’พ ๐Ÿ”œ ๐Ÿค• โš . ๐Ÿ‘ถ - -### ๐Ÿ’— ๐Ÿ› ๏ธ - ๐Ÿ–ผ - -๐Ÿ‘‰ ๐Ÿ–ผ, ๐Ÿ“ค **๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ› ๏ธ** ๐Ÿ‘ˆ โ–ถ๏ธ & ๐ŸŽ› 2๏ธโƒฃ **๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ**. - -๐Ÿ‘‰ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ› ๏ธ ๐Ÿ”œ ๐ŸŽฒ 1๏ธโƒฃ ๐Ÿ‘‚ ๐Ÿ”› **โ›ด** ๐Ÿ“ข. & โšซ๏ธ ๐Ÿ”œ ๐Ÿ“ถ ๐ŸŒ ๐Ÿ“ป ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ. - -๐Ÿ‘ˆ ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿ• ๐Ÿƒโ€โ™‚ ๐Ÿ‘† ๐Ÿˆธ, ๐Ÿ‘ซ ๐Ÿ”œ ๐ŸŽญ ๐Ÿ‘‘ ๐Ÿ“Š ๐Ÿ“จ **๐Ÿ“จ** & ๐Ÿ“จ **๐Ÿ“จ**, & ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ“ ๐Ÿ•ณ ๐Ÿ‘† ๐Ÿšฎ ๐Ÿ”ข ๐Ÿ’พ. - - - -& โ†—๏ธ, ๐ŸŽ ๐ŸŽฐ ๐Ÿ”œ ๐ŸŽฒ โœ”๏ธ **๐ŸŽ ๐Ÿ› ๏ธ** ๐Ÿƒ ๐Ÿ‘, โ†–๏ธ โšช๏ธโžก๏ธ ๐Ÿ‘† ๐Ÿˆธ. - -๐Ÿ˜Œ โ„น ๐Ÿ‘ˆ ๐ŸŒ **๐Ÿ’ฝ โš™๏ธ** ๐Ÿ”  ๐Ÿ› ๏ธ ๐Ÿ’ช **๐Ÿช€** ๐Ÿ“š ๐Ÿคญ ๐Ÿ•ฐ, โœ‹๏ธ **๐Ÿ’พ (๐Ÿ’พ)** ๐Ÿ›Ž ๐Ÿšง ๐ŸŒ– โš–๏ธ ๐ŸŒ˜ **โš–**. - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ”จ โญ ๐Ÿ’ธ ๐Ÿ“Š ๐Ÿ”  ๐Ÿ•ฐ & ๐Ÿ‘† โœ”๏ธ ๐Ÿ“š ๐Ÿ‘ฉโ€๐Ÿ’ป, โคด๏ธ **๐Ÿ’ฝ ๐Ÿ› ๏ธ** ๐Ÿ”œ ๐ŸŽฒ *โš–* (โ†ฉ๏ธ ๐Ÿ•ง ๐Ÿ”œ ๐Ÿ†™ & ๐Ÿ”ฝ ๐Ÿ”œ). - -### ๐Ÿ–ผ ๐Ÿงฌ ๐Ÿงฐ & ๐ŸŽ› - -๐Ÿ“ค ๐Ÿ’ช ๐Ÿ“š ๐ŸŽฏ ๐Ÿ† ๐Ÿ‘‰, & ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ฌ ๐Ÿ‘† ๐ŸŒ… ๐Ÿ”ƒ ๐ŸŽฏ ๐ŸŽ› โญ ๐Ÿ“ƒ, ๐Ÿ–ผ ๐Ÿ•โ” ๐Ÿ’ฌ ๐Ÿ”ƒ โ˜ & ๐Ÿ“ฆ. - -๐Ÿ‘‘ โš› ๐Ÿค” ๐Ÿ‘ˆ ๐Ÿ“ค โœ”๏ธ **๐Ÿ‘** ๐Ÿฆฒ ๐Ÿšš **โ›ด** **๐Ÿ“ข ๐Ÿ“ข**. & โคด๏ธ โšซ๏ธ โœ”๏ธ โœ”๏ธ ๐ŸŒŒ **๐Ÿ“ถ** ๐Ÿ“ป ๐Ÿ” **๐Ÿ› ๏ธ/๐Ÿ‘จโ€๐Ÿญ**. - -๐Ÿ“ฅ ๐Ÿ’ช ๐ŸŒ€ & ๐ŸŽ›: - -* **๐Ÿ** ๐Ÿ› ๏ธ **Uvicorn ๐Ÿ‘จโ€๐Ÿญ** - * ๐Ÿ ๐Ÿ”œ **๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ** ๐Ÿ‘‚ ๐Ÿ”› **๐Ÿ“ข** & **โ›ด**, ๐Ÿงฌ ๐Ÿ”œ โœ”๏ธ **๐Ÿ’— Uvicorn ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ** -* **Uvicorn** ๐Ÿ› ๏ธ **Uvicorn ๐Ÿ‘จโ€๐Ÿญ** - * 1๏ธโƒฃ Uvicorn **๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ** ๐Ÿ”œ ๐Ÿ‘‚ ๐Ÿ”› **๐Ÿ“ข** & **โ›ด**, & โšซ๏ธ ๐Ÿ”œ โ–ถ๏ธ **๐Ÿ’— Uvicorn ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ** -* **Kubernetes** & ๐ŸŽ ๐Ÿ“Ž **๐Ÿ“ฆ โš™๏ธ** - * ๐Ÿ•ณ **โ˜** ๐Ÿงฝ ๐Ÿ”œ ๐Ÿ‘‚ ๐Ÿ”› **๐Ÿ“ข** & **โ›ด**. ๐Ÿงฌ ๐Ÿ”œ โœ”๏ธ **๐Ÿ’— ๐Ÿ“ฆ**, ๐Ÿ”  โฎ๏ธ **1๏ธโƒฃ Uvicorn ๐Ÿ› ๏ธ** ๐Ÿƒโ€โ™‚ -* **โ˜ ๐Ÿ•โ€๐Ÿฆบ** ๐Ÿ‘ˆ ๐Ÿต ๐Ÿ‘‰ ๐Ÿ‘† - * โ˜ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”œ ๐ŸŽฒ **๐Ÿต ๐Ÿงฌ ๐Ÿ‘†**. โšซ๏ธ ๐Ÿ”œ ๐ŸŽฒ โžก๏ธ ๐Ÿ‘† ๐Ÿ”ฌ **๐Ÿ› ๏ธ ๐Ÿƒ**, โš–๏ธ **๐Ÿ“ฆ ๐Ÿ–ผ** โš™๏ธ, ๐Ÿ™† ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ”œ ๐ŸŒ… ๐ŸŽฒ **๐Ÿ‘ Uvicorn ๐Ÿ› ๏ธ**, & โ˜ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”œ ๐Ÿˆš ๐Ÿ” โšซ๏ธ. - -/// tip - -๐Ÿšซ ๐Ÿ˜Ÿ ๐Ÿšฅ ๐Ÿ‘ซ ๐Ÿฌ ๐Ÿ”ƒ **๐Ÿ“ฆ**, โ˜, โš–๏ธ Kubernetes ๐Ÿšซ โš’ ๐Ÿ“š ๐Ÿ”‘. - -๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ฌ ๐Ÿ‘† ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ“ฆ ๐Ÿ–ผ, โ˜, Kubernetes, โ™’๏ธ. ๐Ÿ”ฎ ๐Ÿ“ƒ: [FastAPI ๐Ÿ“ฆ - โ˜](docker.md){.internal-link target=_blank}. - -/// - -## โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ - -๐Ÿ“ค ๐Ÿ“š ๐Ÿ’ผ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’š ๐ŸŽญ ๐Ÿ“ถ **โญ โ–ถ๏ธ** ๐Ÿ‘† ๐Ÿˆธ. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿƒ **๐Ÿ’ฝ ๐Ÿ› ๏ธ**. - -โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’š ๐ŸŽญ ๐Ÿ‘‰ ๐Ÿ” ๐Ÿ•ด **๐Ÿ•**. - -, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’š โœ”๏ธ **๐Ÿ‘ ๐Ÿ› ๏ธ** ๐ŸŽญ ๐Ÿ‘ˆ **โฎ๏ธ ๐Ÿ”**, โญ โ–ถ๏ธ ๐Ÿˆธ. - -& ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ‘ ๐Ÿ› ๏ธ ๐Ÿƒ ๐Ÿ‘ˆ โฎ๏ธ ๐Ÿ” ** ๐Ÿšฅ โฎ๏ธ, ๐Ÿ‘† โ–ถ๏ธ **๐Ÿ’— ๐Ÿ› ๏ธ** (๐Ÿ’— ๐Ÿ‘จโ€๐Ÿญ) ๐Ÿˆธ โšซ๏ธ. ๐Ÿšฅ ๐Ÿ‘ˆ ๐Ÿ” ๐Ÿƒ **๐Ÿ’— ๐Ÿ› ๏ธ**, ๐Ÿ‘ซ ๐Ÿ”œ **โŽ** ๐Ÿ‘ท ๐Ÿƒโ€โ™‚ โšซ๏ธ ๐Ÿ”› **๐Ÿ”—**, & ๐Ÿšฅ ๐Ÿ“ถ ๐Ÿ•ณ ๐Ÿ’Ž ๐Ÿ’– ๐Ÿ’ฝ ๐Ÿ› ๏ธ, ๐Ÿ‘ซ ๐Ÿ’ช ๐Ÿค• โš” โฎ๏ธ ๐Ÿ”  ๐ŸŽ. - -โ†—๏ธ, ๐Ÿ“ค ๐Ÿ’ผ ๐ŸŒโ” ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ โš  ๐Ÿƒ โฎ๏ธ ๐Ÿ” ๐Ÿ’— ๐Ÿ•ฐ, ๐Ÿ‘ˆ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ“š โฉ ๐Ÿต. - -/// tip - -, โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ โš“๏ธ ๐Ÿ”› ๐Ÿ‘† ๐Ÿ–ฅ, ๐Ÿ’ผ ๐Ÿ‘† **5๏ธโƒฃ๐Ÿ“† ๐Ÿšซ ๐Ÿ’ช ๐Ÿ™† โฎ๏ธ ๐Ÿ”** โญ โ–ถ๏ธ ๐Ÿ‘† ๐Ÿˆธ. - -๐Ÿ‘ˆ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ โœ”๏ธ ๐Ÿ˜Ÿ ๐Ÿ”ƒ ๐Ÿ™† ๐Ÿ‘‰. ๐Ÿคท - -/// - -### ๐Ÿ–ผ โฎ๏ธ ๐Ÿ” ๐ŸŽ› - -๐Ÿ‘‰ ๐Ÿ”œ **๐Ÿช€ ๐Ÿ™‡** ๐Ÿ”› ๐ŸŒŒ ๐Ÿ‘† **๐Ÿ› ๏ธ ๐Ÿ‘† โš™๏ธ**, & โšซ๏ธ ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ”— ๐ŸŒŒ ๐Ÿ‘† โ–ถ๏ธ ๐Ÿ“‹, ๐Ÿšš โ, โ™’๏ธ. - -๐Ÿ“ฅ ๐Ÿ’ช ๐Ÿ’ญ: - -* "๐Ÿ•‘ ๐Ÿ“ฆ" Kubernetes ๐Ÿ‘ˆ ๐Ÿƒ โญ ๐Ÿ‘† ๐Ÿ“ฑ ๐Ÿ“ฆ -* ๐ŸŽ‰ โœ ๐Ÿ‘ˆ ๐Ÿƒ โฎ๏ธ ๐Ÿ” & โคด๏ธ โ–ถ๏ธ ๐Ÿ‘† ๐Ÿˆธ - * ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐ŸŒŒ โ–ถ๏ธ/โ *๐Ÿ‘ˆ* ๐ŸŽ‰ โœ, ๐Ÿ” โŒ, โ™’๏ธ. - -/// tip - -๐Ÿ‘ค ๐Ÿ”œ ๐Ÿค ๐Ÿ‘† ๐ŸŒ… ๐Ÿงฑ ๐Ÿ–ผ ๐Ÿ”จ ๐Ÿ‘‰ โฎ๏ธ ๐Ÿ“ฆ ๐Ÿ”ฎ ๐Ÿ“ƒ: [FastAPI ๐Ÿ“ฆ - โ˜](docker.md){.internal-link target=_blank}. - -/// - -## โ„น ๐Ÿ› ๏ธ - -๐Ÿ‘† ๐Ÿ’ฝ(โ“‚) () **โ„น**, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿด โš–๏ธ **โš™๏ธ**, โฎ๏ธ ๐Ÿ‘† ๐Ÿ“‹, ๐Ÿ“Š ๐Ÿ•ฐ ๐Ÿ”› ๐Ÿ’ฝ, & ๐Ÿ’พ ๐Ÿ’พ ๐Ÿ’ช. - -โ” ๐ŸŒ… โš™๏ธ โ„น ๐Ÿ‘† ๐Ÿ’š ๐Ÿ˜ฉ/โ™ป โ“ โšซ๏ธ ๐Ÿ’ช โฉ ๐Ÿ’ญ "๐Ÿšซ ๐ŸŒ…", โœ‹๏ธ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’š ๐Ÿด **๐ŸŒ… ๐Ÿ’ช ๐Ÿต ๐Ÿ’ฅ**. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ธ 3๏ธโƒฃ ๐Ÿ’ฝ โœ‹๏ธ ๐Ÿ‘† โš™๏ธ ๐Ÿ•ด ๐Ÿฅ ๐Ÿ– ๐Ÿ‘ซ ๐Ÿ’พ & ๐Ÿ’ฝ, ๐Ÿ‘† ๐ŸŽฒ **๐Ÿ—‘ ๐Ÿ’ธ** ๐Ÿ‘ถ, & ๐ŸŽฒ **๐Ÿ—‘ ๐Ÿ’ฝ ๐Ÿ”ฆ ๐Ÿ‹๏ธ** ๐Ÿ‘ถ, โ™’๏ธ. - -๐Ÿ‘ˆ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘ป โœ”๏ธ ๐Ÿ•ด 2๏ธโƒฃ ๐Ÿ’ฝ & โš™๏ธ โ†• ๐ŸŒ ๐Ÿ‘ซ โ„น (๐Ÿ’ฝ, ๐Ÿ’พ, ๐Ÿ’พ, ๐Ÿ•ธ ๐Ÿ’ฟ, โ™’๏ธ). - -๐Ÿ”› ๐ŸŽ โœ‹, ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ 2๏ธโƒฃ ๐Ÿ’ฝ & ๐Ÿ‘† โš™๏ธ **1๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ‘ซ ๐Ÿ’ฝ & ๐Ÿ’พ**, โ˜ 1๏ธโƒฃ ๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿ’ญ ๐ŸŒ… ๐Ÿ’พ, & ๐Ÿ’ฝ ๐Ÿ”œ โœ”๏ธ โš™๏ธ ๐Ÿ’พ "๐Ÿ’พ" (โ” ๐Ÿ’ช ๐Ÿ’ฏ ๐Ÿ•ฐ ๐ŸŒ), โš–๏ธ **๐Ÿ’ฅ**. โš–๏ธ 1๏ธโƒฃ ๐Ÿ› ๏ธ ๐Ÿ’ช ๐Ÿ’ช ๐Ÿ“Š & ๐Ÿ”œ โœ”๏ธ โŒ› โญ ๐Ÿ’ฝ ๐Ÿ†“ ๐Ÿ”„. - -๐Ÿ‘‰ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘ ๐Ÿคš **1๏ธโƒฃ โž• ๐Ÿ’ฝ** & ๐Ÿƒ ๐Ÿ› ๏ธ ๐Ÿ”› โšซ๏ธ ๐Ÿ‘ˆ ๐Ÿ‘ซ ๐ŸŒ โœ”๏ธ **๐Ÿฅƒ ๐Ÿ’พ & ๐Ÿ’ฝ ๐Ÿ•ฐ**. - -๐Ÿ“ค ๐Ÿคž ๐Ÿ‘ˆ ๐Ÿค” ๐Ÿ‘† โœ”๏ธ **๐ŸŒต** โš™๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ. ๐ŸŽฒ โšซ๏ธ ๐Ÿšถ ๐Ÿฆ , โš–๏ธ ๐ŸŽฒ ๐ŸŽ ๐Ÿ•โ€๐Ÿฆบ โš–๏ธ ๐Ÿค– โ–ถ๏ธ โš™๏ธ โšซ๏ธ. & ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š โœ”๏ธ โž• โ„น ๐Ÿ”’ ๐Ÿ‘ˆ ๐Ÿ’ผ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ **โŒ ๐Ÿ”ข** ๐ŸŽฏ, ๐Ÿ–ผ, ๐Ÿ•ณ **๐Ÿ–– 5๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ 9๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ** โ„น ๐Ÿ› ๏ธ. โ˜ ๐Ÿ‘ˆ ๐Ÿ“š ๐ŸŽฒ ๐Ÿ‘‘ ๐Ÿ‘œ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’š โš– & โš™๏ธ โš’ ๐Ÿ‘† ๐Ÿ› ๏ธ. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ™… ๐Ÿงฐ ๐Ÿ’– `htop` ๐Ÿ‘€ ๐Ÿ’ฝ & ๐Ÿ’พ โš™๏ธ ๐Ÿ‘† ๐Ÿ’ฝ โš–๏ธ ๐Ÿ’ธ โš™๏ธ ๐Ÿ”  ๐Ÿ› ๏ธ. โš–๏ธ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŒ– ๐Ÿ— โš– ๐Ÿงฐ, โ” 5๏ธโƒฃ๐Ÿ“† ๐Ÿ“Ž ๐Ÿคญ ๐Ÿ’ฝ, โ™’๏ธ. - -## ๐ŸŒƒ - -๐Ÿ‘† โœ”๏ธ ๐Ÿ‘‚ ๐Ÿ“ฅ ๐Ÿ‘‘ ๐Ÿ”ง ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’ช โœ”๏ธ ๐Ÿคฏ ๐Ÿ•โ” ๐Ÿค” โ” ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿˆธ: - -* ๐Ÿ’‚โ€โ™‚ - ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” -* ๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ•ด -* โ -* ๐Ÿงฌ (๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿƒ) -* ๐Ÿ’พ -* โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ - -๐Ÿค” ๐Ÿ‘‰ ๐Ÿ’ญ & โ” โœ” ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿค ๐Ÿ‘† ๐Ÿค” ๐Ÿ’ช โœŠ ๐Ÿ™† ๐Ÿšซ ๐Ÿ•โ” ๐Ÿ› ๏ธ & ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ. ๐Ÿ‘ถ - -โญ ๐Ÿ“„, ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿค ๐Ÿ‘† ๐ŸŒ… ๐Ÿงฑ ๐Ÿ–ผ ๐Ÿ’ช ๐ŸŽ› ๐Ÿ‘† ๐Ÿ’ช โฉ. ๐Ÿ‘ถ diff --git a/docs/em/docs/deployment/docker.md b/docs/em/docs/deployment/docker.md deleted file mode 100644 index 2152f1a0e..000000000 --- a/docs/em/docs/deployment/docker.md +++ /dev/null @@ -1,731 +0,0 @@ -# FastAPI ๐Ÿ“ฆ - โ˜ - -๐Ÿ•โ” ๐Ÿ› ๏ธ FastAPI ๐Ÿˆธ โš  ๐ŸŽฏ ๐Ÿ— **๐Ÿ’พ ๐Ÿ“ฆ ๐Ÿ–ผ**. โšซ๏ธ ๐Ÿ›Ž ๐Ÿ”จ โš™๏ธ **โ˜**. ๐Ÿ‘† ๐Ÿ’ช โคด๏ธ ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ“ฆ ๐Ÿ–ผ 1๏ธโƒฃ ๐Ÿ‘ฉโ€โคโ€๐Ÿ‘จ ๐Ÿ’ช ๐ŸŒŒ. - -โš™๏ธ ๐Ÿ’พ ๐Ÿ“ฆ โœ”๏ธ ๐Ÿ“š ๐Ÿ“ˆ โœ… **๐Ÿ’‚โ€โ™‚**, **๐Ÿ”ฌ**, **๐Ÿฆ**, & ๐ŸŽ. - -/// tip - -๐Ÿƒ & โช ๐Ÿ’ญ ๐Ÿ‘‰ ๐Ÿ’ฉ โ“ ๐Ÿฆ˜ [`Dockerfile` ๐Ÿ”› ๐Ÿ‘ถ](#fastapi). - -/// - -
-๐Ÿ“ ๐ŸŽฎ ๐Ÿ‘ถ - -```Dockerfile -FROM python:3.9 - -WORKDIR /code - -COPY ./requirements.txt /code/requirements.txt - -RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt - -COPY ./app /code/app - -CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] - -# If running behind a proxy like Nginx or Traefik add --proxy-headers -# CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80", "--proxy-headers"] -``` - -
- -## โšซ๏ธโ” ๐Ÿ“ฆ - -๐Ÿ“ฆ (โœด๏ธ ๐Ÿ’พ ๐Ÿ“ฆ) ๐Ÿ“ถ **๐Ÿ’ฟ** ๐ŸŒŒ ๐Ÿ“ฆ ๐Ÿˆธ โœ… ๐ŸŒ ๐Ÿ‘ซ ๐Ÿ”— & ๐Ÿ’ช ๐Ÿ“ โช ๐Ÿšง ๐Ÿ‘ซ โŽ โšช๏ธโžก๏ธ ๐ŸŽ ๐Ÿ“ฆ (๐ŸŽ ๐Ÿˆธ โš–๏ธ ๐Ÿฆฒ) ๐ŸŽ โš™๏ธ. - -๐Ÿ’พ ๐Ÿ“ฆ ๐Ÿƒ โš™๏ธ ๐ŸŽ ๐Ÿ’พ ๐Ÿ’พ ๐Ÿฆ  (๐ŸŽฐ, ๐Ÿ•น ๐ŸŽฐ, โ˜ ๐Ÿ’ฝ, โ™’๏ธ). ๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ ๐Ÿ‘ซ ๐Ÿ“ถ ๐Ÿ’ฟ (๐Ÿ”ฌ ๐ŸŒ• ๐Ÿ•น ๐ŸŽฐ ๐Ÿ‘ ๐ŸŽ‚ ๐Ÿƒโ€โ™‚ โš™๏ธ). - -๐Ÿ‘‰ ๐ŸŒŒ, ๐Ÿ“ฆ ๐Ÿด **๐Ÿฅ โ„น**, ๐Ÿ’ธ โญ ๐Ÿƒโ€โ™‚ ๐Ÿ› ๏ธ ๐Ÿ”— (๐Ÿ•น ๐ŸŽฐ ๐Ÿ”œ ๐Ÿด ๐ŸŒ… ๐ŸŒ…). - -๐Ÿ“ฆ โœ”๏ธ ๐Ÿ‘ซ ๐Ÿ‘ **โŽ** ๐Ÿƒโ€โ™‚ ๐Ÿ› ๏ธ (๐Ÿ›Ž 1๏ธโƒฃ ๐Ÿ› ๏ธ), ๐Ÿ“ โš™๏ธ, & ๐Ÿ•ธ, ๐Ÿ”ฌ ๐Ÿ› ๏ธ, ๐Ÿ’‚โ€โ™‚, ๐Ÿ› ๏ธ, โ™’๏ธ. - -## โšซ๏ธโ” ๐Ÿ“ฆ ๐Ÿ–ผ - -**๐Ÿ“ฆ** ๐Ÿƒ โšช๏ธโžก๏ธ **๐Ÿ“ฆ ๐Ÿ–ผ**. - -๐Ÿ“ฆ ๐Ÿ–ผ **๐ŸŽป** โฌ ๐ŸŒ ๐Ÿ“, ๐ŸŒ ๐Ÿ”ข, & ๐Ÿ”ข ๐Ÿ“‹/๐Ÿ“‹ ๐Ÿ‘ˆ ๐Ÿ”œ ๐ŸŽ ๐Ÿ“ฆ. **๐ŸŽป** ๐Ÿ“ฅ โ›“ ๐Ÿ‘ˆ ๐Ÿ“ฆ **๐Ÿ–ผ** ๐Ÿšซ ๐Ÿƒ, โšซ๏ธ ๐Ÿšซ โž– ๐Ÿ› ๏ธ, โšซ๏ธ ๐Ÿ•ด ๐Ÿ“ฆ ๐Ÿ“ & ๐Ÿ—ƒ. - -๐Ÿ”… "**๐Ÿ“ฆ ๐Ÿ–ผ**" ๐Ÿ‘ˆ ๐Ÿช ๐ŸŽป ๐ŸŽš,"**๐Ÿ“ฆ**" ๐Ÿ›Ž ๐Ÿ”— ๐Ÿƒโ€โ™‚ ๐Ÿ‘, ๐Ÿ‘œ ๐Ÿ‘ˆ โž– **๐Ÿ› ๏ธ**. - -๐Ÿ•โ” **๐Ÿ“ฆ** โ–ถ๏ธ & ๐Ÿƒโ€โ™‚ (โ–ถ๏ธ โšช๏ธโžก๏ธ **๐Ÿ“ฆ ๐Ÿ–ผ**) โšซ๏ธ ๐Ÿ’ช โœ โš–๏ธ ๐Ÿ”€ ๐Ÿ“, ๐ŸŒ ๐Ÿ”ข, โ™’๏ธ. ๐Ÿ‘ˆ ๐Ÿ”€ ๐Ÿ”œ ๐Ÿ”€ ๐Ÿ•ด ๐Ÿ‘ˆ ๐Ÿ“ฆ, โœ‹๏ธ ๐Ÿ”œ ๐Ÿšซ ๐Ÿ˜ฃ ๐Ÿ‘ฝ ๐Ÿ“ฆ ๐Ÿ–ผ (๐Ÿ”œ ๐Ÿšซ ๐Ÿ–Š ๐Ÿ’พ). - -๐Ÿ“ฆ ๐Ÿ–ผ โญ **๐Ÿ“‹** ๐Ÿ“ & ๐ŸŽš, โœ… `python` & ๐Ÿ“ `main.py`. - -& **๐Ÿ“ฆ** โšซ๏ธ (๐Ÿ”… **๐Ÿ“ฆ ๐Ÿ–ผ**) โ˜‘ ๐Ÿƒ ๐Ÿ‘ ๐Ÿ–ผ, โญ **๐Ÿ› ๏ธ**. ๐Ÿ‘, ๐Ÿ“ฆ ๐Ÿƒ ๐Ÿ•ด ๐Ÿ•โ” โšซ๏ธ โœ”๏ธ **๐Ÿ› ๏ธ ๐Ÿƒ** (& ๐Ÿ›Ž โšซ๏ธ ๐Ÿ•ด ๐Ÿ‘ ๐Ÿ› ๏ธ). ๐Ÿ“ฆ โ›”๏ธ ๐Ÿ•โ” ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ ๐Ÿ› ๏ธ ๐Ÿƒ โšซ๏ธ. - -## ๐Ÿ“ฆ ๐Ÿ–ผ - -โ˜ โœ”๏ธ 1๏ธโƒฃ ๐Ÿ‘‘ ๐Ÿงฐ โœ & ๐Ÿ› ๏ธ **๐Ÿ“ฆ ๐Ÿ–ผ** & **๐Ÿ“ฆ**. - -& ๐Ÿ“ค ๐Ÿ“ข โ˜ ๐ŸŽก โฎ๏ธ ๐Ÿค-โš’ **๐Ÿ›‚ ๐Ÿ“ฆ ๐Ÿ–ผ** ๐Ÿ“š ๐Ÿงฐ, ๐ŸŒ, ๐Ÿ’ฝ, & ๐Ÿˆธ. - -๐Ÿ–ผ, ๐Ÿ“ค ๐Ÿ›‚ ๐Ÿ ๐Ÿ–ผ. - -& ๐Ÿ“ค ๐Ÿ“š ๐ŸŽ ๐Ÿ–ผ ๐ŸŽ ๐Ÿ‘œ ๐Ÿ’– ๐Ÿ’ฝ, ๐Ÿ–ผ: - -* โœณ -* โœณ -* โœณ -* โœณ, โ™’๏ธ. - -โš™๏ธ ๐Ÿค-โš’ ๐Ÿ“ฆ ๐Ÿ–ผ โšซ๏ธ ๐Ÿ“ถ โฉ **๐ŸŒ€** & โš™๏ธ ๐ŸŽ ๐Ÿงฐ. ๐Ÿ–ผ, ๐Ÿ”„ ๐Ÿ‘… ๐Ÿ†• ๐Ÿ’ฝ. ๐ŸŒ… ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ **๐Ÿ›‚ ๐Ÿ–ผ**, & ๐Ÿ”— ๐Ÿ‘ซ โฎ๏ธ ๐ŸŒ ๐Ÿ”ข. - -๐Ÿ‘ˆ ๐ŸŒŒ, ๐Ÿ“š ๐Ÿ’ผ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ก ๐Ÿ”ƒ ๐Ÿ“ฆ & โ˜ & ๐Ÿค-โš™๏ธ ๐Ÿ‘ˆ ๐Ÿ’ก โฎ๏ธ ๐Ÿ“š ๐ŸŽ ๐Ÿงฐ & ๐Ÿฆฒ. - -, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿƒ **๐Ÿ’— ๐Ÿ“ฆ** โฎ๏ธ ๐ŸŽ ๐Ÿ‘œ, ๐Ÿ’– ๐Ÿ’ฝ, ๐Ÿ ๐Ÿˆธ, ๐Ÿ•ธ ๐Ÿ’ฝ โฎ๏ธ ๐Ÿ˜ฅ ๐Ÿ•ธ ๐Ÿˆธ, & ๐Ÿ”— ๐Ÿ‘ซ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ“จ ๐Ÿ‘ซ ๐Ÿ”— ๐Ÿ•ธ. - -๐ŸŒ ๐Ÿ“ฆ ๐Ÿงพ โš™๏ธ (๐Ÿ’– โ˜ โš–๏ธ Kubernetes) โœ”๏ธ ๐Ÿ‘ซ ๐Ÿ•ธ โš’ ๐Ÿ› ๏ธ ๐Ÿ”˜ ๐Ÿ‘ซ. - -## ๐Ÿ“ฆ & ๐Ÿ› ๏ธ - -**๐Ÿ“ฆ ๐Ÿ–ผ** ๐Ÿ›Ž ๐Ÿ”Œ ๐Ÿšฎ ๐Ÿ—ƒ ๐Ÿ”ข ๐Ÿ“‹ โš–๏ธ ๐Ÿ“‹ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿƒ ๐Ÿ•โ” **๐Ÿ“ฆ** โ–ถ๏ธ & ๐Ÿ”ข ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘ˆ ๐Ÿ“‹. ๐Ÿ“ถ ๐ŸŽ โšซ๏ธโ” ๐Ÿ”œ ๐Ÿšฅ โšซ๏ธ ๐Ÿ“‹ โธ. - -๐Ÿ•โ” **๐Ÿ“ฆ** โ–ถ๏ธ, โšซ๏ธ ๐Ÿ”œ ๐Ÿƒ ๐Ÿ‘ˆ ๐Ÿ“‹/๐Ÿ“‹ (๐Ÿ‘ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” โšซ๏ธ & โš’ โšซ๏ธ ๐Ÿƒ ๐ŸŽ ๐Ÿ“‹/๐Ÿ“‹). - -๐Ÿ“ฆ ๐Ÿƒ ๐Ÿ“ **๐Ÿ‘‘ ๐Ÿ› ๏ธ** (๐Ÿ“‹ โš–๏ธ ๐Ÿ“‹) ๐Ÿƒ. - -๐Ÿ“ฆ ๐Ÿ›Ž โœ”๏ธ **๐Ÿ‘ ๐Ÿ› ๏ธ**, โœ‹๏ธ โšซ๏ธ ๐Ÿ’ช โ–ถ๏ธ โœณ โšช๏ธโžก๏ธ ๐Ÿ‘‘ ๐Ÿ› ๏ธ, & ๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ **๐Ÿ’— ๐Ÿ› ๏ธ** ๐ŸŽ ๐Ÿ“ฆ. - -โœ‹๏ธ โšซ๏ธ ๐Ÿšซ ๐Ÿ’ช โœ”๏ธ ๐Ÿƒโ€โ™‚ ๐Ÿ“ฆ ๐Ÿต **๐ŸŒ˜ 1๏ธโƒฃ ๐Ÿƒโ€โ™‚ ๐Ÿ› ๏ธ**. ๐Ÿšฅ ๐Ÿ‘‘ ๐Ÿ› ๏ธ โ›”๏ธ, ๐Ÿ“ฆ โ›”๏ธ. - -## ๐Ÿ— โ˜ ๐Ÿ–ผ FastAPI - -๐Ÿ†—, โžก๏ธ ๐Ÿ— ๐Ÿ•ณ ๐Ÿ”œ โ— ๐Ÿ‘ถ - -๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ‘† โ” ๐Ÿ— **โ˜ ๐Ÿ–ผ** FastAPI **โšช๏ธโžก๏ธ ๐Ÿ–Œ**, โš“๏ธ ๐Ÿ”› **๐Ÿ›‚ ๐Ÿ** ๐Ÿ–ผ. - -๐Ÿ‘‰ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’š **๐Ÿ† ๐Ÿ’ผ**, ๐Ÿ–ผ: - -* โš™๏ธ **Kubernetes** โš–๏ธ ๐ŸŽ ๐Ÿงฐ -* ๐Ÿ•โ” ๐Ÿƒโ€โ™‚ ๐Ÿ”› **๐Ÿ“ ๐Ÿ‘ฒ** -* โš™๏ธ โ˜ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿƒ ๐Ÿ“ฆ ๐Ÿ–ผ ๐Ÿ‘†, โ™’๏ธ. - -### ๐Ÿ“ฆ ๐Ÿ“„ - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ›Ž โœ”๏ธ **๐Ÿ“ฆ ๐Ÿ“„** ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ“. - -โšซ๏ธ ๐Ÿ”œ ๐Ÿช€ โœด๏ธ ๐Ÿ”› ๐Ÿงฐ ๐Ÿ‘† โš™๏ธ **โŽ** ๐Ÿ‘ˆ ๐Ÿ“„. - -๐ŸŒ… โš  ๐ŸŒŒ โšซ๏ธ โœ”๏ธ ๐Ÿ“ `requirements.txt` โฎ๏ธ ๐Ÿ“ฆ ๐Ÿ“› & ๐Ÿ‘ซ โฌ, 1๏ธโƒฃ ๐Ÿ“ โธ. - -๐Ÿ‘† ๐Ÿ”œ โ†—๏ธ โš™๏ธ ๐ŸŽ ๐Ÿ’ญ ๐Ÿ‘† โœ [๐Ÿ”ƒ FastAPI โฌ](versions.md){.internal-link target=_blank} โš’ โ†” โฌ. - -๐Ÿ–ผ, ๐Ÿ‘† `requirements.txt` ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’–: - -``` -fastapi>=0.68.0,<0.69.0 -pydantic>=1.8.0,<2.0.0 -uvicorn>=0.15.0,<0.16.0 -``` - -& ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ›Ž โŽ ๐Ÿ‘ˆ ๐Ÿ“ฆ ๐Ÿ”— โฎ๏ธ `pip`, ๐Ÿ–ผ: - -
- -```console -$ pip install -r requirements.txt ----> 100% -Successfully installed fastapi pydantic uvicorn -``` - -
- -/// info - -๐Ÿ“ค ๐ŸŽ ๐Ÿ“ & ๐Ÿงฐ ๐Ÿ”ฌ & โŽ ๐Ÿ“ฆ ๐Ÿ”—. - -๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ‘† ๐Ÿ–ผ โš™๏ธ ๐ŸŽถ โช ๐Ÿ“„ ๐Ÿ”›. ๐Ÿ‘ถ - -/// - -### โœ **FastAPI** ๐Ÿ“Ÿ - -* โœ `app` ๐Ÿ“ & โ›” โšซ๏ธ. -* โœ ๐Ÿ› ๐Ÿ“ `__init__.py`. -* โœ `main.py` ๐Ÿ“ โฎ๏ธ: - -```Python -from typing import Union - -from fastapi import FastAPI - -app = FastAPI() - - -@app.get("/") -def read_root(): - return {"Hello": "World"} - - -@app.get("/items/{item_id}") -def read_item(item_id: int, q: Union[str, None] = None): - return {"item_id": item_id, "q": q} -``` - -### ๐Ÿ“ - -๐Ÿ”œ ๐ŸŽ ๐Ÿ— ๐Ÿ“ โœ ๐Ÿ“ `Dockerfile` โฎ๏ธ: - -```{ .dockerfile .annotate } -# (1) -FROM python:3.9 - -# (2) -WORKDIR /code - -# (3) -COPY ./requirements.txt /code/requirements.txt - -# (4) -RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt - -# (5) -COPY ./app /code/app - -# (6) -CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] -``` - -1๏ธโƒฃ. โ–ถ๏ธ โšช๏ธโžก๏ธ ๐Ÿ›‚ ๐Ÿ ๐Ÿงข ๐Ÿ–ผ. - -2๏ธโƒฃ. โš’ โฎ๏ธ ๐Ÿ‘ท ๐Ÿ“ `/code`. - - ๐Ÿ‘‰ ๐ŸŒโ” ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿšฎ `requirements.txt` ๐Ÿ“ & `app` ๐Ÿ“. - -3๏ธโƒฃ. ๐Ÿ“ ๐Ÿ“ โฎ๏ธ ๐Ÿ“„ `/code` ๐Ÿ“. - - ๐Ÿ“ **๐Ÿ•ด** ๐Ÿ“ โฎ๏ธ ๐Ÿ“„ ๐Ÿฅ‡, ๐Ÿšซ ๐ŸŽ‚ ๐Ÿ“Ÿ. - - ๐Ÿ‘‰ ๐Ÿ“ **๐Ÿšซ ๐Ÿ”€ ๐Ÿ›Ž**, โ˜ ๐Ÿ”œ ๐Ÿ” โšซ๏ธ & โš™๏ธ **๐Ÿ’พ** ๐Ÿ‘‰ ๐Ÿ”, ๐Ÿ› ๏ธ ๐Ÿ’พ โญ ๐Ÿ” ๐Ÿ’โ€โ™‚๏ธ. - -4๏ธโƒฃ. โŽ ๐Ÿ“ฆ ๐Ÿ”— ๐Ÿ“„ ๐Ÿ“. - - `--no-cache-dir` ๐ŸŽ› ๐Ÿ’ฌ `pip` ๐Ÿšซ ๐Ÿ–Š โฌ ๐Ÿ“ฆ ๐ŸŒ, ๐Ÿ‘ˆ ๐Ÿ•ด ๐Ÿšฅ `pip` ๐Ÿ”œ ๐Ÿƒ ๐Ÿ”„ โŽ ๐ŸŽ ๐Ÿ“ฆ, โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ’ผ ๐Ÿ•โ” ๐Ÿ‘ท โฎ๏ธ ๐Ÿ“ฆ. - - /// note - - `--no-cache-dir` ๐Ÿ•ด ๐Ÿ”— `pip`, โšซ๏ธ โœ”๏ธ ๐Ÿ•ณ โฎ๏ธ โ˜ โš–๏ธ ๐Ÿ“ฆ. - - /// - - `--upgrade` ๐ŸŽ› ๐Ÿ’ฌ `pip` โ™ป ๐Ÿ“ฆ ๐Ÿšฅ ๐Ÿ‘ซ โช โŽ. - - โ†ฉ๏ธ โฎ๏ธ ๐Ÿ” ๐Ÿ–จ ๐Ÿ“ ๐Ÿ’ช ๐Ÿ” **โ˜ ๐Ÿ’พ**, ๐Ÿ‘‰ ๐Ÿ” ๐Ÿ”œ **โš™๏ธ โ˜ ๐Ÿ’พ** ๐Ÿ•โ” ๐Ÿ’ช. - - โš™๏ธ ๐Ÿ’พ ๐Ÿ‘‰ ๐Ÿ” ๐Ÿ”œ **๐Ÿ–Š** ๐Ÿ‘† ๐Ÿ“š **๐Ÿ•ฐ** ๐Ÿ•โ” ๐Ÿ— ๐Ÿ–ผ ๐Ÿ”„ & ๐Ÿ”„ โฎ๏ธ ๐Ÿ› ๏ธ, โ†ฉ๏ธ **โฌ & โŽ** ๐ŸŒ ๐Ÿ”— **๐Ÿ”  ๐Ÿ•ฐ**. - -5๏ธโƒฃ. ๐Ÿ“ `./app` ๐Ÿ“ ๐Ÿ”˜ `/code` ๐Ÿ“. - - ๐Ÿ‘‰ โœ”๏ธ ๐ŸŒ ๐Ÿ“Ÿ โ” โšซ๏ธโ” **๐Ÿ”€ ๐ŸŒ… ๐Ÿ›Ž** โ˜ **๐Ÿ’พ** ๐Ÿ† ๐Ÿšซ โš™๏ธ ๐Ÿ‘‰ โš–๏ธ ๐Ÿ™† **๐Ÿ“„ ๐Ÿ”** ๐Ÿ’ช. - - , โšซ๏ธ โš  ๐Ÿšฎ ๐Ÿ‘‰ **๐Ÿ˜ ๐Ÿ”š** `Dockerfile`, ๐Ÿ”ฌ ๐Ÿ“ฆ ๐Ÿ–ผ ๐Ÿ— ๐Ÿ•ฐ. - -6๏ธโƒฃ. โš’ **๐Ÿ“‹** ๐Ÿƒ `uvicorn` ๐Ÿ’ฝ. - - `CMD` โœŠ ๐Ÿ“‡ ๐ŸŽป, ๐Ÿ”  ๐Ÿ‘ซ ๐ŸŽป โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ†Ž ๐Ÿ“‹ โธ ๐Ÿ‘ฝ ๐Ÿš€. - - ๐Ÿ‘‰ ๐Ÿ“‹ ๐Ÿ”œ ๐Ÿƒ โšช๏ธโžก๏ธ **โฎ๏ธ ๐Ÿ‘ท ๐Ÿ“**, ๐ŸŽ `/code` ๐Ÿ“ ๐Ÿ‘† โš’ ๐Ÿ”› โฎ๏ธ `WORKDIR /code`. - - โ†ฉ๏ธ ๐Ÿ“‹ ๐Ÿ”œ โ–ถ๏ธ `/code` & ๐Ÿ”˜ โšซ๏ธ ๐Ÿ“ `./app` โฎ๏ธ ๐Ÿ‘† ๐Ÿ“Ÿ, **Uvicorn** ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ‘€ & **๐Ÿ—„** `app` โšช๏ธโžก๏ธ `app.main`. - -/// tip - -๐Ÿ“„ โšซ๏ธโ” ๐Ÿ”  โธ ๐Ÿ”จ ๐Ÿ–Š ๐Ÿ”  ๐Ÿ”ข ๐Ÿ’ญ ๐Ÿ“Ÿ. ๐Ÿ‘ถ - -/// - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ”œ โœ”๏ธ ๐Ÿ“ ๐Ÿ“Š ๐Ÿ’–: - -``` -. -โ”œโ”€โ”€ app -โ”‚ย ย  โ”œโ”€โ”€ __init__.py -โ”‚ โ””โ”€โ”€ main.py -โ”œโ”€โ”€ Dockerfile -โ””โ”€โ”€ requirements.txt -``` - -#### โ›… ๐Ÿค โŽ ๐Ÿ—ณ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒโ€โ™‚ ๐Ÿ‘† ๐Ÿ“ฆ โ›… ๐Ÿค โŽ ๐Ÿ—ณ (๐Ÿ“ โš™) ๐Ÿ’– ๐Ÿ‘Œ โš–๏ธ Traefik, ๐Ÿšฎ ๐ŸŽ› `--proxy-headers`, ๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ’ฌ Uvicorn ๐Ÿ’™ ๐ŸŽš ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ—ณ ๐Ÿ’ฌ โšซ๏ธ ๐Ÿ‘ˆ ๐Ÿˆธ ๐Ÿƒ โ›… ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, โ™’๏ธ. - -```Dockerfile -CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"] -``` - -#### โ˜ ๐Ÿ’พ - -๐Ÿ“ค โš  ๐ŸŽฑ ๐Ÿ‘‰ `Dockerfile`, ๐Ÿ‘ฅ ๐Ÿฅ‡ ๐Ÿ“ **๐Ÿ“ โฎ๏ธ ๐Ÿ”— ๐Ÿ˜ž**, ๐Ÿšซ ๐ŸŽ‚ ๐Ÿ“Ÿ. โžก๏ธ ๐Ÿ‘ค ๐Ÿ’ฌ ๐Ÿ‘† โšซ๏ธโ” ๐Ÿ‘ˆ. - -```Dockerfile -COPY ./requirements.txt /code/requirements.txt -``` - -โ˜ & ๐ŸŽ ๐Ÿงฐ **๐Ÿ—** ๐Ÿ‘‰ ๐Ÿ“ฆ ๐Ÿ–ผ **๐Ÿ”**, ๐Ÿšฎ **1๏ธโƒฃ ๐Ÿงฝ ๐Ÿ”› ๐Ÿ” ๐ŸŽ**, โ–ถ๏ธ โšช๏ธโžก๏ธ ๐Ÿ” `Dockerfile` & โŽ ๐Ÿ™† ๐Ÿ“ โœ ๐Ÿ”  ๐Ÿ‘ฉโ€๐ŸŒพ `Dockerfile`. - -โ˜ & ๐ŸŽ ๐Ÿงฐ โš™๏ธ **๐Ÿ”— ๐Ÿ’พ** ๐Ÿ•โ” ๐Ÿ— ๐Ÿ–ผ, ๐Ÿšฅ ๐Ÿ“ ๐Ÿšซ ๐Ÿ”€ โ†ฉ๏ธ ๐Ÿ ๐Ÿ•ฐ ๐Ÿ— ๐Ÿ“ฆ ๐Ÿ–ผ, โคด๏ธ โšซ๏ธ ๐Ÿ”œ **๐Ÿค-โš™๏ธ ๐ŸŽ ๐Ÿงฝ** โœ ๐Ÿ ๐Ÿ•ฐ, โ†ฉ๏ธ ๐Ÿ–จ ๐Ÿ“ ๐Ÿ”„ & ๐Ÿ— ๐Ÿ†• ๐Ÿงฝ โšช๏ธโžก๏ธ ๐Ÿ–Œ. - -โŽ ๐Ÿ“ ๐Ÿ“ ๐Ÿšซ ๐ŸŽฏ ๐Ÿ“‰ ๐Ÿ‘œ ๐Ÿ’โ€โ™‚๏ธ ๐ŸŒ…, โœ‹๏ธ โ†ฉ๏ธ โšซ๏ธ โš™๏ธ ๐Ÿ’พ ๐Ÿ‘ˆ ๐Ÿ”, โšซ๏ธ ๐Ÿ’ช **โš™๏ธ ๐Ÿ’พ โญ ๐Ÿ”**. ๐Ÿ–ผ, โšซ๏ธ ๐Ÿ’ช โš™๏ธ ๐Ÿ’พ ๐Ÿ‘ฉโ€๐ŸŒพ ๐Ÿ‘ˆ โŽ ๐Ÿ”— โฎ๏ธ: - -```Dockerfile -RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt -``` - -๐Ÿ“ โฎ๏ธ ๐Ÿ“ฆ ๐Ÿ“„ **๐Ÿ† ๐Ÿšซ ๐Ÿ”€ ๐Ÿ›Ž**. , ๐Ÿ–จ ๐Ÿ•ด ๐Ÿ‘ˆ ๐Ÿ“, โ˜ ๐Ÿ”œ ๐Ÿ’ช **โš™๏ธ ๐Ÿ’พ** ๐Ÿ‘ˆ ๐Ÿ”. - -& โคด๏ธ, โ˜ ๐Ÿ”œ ๐Ÿ’ช **โš™๏ธ ๐Ÿ’พ โญ ๐Ÿ”** ๐Ÿ‘ˆ โฌ & โŽ ๐Ÿ‘ˆ ๐Ÿ”—. & ๐Ÿ“ฅ ๐ŸŒโ” ๐Ÿ‘ฅ **๐Ÿ–Š ๐Ÿ“š ๐Ÿ•ฐ**. ๐Ÿ‘ถ ...& โŽ ๐Ÿ˜ฉ โŒ›. ๐Ÿ‘ถ ๐Ÿ‘ถ - -โฌ & โŽ ๐Ÿ“ฆ ๐Ÿ”— **๐Ÿ’ช โœŠ โฒ**, โœ‹๏ธ โš™๏ธ **๐Ÿ’พ** ๐Ÿ”œ **โœŠ ๐Ÿฅˆ** ๐ŸŒ…. - -& ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ— ๐Ÿ“ฆ ๐Ÿ–ผ ๐Ÿ”„ & ๐Ÿ”„ โฎ๏ธ ๐Ÿ› ๏ธ โœ… ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ“Ÿ ๐Ÿ”€ ๐Ÿ‘ท, ๐Ÿ“ค ๐Ÿ“š ๐Ÿ“ˆ ๐Ÿ•ฐ ๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ–Š. - -โคด๏ธ, ๐Ÿ˜ ๐Ÿ”š `Dockerfile`, ๐Ÿ‘ฅ ๐Ÿ“ ๐ŸŒ ๐Ÿ“Ÿ. ๐Ÿ‘‰ โšซ๏ธโ” **๐Ÿ”€ ๐Ÿ† ๐Ÿ›Ž**, ๐Ÿ‘ฅ ๐Ÿšฎ โšซ๏ธ ๐Ÿ˜ ๐Ÿ”š, โ†ฉ๏ธ ๐ŸŒ– ๐Ÿ•ง, ๐Ÿ•ณ โฎ๏ธ ๐Ÿ‘‰ ๐Ÿ” ๐Ÿ”œ ๐Ÿšซ ๐Ÿ’ช โš™๏ธ ๐Ÿ’พ. - -```Dockerfile -COPY ./app /code/app -``` - -### ๐Ÿ— โ˜ ๐Ÿ–ผ - -๐Ÿ”œ ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿ“ ๐Ÿฅ‰, โžก๏ธ ๐Ÿ— ๐Ÿ“ฆ ๐Ÿ–ผ. - -* ๐Ÿšถ ๐Ÿ— ๐Ÿ“ (๐ŸŒโ” ๐Ÿ‘† `Dockerfile` , โš— ๐Ÿ‘† `app` ๐Ÿ“). -* ๐Ÿ— ๐Ÿ‘† FastAPI ๐Ÿ–ผ: - -
- -```console -$ docker build -t myimage . - ----> 100% -``` - -
- -/// tip - -๐Ÿ‘€ `.` ๐Ÿ”š, โšซ๏ธ ๐ŸŒ“ `./`, โšซ๏ธ ๐Ÿ’ฌ โ˜ ๐Ÿ“ โš™๏ธ ๐Ÿ— ๐Ÿ“ฆ ๐Ÿ–ผ. - -๐Ÿ‘‰ ๐Ÿ’ผ, โšซ๏ธ ๐ŸŽ โฎ๏ธ ๐Ÿ“ (`.`). - -/// - -### โ–ถ๏ธ โ˜ ๐Ÿ“ฆ - -* ๐Ÿƒ ๐Ÿ“ฆ โš“๏ธ ๐Ÿ”› ๐Ÿ‘† ๐Ÿ–ผ: - -
- -```console -$ docker run -d --name mycontainer -p 80:80 myimage -``` - -
- -## โœ… โšซ๏ธ - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช โœ… โšซ๏ธ ๐Ÿ‘† โ˜ ๐Ÿ“ฆ ๐Ÿ“›, ๐Ÿ–ผ: http://192.168.99.100/items/5?q=somequery โš–๏ธ http://127.0.0.1/items/5?q=somequery (โš–๏ธ ๐ŸŒ“, โš™๏ธ ๐Ÿ‘† โ˜ ๐Ÿฆ ). - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ•ณ ๐Ÿ’–: - -```JSON -{"item_id": 5, "q": "somequery"} -``` - -## ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿฉบ - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถ http://192.168.99.100/docs โš–๏ธ http://127.0.0.1/docs (โš–๏ธ ๐ŸŒ“, โš™๏ธ ๐Ÿ‘† โ˜ ๐Ÿฆ ). - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿง ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿงพ (๐Ÿšš ๐Ÿฆ ๐ŸŽš): - -![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) - -## ๐ŸŽ› ๐Ÿ› ๏ธ ๐Ÿฉบ - -& ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถ http://192.168.99.100/redoc โš–๏ธ http://127.0.0.1/redoc (โš–๏ธ ๐ŸŒ“, โš™๏ธ ๐Ÿ‘† โ˜ ๐Ÿฆ ). - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŽ› ๐Ÿง ๐Ÿงพ (๐Ÿšš ๐Ÿ“„): - -![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) - -## ๐Ÿ— โ˜ ๐Ÿ–ผ โฎ๏ธ ๐Ÿ‘-๐Ÿ“ FastAPI - -๐Ÿšฅ ๐Ÿ‘† FastAPI ๐Ÿ‘ ๐Ÿ“, ๐Ÿ–ผ, `main.py` ๐Ÿต `./app` ๐Ÿ“, ๐Ÿ‘† ๐Ÿ“ ๐Ÿ“Š ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ‘‰: - -``` -. -โ”œโ”€โ”€ Dockerfile -โ”œโ”€โ”€ main.py -โ””โ”€โ”€ requirements.txt -``` - -โคด๏ธ ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐Ÿ”€ ๐Ÿ”— โžก ๐Ÿ“ ๐Ÿ“ ๐Ÿ”˜ `Dockerfile`: - -```{ .dockerfile .annotate hl_lines="10 13" } -FROM python:3.9 - -WORKDIR /code - -COPY ./requirements.txt /code/requirements.txt - -RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt - -# (1) -COPY ./main.py /code/ - -# (2) -CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"] -``` - -1๏ธโƒฃ. ๐Ÿ“ `main.py` ๐Ÿ“ `/code` ๐Ÿ“ ๐Ÿ”— (๐Ÿต ๐Ÿ™† `./app` ๐Ÿ“). - -2๏ธโƒฃ. ๐Ÿƒ Uvicorn & ๐Ÿ’ฌ โšซ๏ธ ๐Ÿ—„ `app` ๐ŸŽš โšช๏ธโžก๏ธ `main` (โ†ฉ๏ธ ๐Ÿญ โšช๏ธโžก๏ธ `app.main`). - -โคด๏ธ ๐Ÿ”† Uvicorn ๐Ÿ“‹ โš™๏ธ ๐Ÿ†• ๐Ÿ•น `main` โ†ฉ๏ธ `app.main` ๐Ÿ—„ FastAPI ๐ŸŽš `app`. - -## ๐Ÿ› ๏ธ ๐Ÿ”ง - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ”„ ๐Ÿ”ƒ ๐ŸŽ [๐Ÿ› ๏ธ ๐Ÿ”ง](concepts.md){.internal-link target=_blank} โš– ๐Ÿ“ฆ. - -๐Ÿ“ฆ โœด๏ธ ๐Ÿงฐ ๐Ÿ“‰ ๐Ÿ› ๏ธ **๐Ÿ— & ๐Ÿ› ๏ธ** ๐Ÿˆธ, โœ‹๏ธ ๐Ÿ‘ซ ๐Ÿšซ ๐Ÿ› ๏ธ ๐ŸŽฏ ๐ŸŽฏ ๐Ÿต ๐Ÿ‘‰ **๐Ÿ› ๏ธ ๐Ÿ”ง**, & ๐Ÿ“ค ๐Ÿ“š ๐Ÿ’ช ๐ŸŽ›. - -**๐Ÿ‘ ๐Ÿ“ฐ** ๐Ÿ‘ˆ โฎ๏ธ ๐Ÿ”  ๐ŸŽ ๐ŸŽ› ๐Ÿ“ค ๐ŸŒŒ ๐Ÿ“” ๐ŸŒ ๐Ÿ› ๏ธ ๐Ÿ”ง. ๐Ÿ‘ถ - -โžก๏ธ ๐Ÿ“„ ๐Ÿ‘‰ **๐Ÿ› ๏ธ ๐Ÿ”ง** โš– ๐Ÿ“ฆ: - -* ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” -* ๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ•ด -* โ -* ๐Ÿงฌ (๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿƒ) -* ๐Ÿ’พ -* โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ - -## ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” - -๐Ÿšฅ ๐Ÿ‘ฅ ๐ŸŽฏ ๐Ÿ”› **๐Ÿ“ฆ ๐Ÿ–ผ** FastAPI ๐Ÿˆธ (& โช ๐Ÿƒโ€โ™‚ **๐Ÿ“ฆ**), ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ›Ž ๐Ÿ”œ ๐Ÿต **๐Ÿ—œ** โž•1๏ธโƒฃ ๐Ÿงฐ. - -โšซ๏ธ ๐Ÿ’ช โž•1๏ธโƒฃ ๐Ÿ“ฆ, ๐Ÿ–ผ โฎ๏ธ Traefik, ๐Ÿšš **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”** & **๐Ÿง** ๐Ÿ› ๏ธ **๐Ÿ“„**. - -/// tip - -Traefik โœ”๏ธ ๐Ÿ› ๏ธ โฎ๏ธ โ˜, Kubernetes, & ๐ŸŽ, โšซ๏ธ ๐Ÿ“ถ โฉ โš’ ๐Ÿ†™ & ๐Ÿ”— ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘† ๐Ÿ“ฆ โฎ๏ธ โšซ๏ธ. - -/// - -๐Ÿ‘, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ’ช ๐Ÿต โ˜ ๐Ÿ•โ€๐Ÿฆบ 1๏ธโƒฃ ๐Ÿ‘ซ ๐Ÿ•โ€๐Ÿฆบ (โช ๐Ÿƒ ๐Ÿˆธ ๐Ÿ“ฆ). - -## ๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ•ด & โ - -๐Ÿ“ค ๐Ÿ›Ž โž•1๏ธโƒฃ ๐Ÿงฐ ๐Ÿˆš **โ–ถ๏ธ & ๐Ÿƒโ€โ™‚** ๐Ÿ‘† ๐Ÿ“ฆ. - -โšซ๏ธ ๐Ÿ’ช **โ˜** ๐Ÿ”—, **โ˜ โœ**, **Kubernetes**, **โ˜ ๐Ÿ•โ€๐Ÿฆบ**, โ™’๏ธ. - -๐ŸŒ… (โš–๏ธ ๐ŸŒ) ๐Ÿ’ผ, ๐Ÿ“ค ๐Ÿ™… ๐ŸŽ› ๐Ÿ› ๏ธ ๐Ÿƒ ๐Ÿ“ฆ ๐Ÿ”› ๐Ÿ•ด & ๐Ÿ› ๏ธ โ ๐Ÿ”› โŒ. ๐Ÿ–ผ, โ˜, โšซ๏ธ ๐Ÿ“‹ โธ ๐ŸŽ› `--restart`. - -๐Ÿต โš™๏ธ ๐Ÿ“ฆ, โš’ ๐Ÿˆธ ๐Ÿƒ ๐Ÿ”› ๐Ÿ•ด & โฎ๏ธ โ ๐Ÿ’ช โš  & โš . โœ‹๏ธ ๐Ÿ•โ” **๐Ÿ‘ท โฎ๏ธ ๐Ÿ“ฆ** ๐ŸŒ… ๐Ÿ’ผ ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿ”Œ ๐Ÿ”ข. ๐Ÿ‘ถ - -## ๐Ÿงฌ - ๐Ÿ”ข ๐Ÿ› ๏ธ - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐ŸŒ‘ ๐ŸŽฐ โฎ๏ธ **โ˜**, โ˜ ๐Ÿ ๐Ÿ“ณ, ๐Ÿ––, โš–๏ธ โž•1๏ธโƒฃ ๐ŸŽ ๐Ÿ— โš™๏ธ ๐Ÿ› ๏ธ ๐Ÿ“Ž ๐Ÿ“ฆ ๐Ÿ”› ๐Ÿ’— ๐ŸŽฐ, โคด๏ธ ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’š **๐Ÿต ๐Ÿงฌ** **๐ŸŒ‘ ๐ŸŽš** โ†ฉ๏ธ โš™๏ธ **๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ** (๐Ÿ’– ๐Ÿ โฎ๏ธ ๐Ÿ‘จโ€๐Ÿญ) ๐Ÿ”  ๐Ÿ“ฆ. - -1๏ธโƒฃ ๐Ÿ“š ๐Ÿ“Ž ๐Ÿ“ฆ ๐Ÿงพ โš™๏ธ ๐Ÿ’– Kubernetes ๐Ÿ›Ž โœ”๏ธ ๐Ÿ› ๏ธ ๐ŸŒŒ ๐Ÿšš **๐Ÿงฌ ๐Ÿ“ฆ** โช ๐Ÿ”— **๐Ÿ“ โš–** ๐Ÿ“จ ๐Ÿ“จ. ๐ŸŒ **๐ŸŒ‘ ๐ŸŽš**. - -๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’š ๐Ÿ— **โ˜ ๐Ÿ–ผ โšช๏ธโžก๏ธ ๐Ÿ–Œ** [๐Ÿ”ฌ ๐Ÿ”›](#_6), โŽ ๐Ÿ‘† ๐Ÿ”—, & ๐Ÿƒโ€โ™‚ **๐Ÿ‘ Uvicorn ๐Ÿ› ๏ธ** โ†ฉ๏ธ ๐Ÿƒโ€โ™‚ ๐Ÿ•ณ ๐Ÿ’– ๐Ÿ โฎ๏ธ Uvicorn ๐Ÿ‘จโ€๐Ÿญ. - -### ๐Ÿ“ โš™ - -๐Ÿ•โ” โš™๏ธ ๐Ÿ“ฆ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ›Ž โœ”๏ธ ๐Ÿฆฒ **๐Ÿ‘‚ ๐Ÿ”› ๐Ÿ‘‘ โ›ด**. โšซ๏ธ ๐Ÿ’ช ๐ŸŽฒ โž•1๏ธโƒฃ ๐Ÿ“ฆ ๐Ÿ‘ˆ **๐Ÿค โŽ ๐Ÿ—ณ** ๐Ÿต **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”** โš–๏ธ ๐ŸŽ ๐Ÿงฐ. - -๐Ÿ‘‰ ๐Ÿฆฒ ๐Ÿ”œ โœŠ **๐Ÿ“** ๐Ÿ“จ & ๐Ÿ“Ž ๐Ÿ‘ˆ ๐Ÿ‘ช ๐Ÿ‘จโ€๐Ÿญ (๐Ÿคž) **โš–** ๐ŸŒŒ, โšซ๏ธ ๐Ÿ›Ž ๐Ÿค™ **๐Ÿ“ โš™**. - -/// tip - -๐ŸŽ **๐Ÿค โŽ ๐Ÿ—ณ** ๐Ÿฆฒ โš™๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ”œ ๐ŸŽฒ **๐Ÿ“ โš™**. - -/// - -& ๐Ÿ•โ” ๐Ÿ‘ท โฎ๏ธ ๐Ÿ“ฆ, ๐ŸŽ โš™๏ธ ๐Ÿ‘† โš™๏ธ โ–ถ๏ธ & ๐Ÿ› ๏ธ ๐Ÿ‘ซ ๐Ÿ”œ โช โœ”๏ธ ๐Ÿ”— ๐Ÿงฐ ๐Ÿ“ถ **๐Ÿ•ธ ๐Ÿ“ป** (โœ… ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ) โšช๏ธโžก๏ธ ๐Ÿ‘ˆ **๐Ÿ“ โš™** (๐Ÿ‘ˆ ๐Ÿ’ช **๐Ÿค โŽ ๐Ÿ—ณ**) ๐Ÿ“ฆ(โ“‚) โฎ๏ธ ๐Ÿ‘† ๐Ÿ“ฑ. - -### 1๏ธโƒฃ ๐Ÿ“ โš™ - ๐Ÿ’— ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ“ฆ - -๐Ÿ•โ” ๐Ÿ‘ท โฎ๏ธ **Kubernetes** โš–๏ธ ๐ŸŽ ๐Ÿ“Ž ๐Ÿ“ฆ ๐Ÿงพ โš™๏ธ, โš™๏ธ ๐Ÿ‘ซ ๐Ÿ”— ๐Ÿ•ธ ๐Ÿ› ๏ธ ๐Ÿ”œ โœ” ๐Ÿ‘ **๐Ÿ“ โš™** ๐Ÿ‘ˆ ๐Ÿ‘‚ ๐Ÿ”› ๐Ÿ‘‘ **โ›ด** ๐Ÿ“ถ ๐Ÿ“ป (๐Ÿ“จ) ๐ŸŽฒ **๐Ÿ’— ๐Ÿ“ฆ** ๐Ÿƒ ๐Ÿ‘† ๐Ÿ“ฑ. - -๐Ÿ”  ๐Ÿ‘ซ ๐Ÿ“ฆ ๐Ÿƒโ€โ™‚ ๐Ÿ‘† ๐Ÿ“ฑ ๐Ÿ”œ ๐Ÿ›Ž โœ”๏ธ **1๏ธโƒฃ ๐Ÿ› ๏ธ** (โœ… Uvicorn ๐Ÿ› ๏ธ ๐Ÿƒ ๐Ÿ‘† FastAPI ๐Ÿˆธ). ๐Ÿ‘ซ ๐Ÿ”œ ๐ŸŒ **๐ŸŒ“ ๐Ÿ“ฆ**, ๐Ÿƒโ€โ™‚ ๐ŸŽ ๐Ÿ‘œ, โœ‹๏ธ ๐Ÿ”  โฎ๏ธ ๐Ÿšฎ ๐Ÿ‘ ๐Ÿ› ๏ธ, ๐Ÿ’พ, โ™’๏ธ. ๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”œ โœŠ ๐Ÿ“ˆ **๐Ÿ› ๏ธ** **๐ŸŽ ๐Ÿš** ๐Ÿ’ฝ, โš–๏ธ **๐ŸŽ ๐ŸŽฐ**. - -& ๐Ÿ“Ž ๐Ÿ“ฆ โš™๏ธ โฎ๏ธ **๐Ÿ“ โš™** ๐Ÿ”œ **๐Ÿ“Ž ๐Ÿ“จ** ๐Ÿ”  1๏ธโƒฃ ๐Ÿ“ฆ โฎ๏ธ ๐Ÿ‘† ๐Ÿ“ฑ **๐Ÿ”„**. , ๐Ÿ”  ๐Ÿ“จ ๐Ÿ’ช ๐Ÿต 1๏ธโƒฃ ๐Ÿ’— **๐Ÿ” ๐Ÿ“ฆ** ๐Ÿƒ ๐Ÿ‘† ๐Ÿ“ฑ. - -& ๐Ÿ›Ž ๐Ÿ‘‰ **๐Ÿ“ โš™** ๐Ÿ”œ ๐Ÿ’ช ๐Ÿต ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿšถ *๐ŸŽ* ๐Ÿ“ฑ ๐Ÿ‘† ๐ŸŒ‘ (โœ… ๐ŸŽ ๐Ÿ†”, โš–๏ธ ๐Ÿ”ฝ ๐ŸŽ ๐Ÿ“› โžก ๐Ÿ”ก), & ๐Ÿ”œ ๐Ÿ“ถ ๐Ÿ‘ˆ ๐Ÿ“ป โ–ถ๏ธ๏ธ ๐Ÿ“ฆ *๐Ÿ‘ˆ ๐ŸŽ* ๐Ÿˆธ ๐Ÿƒโ€โ™‚ ๐Ÿ‘† ๐ŸŒ‘. - -### 1๏ธโƒฃ ๐Ÿ› ๏ธ ๐Ÿ“ ๐Ÿ“ฆ - -๐Ÿ‘‰ ๐Ÿ†Ž ๐Ÿ˜, ๐Ÿ‘† ๐ŸŽฒ ๐Ÿ”œ ๐Ÿ’š โœ”๏ธ **๐Ÿ‘ (Uvicorn) ๐Ÿ› ๏ธ ๐Ÿ“ ๐Ÿ“ฆ**, ๐Ÿ‘† ๐Ÿ”œ โช ๐Ÿšš ๐Ÿงฌ ๐ŸŒ‘ ๐ŸŽš. - -, ๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘† **๐Ÿ”œ ๐Ÿšซ** ๐Ÿ’š โœ”๏ธ ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ’– ๐Ÿ โฎ๏ธ Uvicorn ๐Ÿ‘จโ€๐Ÿญ, โš–๏ธ Uvicorn โš™๏ธ ๐Ÿšฎ ๐Ÿ‘ Uvicorn ๐Ÿ‘จโ€๐Ÿญ. ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’š โœ”๏ธ **๐Ÿ‘ Uvicorn ๐Ÿ› ๏ธ** ๐Ÿ“ ๐Ÿ“ฆ (โœ‹๏ธ ๐ŸŽฒ ๐Ÿ’— ๐Ÿ“ฆ). - -โœ”๏ธ โž•1๏ธโƒฃ ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ”˜ ๐Ÿ“ฆ (๐Ÿ”œ โฎ๏ธ ๐Ÿ โš–๏ธ Uvicorn ๐Ÿ› ๏ธ Uvicorn ๐Ÿ‘จโ€๐Ÿญ) ๐Ÿ”œ ๐Ÿ•ด ๐Ÿšฎ **๐Ÿ™ƒ ๐Ÿ”€** ๐Ÿ‘ˆ ๐Ÿ‘† ๐ŸŒ… ๐ŸŽฒ โช โœŠ ๐Ÿ’… โฎ๏ธ ๐Ÿ‘† ๐ŸŒ‘ โš™๏ธ. - -### ๐Ÿ“ฆ โฎ๏ธ ๐Ÿ’— ๐Ÿ› ๏ธ & ๐ŸŽ ๐Ÿ’ผ - -โ†—๏ธ, ๐Ÿ“ค **๐ŸŽ ๐Ÿ’ผ** ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š โœ”๏ธ **๐Ÿ“ฆ** โฎ๏ธ **๐Ÿ ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ** โ–ถ๏ธ ๐Ÿ“š **Uvicorn ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ** ๐Ÿ”˜. - -๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ **๐Ÿ›‚ โ˜ ๐Ÿ–ผ** ๐Ÿ‘ˆ ๐Ÿ”Œ **๐Ÿ** ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿƒโ€โ™‚ ๐Ÿ’— **Uvicorn ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ**, & ๐Ÿ”ข โš’ ๐Ÿ”† ๐Ÿ”ข ๐Ÿ‘จโ€๐Ÿญ โš“๏ธ ๐Ÿ”› โฎ๏ธ ๐Ÿ’ฝ ๐Ÿš ๐Ÿ”. ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ฌ ๐Ÿ‘† ๐ŸŒ… ๐Ÿ”ƒ โšซ๏ธ ๐Ÿ”› [๐Ÿ›‚ โ˜ ๐Ÿ–ผ โฎ๏ธ ๐Ÿ - Uvicorn](#-uvicorn). - -๐Ÿ“ฅ ๐Ÿ–ผ ๐Ÿ•โ” ๐Ÿ‘ˆ ๐Ÿ’ช โš’ ๐Ÿ”‘: - -#### ๐Ÿ™… ๐Ÿ“ฑ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ“ฆ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿˆธ **๐Ÿ™… ๐Ÿฅƒ** ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ช (๐Ÿฅ ๐Ÿšซ) ๐Ÿ‘Œ-๐ŸŽถ ๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿ’โ€โ™‚๏ธ ๐ŸŒ…, & ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿง ๐Ÿ”ข (โฎ๏ธ ๐Ÿ›‚ โ˜ ๐Ÿ–ผ), & ๐Ÿ‘† ๐Ÿƒโ€โ™‚ โšซ๏ธ ๐Ÿ”› **๐Ÿ‘ ๐Ÿ’ฝ**, ๐Ÿšซ ๐ŸŒ‘. - -#### โ˜ โœ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ› ๏ธ **๐Ÿ‘ ๐Ÿ’ฝ** (๐Ÿšซ ๐ŸŒ‘) โฎ๏ธ **โ˜ โœ**, ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ โœ”๏ธ โฉ ๐ŸŒŒ ๐Ÿ› ๏ธ ๐Ÿงฌ ๐Ÿ“ฆ (โฎ๏ธ โ˜ โœ) โช ๐Ÿ›ก ๐Ÿ”— ๐Ÿ•ธ & **๐Ÿ“ โš–**. - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š โœ”๏ธ **๐Ÿ‘ ๐Ÿ“ฆ** โฎ๏ธ **๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ** โ–ถ๏ธ **๐Ÿ“š ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ** ๐Ÿ”˜. - -#### ๐Ÿคด & ๐ŸŽ ๐Ÿค” - -๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ **๐ŸŽ ๐Ÿค”** ๐Ÿ‘ˆ ๐Ÿ”œ โš’ โšซ๏ธ โฉ โœ”๏ธ **๐Ÿ‘ ๐Ÿ“ฆ** โฎ๏ธ **๐Ÿ’— ๐Ÿ› ๏ธ** โ†ฉ๏ธ โœ”๏ธ **๐Ÿ’— ๐Ÿ“ฆ** โฎ๏ธ **๐Ÿ‘ ๐Ÿ› ๏ธ** ๐Ÿ”  ๐Ÿ‘ซ. - -๐Ÿ–ผ (๐Ÿช€ ๐Ÿ”› ๐Ÿ‘† ๐Ÿ–ฅ) ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿงฐ ๐Ÿ’– ๐Ÿคด ๐Ÿญ ๐ŸŽ ๐Ÿ“ฆ ๐Ÿ‘ˆ ๐Ÿ”œ โœ”๏ธ ๐Ÿ” **๐Ÿ”  ๐Ÿ“จ** ๐Ÿ‘ˆ ๐Ÿ‘Ÿ. - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ **๐Ÿ’— ๐Ÿ“ฆ**, ๐Ÿ”ข, ๐Ÿ•โ” ๐Ÿคด ๐Ÿ‘Ÿ **โœ โš–**, โšซ๏ธ ๐Ÿ”œ ๐Ÿคš ๐Ÿ• **๐Ÿ‘ ๐Ÿ“ฆ ๐Ÿ”  ๐Ÿ•ฐ** (๐Ÿ“ฆ ๐Ÿ‘ˆ ๐Ÿต ๐Ÿ‘ˆ ๐ŸŽฏ ๐Ÿ“จ), โ†ฉ๏ธ ๐Ÿคš **๐Ÿ“ˆ โš–** ๐ŸŒ ๐Ÿ” ๐Ÿ“ฆ. - -โคด๏ธ, ๐Ÿ‘ˆ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ’ช ๐Ÿ™… โœ”๏ธ **1๏ธโƒฃ ๐Ÿ“ฆ** โฎ๏ธ **๐Ÿ’— ๐Ÿ› ๏ธ**, & ๐Ÿ‡ง๐Ÿ‡ฟ ๐Ÿงฐ (โœ… ๐Ÿคด ๐Ÿญ) ๐Ÿ”› ๐ŸŽ ๐Ÿ“ฆ ๐Ÿ“ˆ ๐Ÿคด โš– ๐ŸŒ ๐Ÿ”— ๐Ÿ› ๏ธ & ๐ŸŽฆ ๐Ÿ‘ˆ โš– ๐Ÿ”› ๐Ÿ‘ˆ ๐Ÿ‘ ๐Ÿ“ฆ. - ---- - -๐Ÿ‘‘ โ˜, **๐Ÿ‘Œ** ๐Ÿ‘‰ **๐Ÿšซ โœ ๐Ÿ—ฟ** ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿ˜„ โฉ. ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ซ ๐Ÿ’ญ **๐Ÿ”ฌ ๐Ÿ‘† ๐Ÿ‘ โš™๏ธ ๐Ÿ’ผ** & ๐Ÿ’ญ โšซ๏ธโ” ๐Ÿ‘ ๐ŸŽฏ ๐Ÿ‘† โš™๏ธ, โœ… ๐Ÿ‘… โ” ๐Ÿ› ๏ธ ๐Ÿ”ง: - -* ๐Ÿ’‚โ€โ™‚ - ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” -* ๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ•ด -* โ -* ๐Ÿงฌ (๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿƒ) -* ๐Ÿ’พ -* โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ - -## ๐Ÿ’พ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒ **๐Ÿ‘ ๐Ÿ› ๏ธ ๐Ÿ“ ๐Ÿ“ฆ** ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐ŸŒ… โš–๏ธ ๐ŸŒ˜ ๐Ÿ‘-๐Ÿ”ฌ, โš–, & ๐Ÿ“‰ ๐Ÿ’ธ ๐Ÿ’พ ๐Ÿด ๐Ÿ”  ๐Ÿ‘ˆ ๐Ÿ“ฆ (๐ŸŒ… ๐ŸŒ˜ 1๏ธโƒฃ ๐Ÿšฅ ๐Ÿ‘ซ ๐Ÿ”). - -& โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿ’พ ๐Ÿ“‰ & ๐Ÿ“„ ๐Ÿ‘† ๐Ÿ“ณ ๐Ÿ‘† ๐Ÿ“ฆ ๐Ÿงพ โš™๏ธ (๐Ÿ–ผ **Kubernetes**). ๐Ÿ‘ˆ ๐ŸŒŒ โšซ๏ธ ๐Ÿ”œ ๐Ÿ’ช **๐Ÿ” ๐Ÿ“ฆ** **๐Ÿ’ช ๐ŸŽฐ** โœŠ ๐Ÿ”˜ ๐Ÿง ๐Ÿ’ธ ๐Ÿ’พ ๐Ÿ’ช ๐Ÿ‘ซ, & ๐Ÿ’ธ ๐Ÿ’ช ๐ŸŽฐ ๐ŸŒ‘. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿˆธ **๐Ÿ™…**, ๐Ÿ‘‰ ๐Ÿ”œ ๐ŸŽฒ **๐Ÿšซ โš **, & ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšซ ๐Ÿ’ช โœ” ๐Ÿ‹๏ธ ๐Ÿ’พ ๐Ÿ“‰. โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† **โš™๏ธ ๐Ÿ“š ๐Ÿ’พ** (๐Ÿ–ผ โฎ๏ธ **๐ŸŽฐ ๐Ÿซ** ๐Ÿท), ๐Ÿ‘† ๐Ÿ”œ โœ… โ” ๐ŸŒ… ๐Ÿ’พ ๐Ÿ‘† ๐Ÿ˜ฉ & ๐Ÿ”† **๐Ÿ”ข ๐Ÿ“ฆ** ๐Ÿ‘ˆ ๐Ÿƒ **๐Ÿ”  ๐ŸŽฐ** (& ๐ŸŽฒ ๐Ÿšฎ ๐ŸŒ– ๐ŸŽฐ ๐Ÿ‘† ๐ŸŒ‘). - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒ **๐Ÿ’— ๐Ÿ› ๏ธ ๐Ÿ“ ๐Ÿ“ฆ** (๐Ÿ–ผ โฎ๏ธ ๐Ÿ›‚ โ˜ ๐Ÿ–ผ) ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ› ๏ธ โ–ถ๏ธ ๐Ÿšซ **๐Ÿด ๐ŸŒ– ๐Ÿ’พ** ๐ŸŒ˜ โšซ๏ธโ” ๐Ÿ’ช. - -## โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ & ๐Ÿ“ฆ - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿ“ฆ (โœ… โ˜, Kubernetes), โคด๏ธ ๐Ÿ“ค 2๏ธโƒฃ ๐Ÿ‘‘ ๐ŸŽฏ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ. - -### ๐Ÿ’— ๐Ÿ“ฆ - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ **๐Ÿ’— ๐Ÿ“ฆ**, ๐ŸŽฒ ๐Ÿ”  1๏ธโƒฃ ๐Ÿƒ **๐Ÿ‘ ๐Ÿ› ๏ธ** (๐Ÿ–ผ, **Kubernetes** ๐ŸŒ‘), โคด๏ธ ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’š โœ”๏ธ **๐ŸŽ ๐Ÿ“ฆ** ๐Ÿ”จ ๐Ÿ‘ท **โฎ๏ธ ๐Ÿ“ถ** ๐Ÿ‘ ๐Ÿ“ฆ, ๐Ÿƒ ๐Ÿ‘ ๐Ÿ› ๏ธ, **โญ** ๐Ÿƒ ๐Ÿ” ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ“ฆ. - -/// info - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ Kubernetes, ๐Ÿ‘‰ ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ•‘ ๐Ÿ“ฆ. - -/// - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿ’ผ ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ โš  ๐Ÿƒโ€โ™‚ ๐Ÿ‘ˆ โฎ๏ธ ๐Ÿ“ถ **๐Ÿ’— ๐Ÿ•ฐ ๐Ÿ”—** (๐Ÿ–ผ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿƒ ๐Ÿ’ฝ ๐Ÿ› ๏ธ, โœ‹๏ธ โœ… ๐Ÿšฅ ๐Ÿ’ฝ ๐Ÿ”œ), โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ”  ๐Ÿ“ฆ โ–ถ๏ธ๏ธ โญ โ–ถ๏ธ ๐Ÿ‘‘ ๐Ÿ› ๏ธ. - -### ๐Ÿ‘ ๐Ÿ“ฆ - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ™… ๐Ÿ–ฅ, โฎ๏ธ **๐Ÿ‘ ๐Ÿ“ฆ** ๐Ÿ‘ˆ โคด๏ธ โ–ถ๏ธ ๐Ÿ’— **๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ** (โš–๏ธ 1๏ธโƒฃ ๐Ÿ› ๏ธ), โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿƒ ๐Ÿ‘ˆ โฎ๏ธ ๐Ÿ” ๐ŸŽ ๐Ÿ“ฆ, โ–ถ๏ธ๏ธ โญ โ–ถ๏ธ ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ“ฑ. ๐Ÿ›‚ โ˜ ๐Ÿ–ผ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘‰ ๐Ÿ”˜. - -## ๐Ÿ›‚ โ˜ ๐Ÿ–ผ โฎ๏ธ ๐Ÿ - Uvicorn - -๐Ÿ“ค ๐Ÿ›‚ โ˜ ๐Ÿ–ผ ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ ๐Ÿƒโ€โ™‚ โฎ๏ธ Uvicorn ๐Ÿ‘จโ€๐Ÿญ, โ„น โฎ๏ธ ๐Ÿ“ƒ: [๐Ÿ’ฝ ๐Ÿ‘จโ€๐Ÿญ - ๐Ÿ โฎ๏ธ Uvicorn](server-workers.md){.internal-link target=_blank}. - -๐Ÿ‘‰ ๐Ÿ–ผ ๐Ÿ”œ โš  โœด๏ธ โš  ๐Ÿ”ฌ ๐Ÿ”›: [๐Ÿ“ฆ โฎ๏ธ ๐Ÿ’— ๐Ÿ› ๏ธ & ๐ŸŽ ๐Ÿ’ผ](#_18). - -* tiangolo/uvicorn-๐Ÿ-fastapi. - -/// warning - -๐Ÿ“ค โ†• ๐Ÿคž ๐Ÿ‘ˆ ๐Ÿ‘† **๐Ÿšซ** ๐Ÿ’ช ๐Ÿ‘‰ ๐Ÿงข ๐Ÿ–ผ โš–๏ธ ๐Ÿ™† ๐ŸŽ ๐ŸŽ 1๏ธโƒฃ, & ๐Ÿ”œ ๐Ÿ‘ป ๐Ÿ“† ๐Ÿ— ๐Ÿ–ผ โšช๏ธโžก๏ธ ๐Ÿ–Œ [๐Ÿ”ฌ ๐Ÿ”›: ๐Ÿ— โ˜ ๐Ÿ–ผ FastAPI](#fastapi). - -/// - -๐Ÿ‘‰ ๐Ÿ–ผ โœ”๏ธ **๐Ÿš˜-๐Ÿ“ณ** ๐Ÿ› ๏ธ ๐Ÿ”Œ โš’ **๐Ÿ”ข ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ** โš“๏ธ ๐Ÿ”› ๐Ÿ’ฝ ๐Ÿš ๐Ÿ’ช. - -โšซ๏ธ โœ”๏ธ **๐Ÿค” ๐Ÿ”ข**, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”€ & โ„น ๐ŸŒ ๐Ÿ“ณ โฎ๏ธ **๐ŸŒ ๐Ÿ”ข** โš–๏ธ ๐Ÿ“ณ ๐Ÿ“. - -โšซ๏ธ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿƒ **โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ** โฎ๏ธ โœ. - -/// tip - -๐Ÿ‘€ ๐ŸŒ ๐Ÿ“ณ & ๐ŸŽ›, ๐Ÿšถ โ˜ ๐Ÿ–ผ ๐Ÿ“ƒ: Tiangolo/uvicorn-๐Ÿ-fastapi. - -/// - -### ๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿ”› ๐Ÿ›‚ โ˜ ๐Ÿ–ผ - -**๐Ÿ”ข ๐Ÿ› ๏ธ** ๐Ÿ”› ๐Ÿ‘‰ ๐Ÿ–ผ **๐Ÿ“Š ๐Ÿ”** โšช๏ธโžก๏ธ ๐Ÿ’ฝ **๐Ÿš** ๐Ÿ’ช. - -๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ”œ ๐Ÿ”„ **๐Ÿ—œ** ๐ŸŒ… **๐ŸŽญ** โšช๏ธโžก๏ธ ๐Ÿ’ฝ ๐Ÿ’ช. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”† โšซ๏ธ โฎ๏ธ ๐Ÿ“ณ โš™๏ธ **๐ŸŒ ๐Ÿ”ข**, โ™’๏ธ. - -โœ‹๏ธ โšซ๏ธ โ›“ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿช€ ๐Ÿ”› ๐Ÿ’ฝ ๐Ÿ“ฆ ๐Ÿƒ, **๐Ÿ’ธ ๐Ÿ’พ ๐Ÿด** ๐Ÿ”œ ๐Ÿช€ ๐Ÿ”› ๐Ÿ‘ˆ. - -, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿด ๐Ÿ“š ๐Ÿ’พ (๐Ÿ–ผ โฎ๏ธ ๐ŸŽฐ ๐Ÿซ ๐Ÿท), & ๐Ÿ‘† ๐Ÿ’ฝ โœ”๏ธ ๐Ÿ“š ๐Ÿ’ฝ ๐Ÿš **โœ‹๏ธ ๐Ÿฅ ๐Ÿ’พ**, โคด๏ธ ๐Ÿ‘† ๐Ÿ“ฆ ๐Ÿ’ช ๐Ÿ”š ๐Ÿ†™ ๐Ÿ”„ โš™๏ธ ๐ŸŒ… ๐Ÿ’พ ๐ŸŒ˜ โšซ๏ธโ” ๐Ÿ’ช, & ๐Ÿค• ๐ŸŽญ ๐Ÿ“š (โš–๏ธ ๐Ÿ’ฅ). ๐Ÿ‘ถ - -### โœ `Dockerfile` - -๐Ÿ“ฅ โ” ๐Ÿ‘† ๐Ÿ”œ โœ `Dockerfile` โš“๏ธ ๐Ÿ”› ๐Ÿ‘‰ ๐Ÿ–ผ: - -```Dockerfile -FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9 - -COPY ./requirements.txt /app/requirements.txt - -RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt - -COPY ./app /app -``` - -### ๐Ÿฆ ๐Ÿˆธ - -๐Ÿšฅ ๐Ÿ‘† โฉ ๐Ÿ“„ ๐Ÿ”ƒ ๐Ÿ— [๐Ÿฆ ๐Ÿˆธ โฎ๏ธ ๐Ÿ’— ๐Ÿ“](../tutorial/bigger-applications.md){.internal-link target=_blank}, ๐Ÿ‘† `Dockerfile` ๐Ÿ’ช โ†ฉ๏ธ ๐Ÿ‘€ ๐Ÿ’–: - -```Dockerfile hl_lines="7" -FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9 - -COPY ./requirements.txt /app/requirements.txt - -RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt - -COPY ./app /app/app -``` - -### ๐Ÿ•โ” โš™๏ธ - -๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ **๐Ÿšซ** โš™๏ธ ๐Ÿ‘‰ ๐Ÿ›‚ ๐Ÿงข ๐Ÿ–ผ (โš–๏ธ ๐Ÿ™† ๐ŸŽ ๐ŸŽ 1๏ธโƒฃ) ๐Ÿšฅ ๐Ÿ‘† โš™๏ธ **Kubernetes** (โš–๏ธ ๐ŸŽ) & ๐Ÿ‘† โช โš’ **๐Ÿงฌ** ๐ŸŒ‘ ๐ŸŽš, โฎ๏ธ ๐Ÿ’— **๐Ÿ“ฆ**. ๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ“† **๐Ÿ— ๐Ÿ–ผ โšช๏ธโžก๏ธ ๐Ÿ–Œ** ๐Ÿ”ฌ ๐Ÿ”›: [๐Ÿ— โ˜ ๐Ÿ–ผ FastAPI](#fastapi). - -๐Ÿ‘‰ ๐Ÿ–ผ ๐Ÿ”œ โš  โœด๏ธ ๐ŸŽ ๐Ÿ’ผ ๐Ÿ”ฌ ๐Ÿ”› [๐Ÿ“ฆ โฎ๏ธ ๐Ÿ’— ๐Ÿ› ๏ธ & ๐ŸŽ ๐Ÿ’ผ](#_18). ๐Ÿ–ผ, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿˆธ **๐Ÿ™… ๐Ÿฅƒ** ๐Ÿ‘ˆ โš’ ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ› ๏ธ โš“๏ธ ๐Ÿ”› ๐Ÿ’ฝ ๐Ÿ‘ท ๐Ÿ‘, ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’š ๐Ÿ˜ฅ โฎ๏ธ โŽ ๐Ÿ› ๏ธ ๐Ÿงฌ ๐ŸŒ‘ ๐ŸŽš, & ๐Ÿ‘† ๐Ÿšซ ๐Ÿƒ ๐ŸŒ… ๐ŸŒ˜ 1๏ธโƒฃ ๐Ÿ“ฆ โฎ๏ธ ๐Ÿ‘† ๐Ÿ“ฑ. โš–๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ› ๏ธ โฎ๏ธ **โ˜ โœ**, ๐Ÿƒ ๐Ÿ”› ๐Ÿ‘ ๐Ÿ’ฝ, โ™’๏ธ. - -## ๐Ÿ› ๏ธ ๐Ÿ“ฆ ๐Ÿ–ผ - -โฎ๏ธ โœ”๏ธ ๐Ÿ“ฆ (โ˜) ๐Ÿ–ผ ๐Ÿ“ค ๐Ÿ“š ๐ŸŒŒ ๐Ÿ› ๏ธ โšซ๏ธ. - -๐Ÿ–ผ: - -* โฎ๏ธ **โ˜ โœ** ๐Ÿ‘ ๐Ÿ’ฝ -* โฎ๏ธ **Kubernetes** ๐ŸŒ‘ -* โฎ๏ธ โ˜ ๐Ÿ ๐Ÿ“ณ ๐ŸŒ‘ -* โฎ๏ธ โž•1๏ธโƒฃ ๐Ÿงฐ ๐Ÿ’– ๐Ÿ–– -* โฎ๏ธ โ˜ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ˆ โœŠ ๐Ÿ‘† ๐Ÿ“ฆ ๐Ÿ–ผ & ๐Ÿ› ๏ธ โšซ๏ธ - -## โ˜ ๐Ÿ–ผ โฎ๏ธ ๐ŸŽถ - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐ŸŽถ ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿ— ๐Ÿ”—, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โ˜ ๐Ÿ‘-โ–ถ๏ธ ๐Ÿ—: - -```{ .dockerfile .annotate } -# (1) -FROM python:3.9 as requirements-stage - -# (2) -WORKDIR /tmp - -# (3) -RUN pip install poetry - -# (4) -COPY ./pyproject.toml ./poetry.lock* /tmp/ - -# (5) -RUN poetry export -f requirements.txt --output requirements.txt --without-hashes - -# (6) -FROM python:3.9 - -# (7) -WORKDIR /code - -# (8) -COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt - -# (9) -RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt - -# (10) -COPY ./app /code/app - -# (11) -CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] -``` - -1๏ธโƒฃ. ๐Ÿ‘‰ ๐Ÿฅ‡ โ–ถ๏ธ, โšซ๏ธ ๐ŸŒŸ `requirements-stage`. - -2๏ธโƒฃ. โš’ `/tmp` โฎ๏ธ ๐Ÿ‘ท ๐Ÿ“. - - ๐Ÿ“ฅ ๐ŸŒโ” ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ— ๐Ÿ“ `requirements.txt` - -3๏ธโƒฃ. โŽ ๐ŸŽถ ๐Ÿ‘‰ โ˜ โ–ถ๏ธ. - -4๏ธโƒฃ. ๐Ÿ“ `pyproject.toml` & `poetry.lock` ๐Ÿ“ `/tmp` ๐Ÿ“. - - โ†ฉ๏ธ โšซ๏ธ โš™๏ธ `./poetry.lock*` (โ–ถ๏ธ โฎ๏ธ `*`), โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐Ÿ’ฅ ๐Ÿšฅ ๐Ÿ‘ˆ ๐Ÿ“ ๐Ÿšซ ๐Ÿ’ช. - -5๏ธโƒฃ. ๐Ÿ— `requirements.txt` ๐Ÿ“. - -6๏ธโƒฃ. ๐Ÿ‘‰ ๐Ÿ โ–ถ๏ธ, ๐Ÿ•ณ ๐Ÿ“ฅ ๐Ÿ”œ ๐Ÿ›ก ๐Ÿ ๐Ÿ“ฆ ๐Ÿ–ผ. - -7๏ธโƒฃ. โš’ โฎ๏ธ ๐Ÿ‘ท ๐Ÿ“ `/code`. - -8๏ธโƒฃ. ๐Ÿ“ `requirements.txt` ๐Ÿ“ `/code` ๐Ÿ“. - - ๐Ÿ‘‰ ๐Ÿ“ ๐Ÿ•ด ๐Ÿ–– โฎ๏ธ โ˜ โ–ถ๏ธ, ๐Ÿ‘ˆ โšซ๏ธโ” ๐Ÿ‘ฅ โš™๏ธ `--from-requirements-stage` ๐Ÿ“ โšซ๏ธ. - -9๏ธโƒฃ. โŽ ๐Ÿ“ฆ ๐Ÿ”— ๐Ÿ— `requirements.txt` ๐Ÿ“. - -1๏ธโƒฃ0๏ธโƒฃ. ๐Ÿ“ `app` ๐Ÿ“ `/code` ๐Ÿ“. - -1๏ธโƒฃ1๏ธโƒฃ. ๐Ÿƒ `uvicorn` ๐Ÿ“‹, ๐Ÿ’ฌ โšซ๏ธ โš™๏ธ `app` ๐ŸŽš ๐Ÿ—„ โšช๏ธโžก๏ธ `app.main`. - -/// tip - -๐Ÿ–Š ๐Ÿ’ญ ๐Ÿ”ข ๐Ÿ‘€ โšซ๏ธโ” ๐Ÿ”  โธ ๐Ÿ”จ. - -/// - -**โ˜ โ–ถ๏ธ** ๐Ÿ• `Dockerfile` ๐Ÿ‘ˆ ๐Ÿ‘ท **๐Ÿ• ๐Ÿ“ฆ ๐Ÿ–ผ** ๐Ÿ‘ˆ ๐Ÿ•ด โš™๏ธ ๐Ÿ— ๐Ÿ“ โš™๏ธ โช. - -๐Ÿฅ‡ โ–ถ๏ธ ๐Ÿ”œ ๐Ÿ•ด โš™๏ธ **โŽ ๐ŸŽถ** & **๐Ÿ— `requirements.txt`** โฎ๏ธ ๐Ÿ‘† ๐Ÿ— ๐Ÿ”— โšช๏ธโžก๏ธ ๐ŸŽถ `pyproject.toml` ๐Ÿ“. - -๐Ÿ‘‰ `requirements.txt` ๐Ÿ“ ๐Ÿ”œ โš™๏ธ โฎ๏ธ `pip` โช **โญ โ–ถ๏ธ**. - -๐Ÿ ๐Ÿ“ฆ ๐Ÿ–ผ **๐Ÿ•ด ๐Ÿ โ–ถ๏ธ** ๐Ÿ›ก. โฎ๏ธ โ–ถ๏ธ(โ“‚) ๐Ÿ”œ โŽ. - -๐Ÿ•โ” โš™๏ธ ๐ŸŽถ, โšซ๏ธ ๐Ÿ”œ โš’ ๐Ÿ”‘ โš™๏ธ **โ˜ ๐Ÿ‘-โ–ถ๏ธ ๐Ÿ—** โ†ฉ๏ธ ๐Ÿ‘† ๐Ÿšซ ๐Ÿค™ ๐Ÿ’ช โœ”๏ธ ๐ŸŽถ & ๐Ÿšฎ ๐Ÿ”— โŽ ๐Ÿ ๐Ÿ“ฆ ๐Ÿ–ผ, ๐Ÿ‘† **๐Ÿ•ด ๐Ÿ’ช** โœ”๏ธ ๐Ÿ— `requirements.txt` ๐Ÿ“ โŽ ๐Ÿ‘† ๐Ÿ— ๐Ÿ”—. - -โคด๏ธ โญ (& ๐Ÿ) โ–ถ๏ธ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ— ๐Ÿ–ผ ๐ŸŒ… โš–๏ธ ๐ŸŒ˜ ๐ŸŽ ๐ŸŒŒ ๐Ÿ”ฌ โญ. - -### โ›… ๐Ÿค โŽ ๐Ÿ—ณ - ๐ŸŽถ - -๐Ÿ”„, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒโ€โ™‚ ๐Ÿ‘† ๐Ÿ“ฆ โ›… ๐Ÿค โŽ ๐Ÿ—ณ (๐Ÿ“ โš™) ๐Ÿ’– ๐Ÿ‘Œ โš–๏ธ Traefik, ๐Ÿšฎ ๐ŸŽ› `--proxy-headers` ๐Ÿ“‹: - -```Dockerfile -CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"] -``` - -## ๐ŸŒƒ - -โš™๏ธ ๐Ÿ“ฆ โš™๏ธ (โœ… โฎ๏ธ **โ˜** & **Kubernetes**) โšซ๏ธ โ–ถ๏ธ๏ธ ๐Ÿ“ถ ๐ŸŽฏ ๐Ÿต ๐ŸŒ **๐Ÿ› ๏ธ ๐Ÿ”ง**: - -* ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” -* ๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ•ด -* โ -* ๐Ÿงฌ (๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿƒ) -* ๐Ÿ’พ -* โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ - -๐ŸŒ… ๐Ÿ’ผ, ๐Ÿ‘† ๐ŸŽฒ ๐Ÿ† ๐Ÿšซ ๐Ÿ’š โš™๏ธ ๐Ÿ™† ๐Ÿงข ๐Ÿ–ผ, & โ†ฉ๏ธ **๐Ÿ— ๐Ÿ“ฆ ๐Ÿ–ผ โšช๏ธโžก๏ธ ๐Ÿ–Œ** 1๏ธโƒฃ โš“๏ธ ๐Ÿ”› ๐Ÿ›‚ ๐Ÿ โ˜ ๐Ÿ–ผ. - -โœŠ ๐Ÿ’… **โœ”** ๐Ÿ‘ฉโ€๐ŸŒพ `Dockerfile` & **โ˜ ๐Ÿ’พ** ๐Ÿ‘† ๐Ÿ’ช **๐Ÿ“‰ ๐Ÿ— ๐Ÿ•ฐ**, ๐Ÿ“‰ ๐Ÿ‘† ๐Ÿ“ˆ (& โŽ ๐Ÿ˜ฉ). ๐Ÿ‘ถ - -๐ŸŽฏ ๐ŸŽ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š โš™๏ธ ๐Ÿ›‚ โ˜ ๐Ÿ–ผ FastAPI. ๐Ÿ‘ถ diff --git a/docs/em/docs/deployment/https.md b/docs/em/docs/deployment/https.md deleted file mode 100644 index 6d2641a92..000000000 --- a/docs/em/docs/deployment/https.md +++ /dev/null @@ -1,199 +0,0 @@ -# ๐Ÿ”ƒ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” - -โšซ๏ธ โฉ ๐Ÿค” ๐Ÿ‘ˆ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ•ณ ๐Ÿ‘ˆ "๐Ÿ› ๏ธ" โš–๏ธ ๐Ÿšซ. - -โœ‹๏ธ โšซ๏ธ ๐ŸŒŒ ๐ŸŒ– ๐Ÿ— ๐ŸŒ˜ ๐Ÿ‘ˆ. - -/// tip - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒ โš–๏ธ ๐Ÿšซ ๐Ÿ’…, ๐Ÿ˜ฃ โฎ๏ธ โญ ๐Ÿ“„ ๐Ÿ” ๐Ÿ” ๐Ÿ‘ฉโ€๐ŸŒพ โš’ ๐ŸŒ ๐Ÿ†™ โฎ๏ธ ๐ŸŽ โš’. - -/// - -**๐Ÿ’ก ๐Ÿ”ฐ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”**, โšช๏ธโžก๏ธ ๐Ÿฌ ๐Ÿค”, โœ… https://howhttps.works/. - -๐Ÿ”œ, โšช๏ธโžก๏ธ **๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿค”**, ๐Ÿ“ฅ ๐Ÿ“š ๐Ÿ‘œ โœ”๏ธ ๐Ÿคฏ โช ๐Ÿ’ญ ๐Ÿ”ƒ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”: - -* ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, **๐Ÿ’ฝ** ๐Ÿ’ช **โœ”๏ธ "๐Ÿ“„"** ๐Ÿ— **๐Ÿฅ‰ ๐Ÿฅณ**. - * ๐Ÿ“š ๐Ÿ“„ ๐Ÿค™ **๐Ÿ†** โšช๏ธโžก๏ธ ๐Ÿฅ‰ ๐Ÿฅณ, ๐Ÿšซ "๐Ÿ—". -* ๐Ÿ“„ โœ”๏ธ **1๏ธโƒฃ2๏ธโƒฃ๐Ÿ—“๏ธ**. - * ๐Ÿ‘ซ **๐Ÿ•›**. - * & โคด๏ธ ๐Ÿ‘ซ ๐Ÿ’ช **โ™ป**, **๐Ÿ† ๐Ÿ”„** โšช๏ธโžก๏ธ ๐Ÿฅ‰ ๐Ÿฅณ. -* ๐Ÿ” ๐Ÿ”— ๐Ÿ”จ **๐Ÿ•ธ ๐ŸŽš**. - * ๐Ÿ‘ˆ 1๏ธโƒฃ ๐Ÿงฝ **๐Ÿ”› ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”**. - * , **๐Ÿ“„ & ๐Ÿ”** ๐Ÿต ๐Ÿ”จ **โญ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”**. -* **๐Ÿ•ธ ๐Ÿšซ ๐Ÿ’ญ ๐Ÿ”ƒ "๐Ÿ†”"**. ๐Ÿ•ด ๐Ÿ”ƒ ๐Ÿ“ข ๐Ÿ“ข. - * โ„น ๐Ÿ”ƒ **๐ŸŽฏ ๐Ÿ†”** ๐Ÿ“จ ๐Ÿšถ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ’ฝ**. -* **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“„** "โœ”" **๐ŸŽฏ ๐Ÿ†”**, โœ‹๏ธ ๐Ÿ› ๏ธ & ๐Ÿ” ๐Ÿ”จ ๐Ÿ•ธ ๐ŸŽš, **โญ ๐Ÿ’ญ** โ” ๐Ÿ†” โž– ๐Ÿ™… โฎ๏ธ. -* **๐Ÿ”ข**, ๐Ÿ‘ˆ ๐Ÿ”œ โ›“ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ•ด โœ”๏ธ **1๏ธโƒฃ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“„ ๐Ÿ“ ๐Ÿ“ข ๐Ÿ“ข**. - * ๐Ÿ™…โ€โ™‚ ๐Ÿค” โ” ๐Ÿฆ ๐Ÿ‘† ๐Ÿ’ฝ โš–๏ธ โ” ๐Ÿคช ๐Ÿ”  ๐Ÿˆธ ๐Ÿ‘† โœ”๏ธ ๐Ÿ”› โšซ๏ธ ๐Ÿ’ช. - * ๐Ÿ“ค **โš—** ๐Ÿ‘‰, ๐Ÿ‘. -* ๐Ÿ“ค **โ†”** **๐Ÿค** ๐Ÿ› ๏ธ (1๏ธโƒฃ ๐Ÿšš ๐Ÿ” ๐Ÿ•ธ ๐ŸŽš, โญ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”) ๐Ÿค™ **๐Ÿ‘ฒ**. - * ๐Ÿ‘‰ ๐Ÿ‘ฒ โ†” โœ” 1๏ธโƒฃ ๐Ÿ‘ ๐Ÿ’ฝ (โฎ๏ธ **๐Ÿ‘ ๐Ÿ“ข ๐Ÿ“ข**) โœ”๏ธ **๐Ÿ“š ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“„** & ๐Ÿฆ **๐Ÿ’— ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ†”/๐Ÿˆธ**. - * ๐Ÿ‘‰ ๐Ÿ‘ท, **๐Ÿ‘** ๐Ÿฆฒ (๐Ÿ“‹) ๐Ÿƒ ๐Ÿ”› ๐Ÿ’ฝ, ๐Ÿ‘‚ ๐Ÿ”› **๐Ÿ“ข ๐Ÿ“ข ๐Ÿ“ข**, ๐Ÿ”œ โœ”๏ธ **๐ŸŒ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“„** ๐Ÿ’ฝ. -* **โฎ๏ธ** ๐Ÿ† ๐Ÿ” ๐Ÿ”—, ๐Ÿ“ป ๐Ÿ› ๏ธ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”**. - * ๐ŸŽš **๐Ÿ—œ**, โœ‹๏ธ ๐Ÿ‘ซ โž– ๐Ÿ“จ โฎ๏ธ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ› ๏ธ**. - -โšซ๏ธ โš  ๐Ÿ’ก โœ”๏ธ **1๏ธโƒฃ ๐Ÿ“‹/๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ’ฝ** ๐Ÿƒ ๐Ÿ”› ๐Ÿ’ฝ (๐ŸŽฐ, ๐Ÿฆ , โ™’๏ธ.) & **๐Ÿ› ๏ธ ๐ŸŒ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ•**: ๐Ÿ“จ **๐Ÿ—œ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ**, ๐Ÿ“จ **๐Ÿ—œ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ** โ˜‘ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿˆธ ๐Ÿƒ ๐ŸŽ ๐Ÿ’ฝ ( **FastAPI** ๐Ÿˆธ, ๐Ÿ‘‰ ๐Ÿ’ผ), โœŠ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ** โšช๏ธโžก๏ธ ๐Ÿˆธ, **๐Ÿ—œ โšซ๏ธ** โš™๏ธ โ˜‘ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“„** & ๐Ÿ“จ โšซ๏ธ ๐Ÿ”™ ๐Ÿ‘ฉโ€๐Ÿ’ป โš™๏ธ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”**. ๐Ÿ‘‰ ๐Ÿ’ฝ ๐Ÿ›Ž ๐Ÿค™ **๐Ÿค โŽ ๐Ÿ—ณ**. - -๐ŸŽ› ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿค โŽ ๐Ÿ—ณ: - -* Traefik (๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿต ๐Ÿ“„ ๐Ÿ”•) -* ๐Ÿ“ฅ (๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿต ๐Ÿ“„ ๐Ÿ”•) -* ๐Ÿ‘Œ -* โœณ - -## โžก๏ธ ๐Ÿ—œ - -โญ โžก๏ธ ๐Ÿ—œ, ๐Ÿ‘ซ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“„** ๐Ÿ’ฒ ๐Ÿ’™ ๐Ÿฅ‰ ๐Ÿฅณ. - -๐Ÿ› ๏ธ ๐Ÿ“Ž 1๏ธโƒฃ ๐Ÿ‘ซ ๐Ÿ“„ โš™๏ธ โš , ๐Ÿšš ๐Ÿ“  & ๐Ÿ“„ ๐Ÿ˜ฅ. - -โœ‹๏ธ โคด๏ธ **โžก๏ธ ๐Ÿ—œ** โœ. - -โšซ๏ธ ๐Ÿ— โšช๏ธโžก๏ธ ๐Ÿ’พ ๐Ÿ›. โšซ๏ธ ๐Ÿšš **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“„ ๐Ÿ†“**, ๐Ÿง ๐ŸŒŒ. ๐Ÿ‘ซ ๐Ÿ“„ โš™๏ธ ๐ŸŒ ๐Ÿฉ ๐Ÿ” ๐Ÿ’‚โ€โ™‚, & ๐Ÿ“-๐Ÿ–– (๐Ÿ”ƒ 3๏ธโƒฃ ๐Ÿ—“๏ธ), **๐Ÿ’‚โ€โ™‚ ๐Ÿค™ ๐Ÿ‘** โ†ฉ๏ธ ๐Ÿ‘ซ ๐Ÿ“‰ ๐Ÿ”†. - -๐Ÿ†” ๐Ÿ” โœ” & ๐Ÿ“„ ๐Ÿ— ๐Ÿ”. ๐Ÿ‘‰ โœ” ๐Ÿง ๐Ÿ”• ๐Ÿ‘ซ ๐Ÿ“„. - -๐Ÿ’ญ ๐Ÿง ๐Ÿ› ๏ธ & ๐Ÿ”• ๐Ÿ‘ซ ๐Ÿ“„ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ **๐Ÿ” ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, ๐Ÿ†“, โ™พ**. - -## ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ’ป - -๐Ÿ“ฅ ๐Ÿ–ผ โ” ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ› ๏ธ ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’–, ๐Ÿ” ๐Ÿ”, ๐Ÿ’ธ ๐Ÿ™‹ โœด๏ธ ๐Ÿ’ญ โš  ๐Ÿ‘ฉโ€๐Ÿ’ป. - -### ๐Ÿ†” ๐Ÿ“› - -โšซ๏ธ ๐Ÿ”œ ๐ŸŽฒ ๐ŸŒ โ–ถ๏ธ ๐Ÿ‘† **๐Ÿ—** **๐Ÿ†” ๐Ÿ“›**. โคด๏ธ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ”— โšซ๏ธ ๐Ÿ“ ๐Ÿ’ฝ (๐ŸŽฒ ๐Ÿ‘† ๐ŸŽ โ˜ ๐Ÿ•โ€๐Ÿฆบ). - -๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿคš โ˜ ๐Ÿ’ฝ (๐Ÿ•น ๐ŸŽฐ) โš–๏ธ ๐Ÿ•ณ ๐ŸŽ, & โšซ๏ธ ๐Ÿ”œ โœ”๏ธ ๐Ÿ”ง **๐Ÿ“ข ๐Ÿ“ข ๐Ÿ“ข**. - -๐Ÿ“ ๐Ÿ’ฝ(โ“‚) ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ”— โบ ("`A record`") โ˜ **๐Ÿ‘† ๐Ÿ†”** ๐Ÿ“ข **๐Ÿ“ข ๐Ÿ“ข ๐Ÿ‘† ๐Ÿ’ฝ**. - -๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ‘‰ ๐Ÿ•, ๐Ÿฅ‡ ๐Ÿ•ฐ, ๐Ÿ•โ” โš’ ๐ŸŒ ๐Ÿ†™. - -/// tip - -๐Ÿ‘‰ ๐Ÿ†” ๐Ÿ“› ๐Ÿ• ๐ŸŒŒ โญ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, โœ‹๏ธ ๐ŸŒ ๐Ÿช€ ๐Ÿ”› ๐Ÿ†” & ๐Ÿ“ข ๐Ÿ“ข, โšซ๏ธ ๐Ÿ’ธ ๐Ÿ’ฌ โšซ๏ธ ๐Ÿ“ฅ. - -/// - -### ๐Ÿ“ - -๐Ÿ”œ โžก๏ธ ๐ŸŽฏ ๐Ÿ”› ๐ŸŒ โ˜‘ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ•. - -๐Ÿฅ‡, ๐Ÿ–ฅ ๐Ÿ”œ โœ… โฎ๏ธ **๐Ÿ“ ๐Ÿ’ฝ** โšซ๏ธโ” **๐Ÿ“ข ๐Ÿ†”**, ๐Ÿ‘‰ ๐Ÿ’ผ, `someapp.example.com`. - -๐Ÿ“ ๐Ÿ’ฝ ๐Ÿ”œ ๐Ÿ’ฌ ๐Ÿ–ฅ โš™๏ธ ๐ŸŽฏ **๐Ÿ“ข ๐Ÿ“ข**. ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ“ข ๐Ÿ“ข ๐Ÿ“ข โš™๏ธ ๐Ÿ‘† ๐Ÿ’ฝ, ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ”— ๐Ÿ“ ๐Ÿ’ฝ. - - - -### ๐Ÿค ๐Ÿค โ–ถ๏ธ - -๐Ÿ–ฅ ๐Ÿ”œ โคด๏ธ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘ˆ ๐Ÿ“ข ๐Ÿ“ข ๐Ÿ”› **โ›ด 4๏ธโƒฃ4๏ธโƒฃ3๏ธโƒฃ** (๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” โ›ด). - -๐Ÿฅ‡ ๐Ÿ• ๐Ÿ“ป ๐Ÿ› ๏ธ ๐Ÿ”— ๐Ÿ–– ๐Ÿ‘ฉโ€๐Ÿ’ป & ๐Ÿ’ฝ & ๐Ÿ’ญ ๐Ÿ” ๐Ÿ”‘ ๐Ÿ‘ซ ๐Ÿ”œ โš™๏ธ, โ™’๏ธ. - - - -๐Ÿ‘‰ ๐Ÿ”— ๐Ÿ–– ๐Ÿ‘ฉโ€๐Ÿ’ป & ๐Ÿ’ฝ ๐Ÿ› ๏ธ ๐Ÿค ๐Ÿ”— ๐Ÿค™ **๐Ÿค ๐Ÿค**. - -### ๐Ÿค โฎ๏ธ ๐Ÿ‘ฒ โ†” - -**๐Ÿ•ด 1๏ธโƒฃ ๐Ÿ› ๏ธ** ๐Ÿ’ฝ ๐Ÿ’ช ๐Ÿ‘‚ ๐Ÿ”› ๐ŸŽฏ **โ›ด** ๐ŸŽฏ **๐Ÿ“ข ๐Ÿ“ข**. ๐Ÿ“ค ๐Ÿ’ช ๐ŸŽ ๐Ÿ› ๏ธ ๐Ÿ‘‚ ๐Ÿ”› ๐ŸŽ โ›ด ๐ŸŽ ๐Ÿ“ข ๐Ÿ“ข, โœ‹๏ธ ๐Ÿ•ด 1๏ธโƒฃ ๐Ÿ”  ๐ŸŒ€ ๐Ÿ“ข ๐Ÿ“ข & โ›ด. - -๐Ÿค (๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”) โš™๏ธ ๐ŸŽฏ โ›ด `443` ๐Ÿ”ข. ๐Ÿ‘ˆ โ›ด ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ’ช. - -๐Ÿ•ด 1๏ธโƒฃ ๐Ÿ› ๏ธ ๐Ÿ’ช ๐Ÿ‘‚ ๐Ÿ”› ๐Ÿ‘‰ โ›ด, ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ”œ โšซ๏ธ ๐Ÿ”œ **๐Ÿค โŽ ๐Ÿ—ณ**. - -๐Ÿค โŽ ๐Ÿ—ณ ๐Ÿ”œ โœ”๏ธ ๐Ÿ” 1๏ธโƒฃ โš–๏ธ ๐ŸŒ… **๐Ÿค ๐Ÿ“„** (๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“„). - -โš™๏ธ **๐Ÿ‘ฒ โ†”** ๐Ÿ”ฌ ๐Ÿ”›, ๐Ÿค โŽ ๐Ÿ—ณ ๐Ÿ”œ โœ… โ” ๐Ÿค (๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”) ๐Ÿ“„ ๐Ÿ’ช โšซ๏ธ ๐Ÿ”œ โš™๏ธ ๐Ÿ‘‰ ๐Ÿ”—, โš™๏ธ 1๏ธโƒฃ ๐Ÿ‘ˆ ๐Ÿ ๐Ÿ†” ๐Ÿ“ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -๐Ÿ‘‰ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ”œ โš™๏ธ ๐Ÿ“„ `someapp.example.com`. - - - -๐Ÿ‘ฉโ€๐Ÿ’ป โช **๐Ÿ’™** ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ‘ˆ ๐Ÿ— ๐Ÿ‘ˆ ๐Ÿค ๐Ÿ“„ (๐Ÿ‘‰ ๐Ÿ’ผ โžก๏ธ ๐Ÿ—œ, โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ”ƒ ๐Ÿ‘ˆ โช), โšซ๏ธ ๐Ÿ’ช **โœ”** ๐Ÿ‘ˆ ๐Ÿ“„ โ˜‘. - -โคด๏ธ, โš™๏ธ ๐Ÿ“„, ๐Ÿ‘ฉโ€๐Ÿ’ป & ๐Ÿค โŽ ๐Ÿ—ณ **๐Ÿ’ญ โ” ๐Ÿ—œ** ๐ŸŽ‚ **๐Ÿ•ธ ๐Ÿ“ป**. ๐Ÿ‘‰ ๐Ÿ **๐Ÿค ๐Ÿค** ๐Ÿ•. - -โฎ๏ธ ๐Ÿ‘‰, ๐Ÿ‘ฉโ€๐Ÿ’ป & ๐Ÿ’ฝ โœ”๏ธ **๐Ÿ—œ ๐Ÿ•ธ ๐Ÿ”—**, ๐Ÿ‘‰ โšซ๏ธโ” ๐Ÿค ๐Ÿšš. & โคด๏ธ ๐Ÿ‘ซ ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ˆ ๐Ÿ”— โ–ถ๏ธ โ˜‘ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“ป**. - -& ๐Ÿ‘ˆ โšซ๏ธโ” **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”** , โšซ๏ธ โœ… **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”** ๐Ÿ”˜ **๐Ÿ” ๐Ÿค ๐Ÿ”—** โ†ฉ๏ธ ๐Ÿ˜ (๐Ÿ’ฝ) ๐Ÿ•ธ ๐Ÿ”—. - -/// tip - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ” ๐Ÿ“ป ๐Ÿ”จ **๐Ÿ•ธ ๐ŸŽš**, ๐Ÿšซ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐ŸŽš. - -/// - -### ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ - -๐Ÿ”œ ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป & ๐Ÿ’ฝ (๐ŸŽฏ ๐Ÿ–ฅ & ๐Ÿค โŽ ๐Ÿ—ณ) โœ”๏ธ **๐Ÿ—œ ๐Ÿ•ธ ๐Ÿ”—**, ๐Ÿ‘ซ ๐Ÿ’ช โ–ถ๏ธ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“ป**. - -, ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“จ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ**. ๐Ÿ‘‰ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ ๐Ÿ”˜ ๐Ÿ—œ ๐Ÿค ๐Ÿ”—. - - - -### ๐Ÿ—œ ๐Ÿ“จ - -๐Ÿค โŽ ๐Ÿ—ณ ๐Ÿ”œ โš™๏ธ ๐Ÿ” โœ” **๐Ÿ—œ ๐Ÿ“จ**, & ๐Ÿ”œ ๐Ÿ“ถ **โœ… (๐Ÿ—œ) ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ** ๐Ÿ› ๏ธ ๐Ÿƒ ๐Ÿˆธ (๐Ÿ–ผ ๐Ÿ› ๏ธ โฎ๏ธ Uvicorn ๐Ÿƒโ€โ™‚ FastAPI ๐Ÿˆธ). - - - -### ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ - -๐Ÿˆธ ๐Ÿ”œ ๐Ÿ› ๏ธ ๐Ÿ“จ & ๐Ÿ“จ **โœ… (๐Ÿ’ฝ) ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ** ๐Ÿค โŽ ๐Ÿ—ณ. - - - -### ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ - -๐Ÿค โŽ ๐Ÿ—ณ ๐Ÿ”œ โคด๏ธ **๐Ÿ—œ ๐Ÿ“จ** โš™๏ธ โš› โœ” โญ (๐Ÿ‘ˆ โ–ถ๏ธ โฎ๏ธ ๐Ÿ“„ `someapp.example.com`), & ๐Ÿ“จ โšซ๏ธ ๐Ÿ”™ ๐Ÿ–ฅ. - -โญ, ๐Ÿ–ฅ ๐Ÿ”œ โœ” ๐Ÿ‘ˆ ๐Ÿ“จ โ˜‘ & ๐Ÿ—œ โฎ๏ธ โ–ถ๏ธ๏ธ ๐Ÿ” ๐Ÿ”‘, โ™’๏ธ. โšซ๏ธ ๐Ÿ”œ โคด๏ธ **๐Ÿ—œ ๐Ÿ“จ** & ๐Ÿ› ๏ธ โšซ๏ธ. - - - -๐Ÿ‘ฉโ€๐Ÿ’ป (๐Ÿ–ฅ) ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ โ˜‘ ๐Ÿ’ฝ โ†ฉ๏ธ โšซ๏ธ โš™๏ธ โš› ๐Ÿ‘ซ โœ” โš™๏ธ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“„** โญ. - -### ๐Ÿ’— ๐Ÿˆธ - -๐ŸŽ ๐Ÿ’ฝ (โš–๏ธ ๐Ÿ’ฝ), ๐Ÿ“ค ๐Ÿ’ช **๐Ÿ’— ๐Ÿˆธ**, ๐Ÿ–ผ, ๐ŸŽ ๐Ÿ› ๏ธ ๐Ÿ“‹ โš–๏ธ ๐Ÿ’ฝ. - -๐Ÿ•ด 1๏ธโƒฃ ๐Ÿ› ๏ธ ๐Ÿ’ช ๐Ÿšš ๐ŸŽฏ ๐Ÿ“ข & โ›ด (๐Ÿค โŽ ๐Ÿ—ณ ๐Ÿ‘† ๐Ÿ–ผ) โœ‹๏ธ ๐ŸŽ ๐Ÿˆธ/๐Ÿ› ๏ธ ๐Ÿ’ช ๐Ÿƒ ๐Ÿ”› ๐Ÿ’ฝ(โ“‚) ๐Ÿ’โ€โ™‚๏ธ, ๐Ÿ“ ๐Ÿ‘ซ ๐Ÿšซ ๐Ÿ”„ โš™๏ธ ๐ŸŽ **๐ŸŒ€ ๐Ÿ“ข ๐Ÿ“ข & โ›ด**. - - - -๐Ÿ‘ˆ ๐ŸŒŒ, ๐Ÿค โŽ ๐Ÿ—ณ ๐Ÿ’ช ๐Ÿต ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” & ๐Ÿ“„ **๐Ÿ’— ๐Ÿ†”**, ๐Ÿ’— ๐Ÿˆธ, & โคด๏ธ ๐Ÿ“ถ ๐Ÿ“จ โ–ถ๏ธ๏ธ ๐Ÿˆธ ๐Ÿ”  ๐Ÿ’ผ. - -### ๐Ÿ“„ ๐Ÿ”• - -โ˜ ๐Ÿ”ฎ, ๐Ÿ”  ๐Ÿ“„ ๐Ÿ”œ **๐Ÿ•›** (๐Ÿ”ƒ 3๏ธโƒฃ ๐Ÿ—“๏ธ โฎ๏ธ ๐Ÿ— โšซ๏ธ). - -& โคด๏ธ, ๐Ÿ“ค ๐Ÿ”œ โž•1๏ธโƒฃ ๐Ÿ“‹ (๐Ÿ’ผ โšซ๏ธ โž•1๏ธโƒฃ ๐Ÿ“‹, ๐Ÿ’ผ โšซ๏ธ ๐Ÿ’ช ๐ŸŽ ๐Ÿค โŽ ๐Ÿ—ณ) ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ’ฌ โžก๏ธ ๐Ÿ—œ, & โ™ป ๐Ÿ“„(โ“‚). - - - -**๐Ÿค ๐Ÿ“„** **๐Ÿ”— โฎ๏ธ ๐Ÿ†” ๐Ÿ“›**, ๐Ÿšซ โฎ๏ธ ๐Ÿ“ข ๐Ÿ“ข. - -, โ™ป ๐Ÿ“„, ๐Ÿ”• ๐Ÿ“‹ ๐Ÿ’ช **๐ŸŽฆ** ๐Ÿ›ƒ (โžก๏ธ ๐Ÿ—œ) ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ‘ **"๐Ÿ‘" & ๐ŸŽ› ๐Ÿ‘ˆ ๐Ÿ†”**. - -๐Ÿ‘ˆ, & ๐Ÿ— ๐ŸŽ ๐Ÿˆธ ๐Ÿ’ช, ๐Ÿ“ค ๐Ÿ“š ๐ŸŒŒ โšซ๏ธ ๐Ÿ’ช โšซ๏ธ. ๐ŸŒŸ ๐ŸŒŒ: - -* **๐Ÿ”€ ๐Ÿ“ โบ**. - * ๐Ÿ‘‰, ๐Ÿ”• ๐Ÿ“‹ ๐Ÿ’ช ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”— ๐Ÿ“ ๐Ÿ•โ€๐Ÿฆบ,, โš“๏ธ ๐Ÿ”› ๐Ÿ“ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘† โš™๏ธ, ๐Ÿ‘‰ 5๏ธโƒฃ๐Ÿ“† โš–๏ธ ๐Ÿ’ช ๐Ÿšซ ๐ŸŽ›. -* **๐Ÿƒ ๐Ÿ’ฝ** (๐ŸŒ˜ โฎ๏ธ ๐Ÿ“„ ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ) ๐Ÿ”› ๐Ÿ“ข ๐Ÿ“ข ๐Ÿ“ข ๐Ÿ”— โฎ๏ธ ๐Ÿ†”. - * ๐Ÿ‘ฅ ๐Ÿ’ฌ ๐Ÿ”›, ๐Ÿ•ด 1๏ธโƒฃ ๐Ÿ› ๏ธ ๐Ÿ’ช ๐Ÿ‘‚ ๐Ÿ”› ๐ŸŽฏ ๐Ÿ“ข & โ›ด. - * ๐Ÿ‘‰ 1๏ธโƒฃ ๐Ÿค” โšซ๏ธโ” โšซ๏ธ ๐Ÿ“ถ โš  ๐Ÿ•โ” ๐ŸŽ ๐Ÿค โŽ ๐Ÿ—ณ โœŠ ๐Ÿ’… ๐Ÿ“„ ๐Ÿ”• ๐Ÿ› ๏ธ. - * โช, ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ โ›”๏ธ ๐Ÿค โŽ ๐Ÿ—ณ ๐Ÿ˜–, โ–ถ๏ธ ๐Ÿ”• ๐Ÿ“‹ ๐Ÿ“Ž ๐Ÿ“„, โคด๏ธ ๐Ÿ”— ๐Ÿ‘ซ โฎ๏ธ ๐Ÿค โŽ ๐Ÿ—ณ, & โคด๏ธ โ ๐Ÿค โŽ ๐Ÿ—ณ. ๐Ÿ‘‰ ๐Ÿšซ ๐Ÿ’ฏ, ๐Ÿ‘† ๐Ÿ“ฑ(โ“‚) ๐Ÿ”œ ๐Ÿšซ ๐Ÿ’ช โฎ๏ธ ๐Ÿ•ฐ ๐Ÿ‘ˆ ๐Ÿค โŽ ๐Ÿ—ณ ๐Ÿ“†. - -๐ŸŒ ๐Ÿ‘‰ ๐Ÿ”• ๐Ÿ› ๏ธ, โช ๐Ÿฆ ๐Ÿ“ฑ, 1๏ธโƒฃ ๐Ÿ‘‘ ๐Ÿค” โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’š โœ”๏ธ **๐ŸŽ โš™๏ธ ๐Ÿต ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”** โฎ๏ธ ๐Ÿค โŽ ๐Ÿ—ณ โ†ฉ๏ธ โš™๏ธ ๐Ÿค ๐Ÿ“„ โฎ๏ธ ๐Ÿˆธ ๐Ÿ’ฝ ๐Ÿ”— (โœ… Uvicorn). - -## ๐ŸŒƒ - -โœ”๏ธ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”** ๐Ÿ“ถ โš , & **๐ŸŽฏ** ๐Ÿ† ๐Ÿ’ผ. ๐ŸŒ… ๐ŸŽฏ ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป โœ”๏ธ ๐Ÿšฎ ๐Ÿคญ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ”ƒ **๐Ÿค” ๐Ÿ‘‰ ๐Ÿ”ง** & โ” ๐Ÿ‘ซ ๐Ÿ‘ท. - -โœ‹๏ธ ๐Ÿ• ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ”ฐ โ„น **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ’ป** ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช ๐ŸŒ€ & ๐Ÿ”— ๐ŸŽ ๐Ÿงฐ โ„น ๐Ÿ‘† ๐Ÿ› ๏ธ ๐ŸŒ ๐Ÿ™… ๐ŸŒŒ. - -โญ ๐Ÿ“ƒ, ๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ‘† ๐Ÿ“š ๐Ÿงฑ ๐Ÿ–ผ โ” โš’ ๐Ÿ†™ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”** **FastAPI** ๐Ÿˆธ. ๐Ÿ‘ถ diff --git a/docs/em/docs/deployment/index.md b/docs/em/docs/deployment/index.md deleted file mode 100644 index 9bcf427b6..000000000 --- a/docs/em/docs/deployment/index.md +++ /dev/null @@ -1,21 +0,0 @@ -# ๐Ÿ› ๏ธ - -๐Ÿ› ๏ธ **FastAPI** ๐Ÿˆธ ๐Ÿ“ถ โฉ. - -## โšซ๏ธโ” ๐Ÿ”จ ๐Ÿ› ๏ธ โ›“ - -**๐Ÿ› ๏ธ** ๐Ÿˆธ โ›“ ๐ŸŽญ ๐Ÿ’ช ๐Ÿ“ถ โš’ โšซ๏ธ **๐Ÿ’ช ๐Ÿ‘ฉโ€๐Ÿ’ป**. - -**๐Ÿ•ธ ๐Ÿ› ๏ธ**, โšซ๏ธ ๐Ÿ›Ž ๐Ÿ”Œ ๐Ÿšฎ โšซ๏ธ **๐Ÿ›ฐ ๐ŸŽฐ**, โฎ๏ธ **๐Ÿ’ฝ ๐Ÿ“‹** ๐Ÿ‘ˆ ๐Ÿšš ๐Ÿ‘ ๐ŸŽญ, โš–, โ™’๏ธ, ๐Ÿ‘ˆ ๐Ÿ‘† **๐Ÿ‘ฉโ€๐Ÿ’ป** ๐Ÿ’ช **๐Ÿ”** ๐Ÿˆธ โ™ป & ๐Ÿต ๐Ÿ” โš–๏ธ โš . - -๐Ÿ‘‰ ๐Ÿ”… **๐Ÿ› ๏ธ** โ–ถ๏ธ, ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ•ง ๐Ÿ”€ ๐Ÿ“Ÿ, ๐Ÿ’” โšซ๏ธ & โ™ป โšซ๏ธ, โ›”๏ธ & ๐Ÿ” ๐Ÿ› ๏ธ ๐Ÿ’ฝ, โ™’๏ธ. - -## ๐Ÿ› ๏ธ ๐ŸŽ› - -๐Ÿ“ค ๐Ÿ“š ๐ŸŒŒ โšซ๏ธ โš“๏ธ ๐Ÿ”› ๐Ÿ‘† ๐ŸŽฏ โš™๏ธ ๐Ÿ’ผ & ๐Ÿงฐ ๐Ÿ‘ˆ ๐Ÿ‘† โš™๏ธ. - -๐Ÿ‘† ๐Ÿ’ช **๐Ÿ› ๏ธ ๐Ÿ’ฝ** ๐Ÿ‘† โš™๏ธ ๐ŸŒ€ ๐Ÿงฐ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ **โ˜ ๐Ÿ•โ€๐Ÿฆบ** ๐Ÿ‘ˆ ๐Ÿ”จ ๐Ÿ• ๐Ÿ‘ท ๐Ÿ‘†, โš–๏ธ ๐ŸŽ ๐Ÿ’ช ๐ŸŽ›. - -๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ‘† ๐Ÿ‘‘ ๐Ÿ”ง ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ โœ”๏ธ ๐Ÿคฏ ๐Ÿ•โ” ๐Ÿ› ๏ธ **FastAPI** ๐Ÿˆธ (๐Ÿ‘ ๐ŸŒ… โšซ๏ธ โœ” ๐Ÿ™† ๐ŸŽ ๐Ÿ†Ž ๐Ÿ•ธ ๐Ÿˆธ). - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŒ– โ„น โœ”๏ธ ๐Ÿคฏ & โš’ โšซ๏ธ โญ ๐Ÿ“„. ๐Ÿ‘ถ diff --git a/docs/em/docs/deployment/manually.md b/docs/em/docs/deployment/manually.md deleted file mode 100644 index 4fa2d13e2..000000000 --- a/docs/em/docs/deployment/manually.md +++ /dev/null @@ -1,159 +0,0 @@ -# ๐Ÿƒ ๐Ÿ’ฝ โŽ - Uvicorn - -๐Ÿ‘‘ ๐Ÿ‘œ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿƒ **FastAPI** ๐Ÿˆธ ๐Ÿ›ฐ ๐Ÿ’ฝ ๐ŸŽฐ ๐Ÿ”ซ ๐Ÿ’ฝ ๐Ÿ“‹ ๐Ÿ’– **Uvicorn**. - -๐Ÿ“ค 3๏ธโƒฃ ๐Ÿ‘‘ ๐ŸŽ›: - -* Uvicorn: โ†• ๐ŸŽญ ๐Ÿ”ซ ๐Ÿ’ฝ. -* Hypercorn: ๐Ÿ”ซ ๐Ÿ’ฝ ๐Ÿ”— โฎ๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”/2๏ธโƒฃ & ๐ŸŽป ๐Ÿ‘ช ๐ŸŽ โš’. -* ๐Ÿ‘ธ: ๐Ÿ”ซ ๐Ÿ’ฝ ๐Ÿ— โœณ ๐Ÿ“ป. - -## ๐Ÿ’ฝ ๐ŸŽฐ & ๐Ÿ’ฝ ๐Ÿ“‹ - -๐Ÿ“ค ๐Ÿคช โ„น ๐Ÿ”ƒ ๐Ÿ“› โœ”๏ธ ๐Ÿคฏ. ๐Ÿ‘ถ - -๐Ÿ”ค "**๐Ÿ’ฝ**" ๐Ÿ›Ž โš™๏ธ ๐Ÿ”— ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ›ฐ/โ˜ ๐Ÿ’ป (โš› โš–๏ธ ๐Ÿ•น ๐ŸŽฐ) & ๐Ÿ“‹ ๐Ÿ‘ˆ ๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ‘ˆ ๐ŸŽฐ (โœ… Uvicorn). - -โœ”๏ธ ๐Ÿ‘ˆ ๐Ÿคฏ ๐Ÿ•โ” ๐Ÿ‘† โœ "๐Ÿ’ฝ" ๐Ÿข, โšซ๏ธ ๐Ÿ’ช ๐Ÿ”— 1๏ธโƒฃ ๐Ÿ“š 2๏ธโƒฃ ๐Ÿ‘œ. - -๐Ÿ•โ” ๐Ÿ”— ๐Ÿ›ฐ ๐ŸŽฐ, โšซ๏ธ โš  ๐Ÿค™ โšซ๏ธ **๐Ÿ’ฝ**, โœ‹๏ธ **๐ŸŽฐ**, **๐Ÿ’พ** (๐Ÿ•น ๐ŸŽฐ), **๐Ÿ•ธ**. ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿ”— ๐Ÿ†Ž ๐Ÿ›ฐ ๐ŸŽฐ, ๐Ÿ›Ž ๐Ÿƒโ€โ™‚ ๐Ÿ’พ, ๐ŸŒโ” ๐Ÿ‘† ๐Ÿƒ ๐Ÿ“‹. - -## โŽ ๐Ÿ’ฝ ๐Ÿ“‹ - -๐Ÿ‘† ๐Ÿ’ช โŽ ๐Ÿ”ซ ๐Ÿ”— ๐Ÿ’ฝ โฎ๏ธ: - -//// tab | Uvicorn - -* Uvicorn, ๐ŸŒฉ-โฉ ๐Ÿ”ซ ๐Ÿ’ฝ, ๐Ÿ— ๐Ÿ”› uvloop & httptool. - -
- -```console -$ pip install "uvicorn[standard]" - ----> 100% -``` - -
- -/// tip - -โŽ `standard`, Uvicorn ๐Ÿ”œ โŽ & โš™๏ธ ๐Ÿ‘ โž• ๐Ÿ”—. - -๐Ÿ‘ˆ โœ… `uvloop`, โ†•-๐ŸŽญ ๐Ÿ’ง-โ™ป `asyncio`, ๐Ÿ‘ˆ ๐Ÿšš ๐Ÿฆ ๐Ÿ› ๏ธ ๐ŸŽญ ๐Ÿ“ˆ. - -/// - -//// - -//// tab | Hypercorn - -* Hypercorn, ๐Ÿ”ซ ๐Ÿ’ฝ ๐Ÿ”— โฎ๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”/2๏ธโƒฃ. - -
- -```console -$ pip install hypercorn - ----> 100% -``` - -
- -...โš–๏ธ ๐Ÿ™† ๐ŸŽ ๐Ÿ”ซ ๐Ÿ’ฝ. - -//// - -## ๐Ÿƒ ๐Ÿ’ฝ ๐Ÿ“‹ - -๐Ÿ‘† ๐Ÿ’ช โคด๏ธ ๐Ÿƒ ๐Ÿ‘† ๐Ÿˆธ ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† โœ”๏ธ โŒ› ๐Ÿ”ฐ, โœ‹๏ธ ๐Ÿต `--reload` ๐ŸŽ›, โœ…: - -//// tab | Uvicorn - -
- -```console -$ uvicorn main:app --host 0.0.0.0 --port 80 - -INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit) -``` - -
- -//// - -//// tab | Hypercorn - -
- -```console -$ hypercorn main:app --bind 0.0.0.0:80 - -Running on 0.0.0.0:8080 over http (CTRL + C to quit) -``` - -
- -//// - -/// warning - -๐Ÿ’ญ โŽ `--reload` ๐ŸŽ› ๐Ÿšฅ ๐Ÿ‘† โš™๏ธ โšซ๏ธ. - - `--reload` ๐ŸŽ› ๐Ÿด ๐ŸŒ… ๐ŸŒ… โ„น, ๐ŸŒ… โš , โ™’๏ธ. - -โšซ๏ธ โ„น ๐Ÿ“š โฎ๏ธ **๐Ÿ› ๏ธ**, โœ‹๏ธ ๐Ÿ‘† **๐Ÿšซ๐Ÿ”œ ๐Ÿšซ** โš™๏ธ โšซ๏ธ **๐Ÿญ**. - -/// - -## Hypercorn โฎ๏ธ ๐ŸŽป - -๐Ÿ’ƒ & **FastAPI** โš“๏ธ ๐Ÿ”› AnyIO, โ” โš’ ๐Ÿ‘ซ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ ๐Ÿฉ ๐Ÿ—ƒ โœณ & ๐ŸŽป. - -๐Ÿ‘, Uvicorn โณ ๐Ÿ•ด ๐Ÿ”— โฎ๏ธ โœณ, & โšซ๏ธ ๐Ÿ›Ž โš™๏ธ `uvloop`, โ†•-๐ŸŽญ ๐Ÿ’ง-โ™ป `asyncio`. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ”— โš™๏ธ **๐ŸŽป**, โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ **Hypercorn** โšซ๏ธ ๐Ÿ•โ€๐Ÿฆบ โšซ๏ธ. ๐Ÿ‘ถ - -### โŽ Hypercorn โฎ๏ธ ๐ŸŽป - -๐Ÿฅ‡ ๐Ÿ‘† ๐Ÿ’ช โŽ Hypercorn โฎ๏ธ ๐ŸŽป ๐Ÿ•โ€๐Ÿฆบ: - -
- -```console -$ pip install "hypercorn[trio]" ----> 100% -``` - -
- -### ๐Ÿƒ โฎ๏ธ ๐ŸŽป - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ“‹ โธ ๐ŸŽ› `--worker-class` โฎ๏ธ ๐Ÿ’ฒ `trio`: - -
- -```console -$ hypercorn main:app --worker-class trio -``` - -
- -& ๐Ÿ‘ˆ ๐Ÿ”œ โ–ถ๏ธ Hypercorn โฎ๏ธ ๐Ÿ‘† ๐Ÿ“ฑ โš™๏ธ ๐ŸŽป ๐Ÿ‘ฉโ€๐Ÿ’ป. - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽป ๐Ÿ”˜ ๐Ÿ‘† ๐Ÿ“ฑ. โš–๏ธ ๐Ÿ‘, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ AnyIO, ๐Ÿšง ๐Ÿ‘† ๐Ÿ“Ÿ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐ŸŽป & โœณ. ๐Ÿ‘ถ - -## ๐Ÿ› ๏ธ ๐Ÿ”ง - -๐Ÿ‘ซ ๐Ÿ–ผ ๐Ÿƒ ๐Ÿ’ฝ ๐Ÿ“‹ (๐Ÿ“ง.โ“‚ Uvicorn), โ–ถ๏ธ **๐Ÿ‘ ๐Ÿ› ๏ธ**, ๐Ÿ‘‚ ๐Ÿ”› ๐ŸŒ ๐Ÿ“ข (`0.0.0.0`) ๐Ÿ”› ๐Ÿ” โ›ด (โœ… `80`). - -๐Ÿ‘‰ ๐Ÿ”ฐ ๐Ÿ’ญ. โœ‹๏ธ ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’š โœŠ ๐Ÿ’… ๐ŸŒ– ๐Ÿ‘œ, ๐Ÿ’–: - -* ๐Ÿ’‚โ€โ™‚ - ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” -* ๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ•ด -* โ -* ๐Ÿงฌ (๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿƒ) -* ๐Ÿ’พ -* โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ - -๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ฌ ๐Ÿ‘† ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ”  ๐Ÿ‘ซ ๐Ÿ”ง, โ” ๐Ÿ’ญ ๐Ÿ”ƒ ๐Ÿ‘ซ, & ๐Ÿงฑ ๐Ÿ–ผ โฎ๏ธ ๐ŸŽ› ๐Ÿต ๐Ÿ‘ซ โญ ๐Ÿ“ƒ. ๐Ÿ‘ถ diff --git a/docs/em/docs/deployment/server-workers.md b/docs/em/docs/deployment/server-workers.md deleted file mode 100644 index eb29b2376..000000000 --- a/docs/em/docs/deployment/server-workers.md +++ /dev/null @@ -1,181 +0,0 @@ -# ๐Ÿ’ฝ ๐Ÿ‘จโ€๐Ÿญ - ๐Ÿ โฎ๏ธ Uvicorn - -โžก๏ธ โœ… ๐Ÿ”™ ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿ”ง โšช๏ธโžก๏ธ โญ: - -* ๐Ÿ’‚โ€โ™‚ - ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” -* ๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ•ด -* โ -* **๐Ÿงฌ (๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿƒ)** -* ๐Ÿ’พ -* โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ - -๐Ÿ†™ ๐Ÿ‘‰ โ˜, โฎ๏ธ ๐ŸŒ ๐Ÿ”ฐ ๐Ÿฉบ, ๐Ÿ‘† โœ”๏ธ ๐ŸŽฒ ๐Ÿƒโ€โ™‚ **๐Ÿ’ฝ ๐Ÿ“‹** ๐Ÿ’– Uvicorn, ๐Ÿƒโ€โ™‚ **๐Ÿ‘ ๐Ÿ› ๏ธ**. - -๐Ÿ•โ” ๐Ÿ› ๏ธ ๐Ÿˆธ ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’š โœ”๏ธ **๐Ÿงฌ ๐Ÿ› ๏ธ** โœŠ ๐Ÿ“ˆ **๐Ÿ’— ๐Ÿš** & ๐Ÿ’ช ๐Ÿต ๐ŸŒ… ๐Ÿ“จ. - -๐Ÿ‘† ๐Ÿ‘€ โฎ๏ธ ๐Ÿ“ƒ ๐Ÿ”ƒ [๐Ÿ› ๏ธ ๐Ÿ”ง](concepts.md){.internal-link target=_blank}, ๐Ÿ“ค ๐Ÿ’— ๐ŸŽ› ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ. - -๐Ÿ“ฅ ๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ‘† โ” โš™๏ธ **๐Ÿ** โฎ๏ธ **Uvicorn ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ**. - -/// info - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿ“ฆ, ๐Ÿ–ผ โฎ๏ธ โ˜ โš–๏ธ Kubernetes, ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ฌ ๐Ÿ‘† ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ‘ˆ โญ ๐Ÿ“ƒ: [FastAPI ๐Ÿ“ฆ - โ˜](docker.md){.internal-link target=_blank}. - -๐ŸŽฏ, ๐Ÿ•โ” ๐Ÿƒ ๐Ÿ”› **Kubernetes** ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ **๐Ÿšซ** ๐Ÿ’š โš™๏ธ ๐Ÿ & โ†ฉ๏ธ ๐Ÿƒ **๐Ÿ‘ Uvicorn ๐Ÿ› ๏ธ ๐Ÿ“ ๐Ÿ“ฆ**, โœ‹๏ธ ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿ”ƒ โšซ๏ธ โช ๐Ÿ‘ˆ ๐Ÿ“ƒ. - -/// - -## ๐Ÿ โฎ๏ธ Uvicorn ๐Ÿ‘จโ€๐Ÿญ - -**๐Ÿ** โœด๏ธ ๐Ÿˆธ ๐Ÿ’ฝ โš™๏ธ **๐Ÿ‡จ๐Ÿ‡ป ๐Ÿฉ**. ๐Ÿ‘ˆ โ›“ ๐Ÿ‘ˆ ๐Ÿ ๐Ÿ’ช ๐Ÿฆ ๐Ÿˆธ ๐Ÿ’– ๐Ÿบ & โœณ. ๐Ÿ โšซ๏ธ ๐Ÿšซ ๐Ÿ”— โฎ๏ธ **FastAPI**, FastAPI โš™๏ธ ๐Ÿ†• **๐Ÿ”ซ ๐Ÿฉ**. - -โœ‹๏ธ ๐Ÿ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ท **๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ** & ๐Ÿค ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ฌ โšซ๏ธ โ” ๐ŸŽฏ **๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ ๐ŸŽ“** โš™๏ธ. โคด๏ธ ๐Ÿ ๐Ÿ”œ โ–ถ๏ธ 1๏ธโƒฃ โš–๏ธ ๐ŸŒ– **๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ** โš™๏ธ ๐Ÿ‘ˆ ๐ŸŽ“. - -& **Uvicorn** โœ”๏ธ **๐Ÿ-๐Ÿ”— ๐Ÿ‘จโ€๐Ÿญ ๐ŸŽ“**. - -โš™๏ธ ๐Ÿ‘ˆ ๐ŸŒ€, ๐Ÿ ๐Ÿ”œ ๐Ÿšซ **๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ**, ๐Ÿ‘‚ ๐Ÿ”› **โ›ด** & **๐Ÿ“ข**. & โšซ๏ธ ๐Ÿ”œ **๐Ÿ“ถ** ๐Ÿ“ป ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ ๐Ÿƒ **Uvicorn ๐ŸŽ“**. - -& โคด๏ธ ๐Ÿ-๐Ÿ”— **Uvicorn ๐Ÿ‘จโ€๐Ÿญ** ๐ŸŽ“ ๐Ÿ”œ ๐Ÿˆš ๐Ÿญ ๐Ÿ“Š ๐Ÿ“จ ๐Ÿ ๐Ÿ”ซ ๐Ÿฉ FastAPI โš™๏ธ โšซ๏ธ. - -## โŽ ๐Ÿ & Uvicorn - -
- -```console -$ pip install "uvicorn[standard]" gunicorn - ----> 100% -``` - -
- -๐Ÿ‘ˆ ๐Ÿ”œ โŽ ๐Ÿ‘ฏโ€โ™‚๏ธ Uvicorn โฎ๏ธ `standard` โž• ๐Ÿ“ฆ (๐Ÿคš โ†• ๐ŸŽญ) & ๐Ÿ. - -## ๐Ÿƒ ๐Ÿ โฎ๏ธ Uvicorn ๐Ÿ‘จโ€๐Ÿญ - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿƒ ๐Ÿ โฎ๏ธ: - -
- -```console -$ gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80 - -[19499] [INFO] Starting gunicorn 20.1.0 -[19499] [INFO] Listening at: http://0.0.0.0:80 (19499) -[19499] [INFO] Using worker: uvicorn.workers.UvicornWorker -[19511] [INFO] Booting worker with pid: 19511 -[19513] [INFO] Booting worker with pid: 19513 -[19514] [INFO] Booting worker with pid: 19514 -[19515] [INFO] Booting worker with pid: 19515 -[19511] [INFO] Started server process [19511] -[19511] [INFO] Waiting for application startup. -[19511] [INFO] Application startup complete. -[19513] [INFO] Started server process [19513] -[19513] [INFO] Waiting for application startup. -[19513] [INFO] Application startup complete. -[19514] [INFO] Started server process [19514] -[19514] [INFO] Waiting for application startup. -[19514] [INFO] Application startup complete. -[19515] [INFO] Started server process [19515] -[19515] [INFO] Waiting for application startup. -[19515] [INFO] Application startup complete. -``` - -
- -โžก๏ธ ๐Ÿ‘€ โšซ๏ธโ” ๐Ÿ”  ๐Ÿ‘ˆ ๐ŸŽ› โ›“: - -* `main:app`: ๐Ÿ‘‰ ๐ŸŽ โ• โš™๏ธ Uvicorn, `main` โ›“ ๐Ÿ ๐Ÿ•น ๐Ÿ“› "`main`",, ๐Ÿ“ `main.py`. & `app` ๐Ÿ“› ๐Ÿ”ข ๐Ÿ‘ˆ **FastAPI** ๐Ÿˆธ. - * ๐Ÿ‘† ๐Ÿ’ช ๐ŸŒˆ ๐Ÿ‘ˆ `main:app` ๐ŸŒ“ ๐Ÿ `import` ๐Ÿ“„ ๐Ÿ’–: - - ```Python - from main import app - ``` - - * , โค `main:app` ๐Ÿ”œ ๐ŸŒ“ ๐Ÿ `import` ๐Ÿ• `from main import app`. -* `--workers`: ๐Ÿ”ข ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ โš™๏ธ, ๐Ÿ”  ๐Ÿ”œ ๐Ÿƒ Uvicorn ๐Ÿ‘จโ€๐Ÿญ, ๐Ÿ‘‰ ๐Ÿ’ผ, 4๏ธโƒฃ ๐Ÿ‘จโ€๐Ÿญ. -* `--worker-class`: ๐Ÿ-๐Ÿ”— ๐Ÿ‘จโ€๐Ÿญ ๐ŸŽ“ โš™๏ธ ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ. - * ๐Ÿ“ฅ ๐Ÿ‘ฅ ๐Ÿšถโ€โ™€๏ธ ๐ŸŽ“ ๐Ÿ‘ˆ ๐Ÿ ๐Ÿ’ช ๐Ÿ—„ & โš™๏ธ โฎ๏ธ: - - ```Python - import uvicorn.workers.UvicornWorker - ``` - -* `--bind`: ๐Ÿ‘‰ ๐Ÿ’ฌ ๐Ÿ ๐Ÿ“ข & โ›ด ๐Ÿ‘‚, โš™๏ธ โค (`:`) ๐ŸŽ ๐Ÿ“ข & โ›ด. - * ๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒโ€โ™‚ Uvicorn ๐Ÿ”—, โ†ฉ๏ธ `--bind 0.0.0.0:80` (๐Ÿ ๐ŸŽ›) ๐Ÿ‘† ๐Ÿ”œ โš™๏ธ `--host 0.0.0.0` & `--port 80`. - -๐Ÿ”ข, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ‘ˆ โšซ๏ธ ๐ŸŽฆ **๐Ÿ•น** (๐Ÿ› ๏ธ ๐Ÿ†”) ๐Ÿ”  ๐Ÿ› ๏ธ (โšซ๏ธ ๐Ÿ”ข). - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ‘ˆ: - -* ๐Ÿ **๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ** โ–ถ๏ธ โฎ๏ธ ๐Ÿ•น `19499` (๐Ÿ‘† ๐Ÿ’ผ โšซ๏ธ ๐Ÿ”œ ๐ŸŽ ๐Ÿ”ข). -* โคด๏ธ โšซ๏ธ โ–ถ๏ธ `Listening at: http://0.0.0.0:80`. -* โคด๏ธ โšซ๏ธ ๐Ÿ” ๐Ÿ‘ˆ โšซ๏ธ โœ”๏ธ โš™๏ธ ๐Ÿ‘จโ€๐Ÿญ ๐ŸŽ“ `uvicorn.workers.UvicornWorker`. -* & โคด๏ธ โšซ๏ธ โ–ถ๏ธ **4๏ธโƒฃ ๐Ÿ‘จโ€๐Ÿญ**, ๐Ÿ”  โฎ๏ธ ๐Ÿšฎ ๐Ÿ‘ ๐Ÿ•น: `19511`, `19513`, `19514`, & `19515`. - -๐Ÿ ๐Ÿ”œ โœŠ ๐Ÿ’… ๐Ÿ› ๏ธ **โ˜ ๏ธ ๐Ÿ› ๏ธ** & **๐Ÿ”** ๐Ÿ†• ๐Ÿ• ๐Ÿšฅ ๐Ÿ’š ๐Ÿšง ๐Ÿ”ข ๐Ÿ‘จโ€๐Ÿญ. ๐Ÿ‘ˆ โ„น ๐Ÿ• โฎ๏ธ **โ** ๐Ÿ”ง โšช๏ธโžก๏ธ ๐Ÿ“‡ ๐Ÿ”›. - -๐Ÿ‘, ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’š โœ”๏ธ ๐Ÿ•ณ ๐Ÿž โš’ ๐Ÿ’ญ **โ ๐Ÿ** ๐Ÿšฅ ๐Ÿ’ช, & **๐Ÿƒ โšซ๏ธ ๐Ÿ”› ๐Ÿ•ด**, โ™’๏ธ. - -## Uvicorn โฎ๏ธ ๐Ÿ‘จโ€๐Ÿญ - -Uvicorn โœ”๏ธ ๐ŸŽ› โ–ถ๏ธ & ๐Ÿƒ ๐Ÿ“š **๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ**. - -๐Ÿ‘, ๐Ÿ”œ, Uvicorn ๐Ÿ› ๏ธ ๐Ÿšš ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ ๐ŸŒ… ๐Ÿ“‰ ๐ŸŒ˜ ๐Ÿ. , ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โœ”๏ธ ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ‘‰ ๐ŸŽš (๐Ÿ ๐ŸŽš), โคด๏ธ โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘ ๐Ÿ”„ โฎ๏ธ ๐Ÿ ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ. - -๐Ÿ™† ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿƒ โšซ๏ธ ๐Ÿ’– ๐Ÿ‘‰: - -
- -```console -$ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4 -INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit) -INFO: Started parent process [27365] -INFO: Started server process [27368] -INFO: Waiting for application startup. -INFO: Application startup complete. -INFO: Started server process [27369] -INFO: Waiting for application startup. -INFO: Application startup complete. -INFO: Started server process [27370] -INFO: Waiting for application startup. -INFO: Application startup complete. -INFO: Started server process [27367] -INFO: Waiting for application startup. -INFO: Application startup complete. -``` - -
- -๐Ÿ•ด ๐Ÿ†• ๐ŸŽ› ๐Ÿ“ฅ `--workers` ๐Ÿ’ฌ Uvicorn โ–ถ๏ธ 4๏ธโƒฃ ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ‘ˆ โšซ๏ธ ๐ŸŽฆ **๐Ÿ•น** ๐Ÿ”  ๐Ÿ› ๏ธ, `27365` ๐Ÿ‘ช ๐Ÿ› ๏ธ (๐Ÿ‘‰ **๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ**) & 1๏ธโƒฃ ๐Ÿ”  ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ: `27368`, `27369`, `27370`, & `27367`. - -## ๐Ÿ› ๏ธ ๐Ÿ”ง - -๐Ÿ“ฅ ๐Ÿ‘† ๐Ÿ‘€ โ” โš™๏ธ **๐Ÿ** (โš–๏ธ Uvicorn) ๐Ÿ› ๏ธ **Uvicorn ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ› ๏ธ** **๐Ÿ”** ๐Ÿ› ๏ธ ๐Ÿˆธ, โœŠ ๐Ÿ“ˆ **๐Ÿ’— ๐Ÿš** ๐Ÿ’ฝ, & ๐Ÿ’ช ๐Ÿฆ **๐ŸŒ… ๐Ÿ“จ**. - -โšช๏ธโžก๏ธ ๐Ÿ“‡ ๐Ÿ› ๏ธ ๐Ÿ”ง โšช๏ธโžก๏ธ ๐Ÿ”›, โš™๏ธ ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ”œ โœด๏ธ โ„น โฎ๏ธ **๐Ÿงฌ** ๐Ÿ•, & ๐Ÿฅ ๐Ÿ– โฎ๏ธ **โ**, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช โœŠ ๐Ÿ’… ๐ŸŽ: - -* **๐Ÿ’‚โ€โ™‚ - ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”** -* **๐Ÿƒโ€โ™‚ ๐Ÿ”› ๐Ÿ•ด** -* ***โ*** -* ๐Ÿงฌ (๐Ÿ”ข ๐Ÿ› ๏ธ ๐Ÿƒ) -* **๐Ÿ’พ** -* **โฎ๏ธ ๐Ÿ” โญ โ–ถ๏ธ** - -## ๐Ÿ“ฆ & โ˜ - -โญ ๐Ÿ“ƒ ๐Ÿ”ƒ [FastAPI ๐Ÿ“ฆ - โ˜](docker.md){.internal-link target=_blank} ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ฌ ๐ŸŽ› ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿต ๐ŸŽ **๐Ÿ› ๏ธ ๐Ÿ”ง**. - -๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ‘† **๐Ÿ›‚ โ˜ ๐Ÿ–ผ** ๐Ÿ‘ˆ ๐Ÿ”Œ **๐Ÿ โฎ๏ธ Uvicorn ๐Ÿ‘จโ€๐Ÿญ** & ๐Ÿ”ข ๐Ÿ“ณ ๐Ÿ‘ˆ ๐Ÿ’ช โš  ๐Ÿ™… ๐Ÿ’ผ. - -๐Ÿ“ค ๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฆ ๐Ÿ‘† โ” **๐Ÿ— ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ–ผ โšช๏ธโžก๏ธ ๐Ÿ–Œ** ๐Ÿƒ ๐Ÿ‘ Uvicorn ๐Ÿ› ๏ธ (๐Ÿต ๐Ÿ). โšซ๏ธ ๐Ÿ™… ๐Ÿ› ๏ธ & ๐ŸŽฒ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’š ๐Ÿ•โ” โš™๏ธ ๐Ÿ“Ž ๐Ÿ“ฆ ๐Ÿงพ โš™๏ธ ๐Ÿ’– **Kubernetes**. - -## ๐ŸŒƒ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ **๐Ÿ** (โš–๏ธ Uvicorn) ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐Ÿ’ผ โฎ๏ธ Uvicorn ๐Ÿ‘จโ€๐Ÿญ โœŠ ๐Ÿ“ˆ **๐Ÿ‘-๐Ÿš ๐Ÿ’ฝ**, ๐Ÿƒ **๐Ÿ’— ๐Ÿ› ๏ธ ๐Ÿ”—**. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘‰ ๐Ÿงฐ & ๐Ÿ’ญ ๐Ÿšฅ ๐Ÿ‘† โš’ ๐Ÿ†™ **๐Ÿ‘† ๐Ÿ‘ ๐Ÿ› ๏ธ โš™๏ธ** โช โœŠ ๐Ÿ’… ๐ŸŽ ๐Ÿ› ๏ธ ๐Ÿ”ง ๐Ÿ‘†. - -โœ… ๐Ÿ‘… โญ ๐Ÿ“ƒ ๐Ÿ’ก ๐Ÿ”ƒ **FastAPI** โฎ๏ธ ๐Ÿ“ฆ (โœ… โ˜ & Kubernetes). ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘ˆ ๐Ÿงฐ โœ”๏ธ ๐Ÿ™… ๐ŸŒŒ โŽ ๐ŸŽ **๐Ÿ› ๏ธ ๐Ÿ”ง** ๐Ÿ‘. ๐Ÿ‘ถ diff --git a/docs/em/docs/deployment/versions.md b/docs/em/docs/deployment/versions.md deleted file mode 100644 index 6c9b8f9bb..000000000 --- a/docs/em/docs/deployment/versions.md +++ /dev/null @@ -1,93 +0,0 @@ -# ๐Ÿ”ƒ FastAPI โฌ - -**FastAPI** โช โž– โš™๏ธ ๐Ÿญ ๐Ÿ“š ๐Ÿˆธ & โš™๏ธ. & ๐Ÿ’ฏ ๐Ÿ’ฐ ๐Ÿšง 1๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ. โœ‹๏ธ ๐Ÿšฎ ๐Ÿ› ๏ธ ๐Ÿšš ๐Ÿ”œ. - -๐Ÿ†• โš’ ๐Ÿšฎ ๐Ÿ›Ž, ๐Ÿ› ๐Ÿ”ง ๐Ÿ›Ž, & ๐Ÿ“Ÿ ๐Ÿ” ๐Ÿ“‰. - -๐Ÿ‘ˆ โšซ๏ธโ” โฎ๏ธ โฌ `0.x.x`, ๐Ÿ‘‰ ๐ŸŽจ ๐Ÿ‘ˆ ๐Ÿ”  โฌ ๐Ÿ’ช โš  โœ”๏ธ ๐Ÿ’” ๐Ÿ”€. ๐Ÿ‘‰ โฉ โš› ๐Ÿ› ๏ธ ๐Ÿ›. - -๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿญ ๐Ÿˆธ โฎ๏ธ **FastAPI** โ–ถ๏ธ๏ธ ๐Ÿ”œ (& ๐Ÿ‘† โœ”๏ธ ๐ŸŽฒ ๐Ÿ”จ โšซ๏ธ ๐Ÿ•ฐ), ๐Ÿ‘† โœ”๏ธ โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘† โš™๏ธ โฌ ๐Ÿ‘ˆ ๐Ÿ‘ท โ˜‘ โฎ๏ธ ๐ŸŽ‚ ๐Ÿ‘† ๐Ÿ“Ÿ. - -## ๐Ÿ“Œ ๐Ÿ‘† `fastapi` โฌ - -๐Ÿฅ‡ ๐Ÿ‘œ ๐Ÿ‘† ๐Ÿ”œ "๐Ÿ“Œ" โฌ **FastAPI** ๐Ÿ‘† โš™๏ธ ๐ŸŽฏ ๐Ÿ“ฐ โฌ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ‘ท โ˜‘ ๐Ÿ‘† ๐Ÿˆธ. - -๐Ÿ–ผ, โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† โš™๏ธ โฌ `0.45.0` ๐Ÿ‘† ๐Ÿ“ฑ. - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ `requirements.txt` ๐Ÿ“ ๐Ÿ‘† ๐Ÿ’ช โœ” โฌ โฎ๏ธ: - -```txt -fastapi==0.45.0 -``` - -๐Ÿ‘ˆ ๐Ÿ”œ โ›“ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ”œ โš™๏ธ โšซ๏ธโ” โฌ `0.45.0`. - -โš–๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“Œ โšซ๏ธ โฎ๏ธ: - -```txt -fastapi>=0.45.0,<0.46.0 -``` - -๐Ÿ‘ˆ ๐Ÿ”œ โ›“ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ”œ โš™๏ธ โฌ `0.45.0` โš–๏ธ ๐Ÿ”›, โœ‹๏ธ ๐ŸŒ˜ ๐ŸŒ˜ `0.46.0`, ๐Ÿ–ผ, โฌ `0.45.2` ๐Ÿ”œ ๐Ÿšซ. - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿ™† ๐ŸŽ ๐Ÿงฐ ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿ‘ทโ€โ™‚, ๐Ÿ’– ๐ŸŽถ, Pipenv, โš–๏ธ ๐ŸŽ, ๐Ÿ‘ซ ๐ŸŒ โœ”๏ธ ๐ŸŒŒ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ”ฌ ๐ŸŽฏ โฌ ๐Ÿ‘† ๐Ÿ“ฆ. - -## ๐Ÿ’ช โฌ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’ช โฌ (โœ… โœ… โšซ๏ธโ” โฎ๏ธ ๐Ÿ“ฐ) [๐Ÿš€ ๐Ÿ—’](../release-notes.md){.internal-link target=_blank}. - -## ๐Ÿ”ƒ โฌ - -๐Ÿ“„ โš› ๐Ÿ› ๏ธ ๐Ÿ›, ๐Ÿ™† โฌ ๐Ÿ”› `1.0.0` ๐Ÿ’ช โš  ๐Ÿšฎ ๐Ÿ’” ๐Ÿ”€. - -FastAPI โฉ ๐Ÿ› ๐Ÿ‘ˆ ๐Ÿ™† "๐Ÿ›" โฌ ๐Ÿ”€ ๐Ÿ› ๐Ÿ”ง & ๐Ÿšซ-๐Ÿ’” ๐Ÿ”€. - -/// tip - -"๐Ÿ›" ๐Ÿ ๐Ÿ”ข, ๐Ÿ–ผ, `0.2.3`, ๐Ÿ› โฌ `3`. - -/// - -, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ“Œ โฌ ๐Ÿ’–: - -```txt -fastapi>=0.45.0,<0.46.0 -``` - -๐Ÿ’” ๐Ÿ”€ & ๐Ÿ†• โš’ ๐Ÿšฎ "๐Ÿ‡บ๐Ÿ‡ฒ" โฌ. - -/// tip - -"๐Ÿ‡บ๐Ÿ‡ฒ" ๐Ÿ”ข ๐Ÿ–•, ๐Ÿ–ผ, `0.2.3`, ๐Ÿ‡บ๐Ÿ‡ฒ โฌ `2`. - -/// - -## โ™ป FastAPI โฌ - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ’ฏ ๐Ÿ‘† ๐Ÿ“ฑ. - -โฎ๏ธ **FastAPI** โšซ๏ธ ๐Ÿ“ถ โฉ (๐Ÿ‘ ๐Ÿ’ƒ), โœ… ๐Ÿฉบ: [๐Ÿ”ฌ](../tutorial/testing.md){.internal-link target=_blank} - -โฎ๏ธ ๐Ÿ‘† โœ”๏ธ ๐Ÿ’ฏ, โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โ™ป **FastAPI** โฌ ๐ŸŒ– โฎ๏ธ 1๏ธโƒฃ, & โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿ‘† ๐Ÿ“Ÿ ๐Ÿ‘ท โ˜‘ ๐Ÿƒ ๐Ÿ‘† ๐Ÿ’ฏ. - -๐Ÿšฅ ๐ŸŒ ๐Ÿ‘ท, โš–๏ธ โฎ๏ธ ๐Ÿ‘† โš’ ๐Ÿ’ช ๐Ÿ”€, & ๐ŸŒ ๐Ÿ‘† ๐Ÿ’ฏ ๐Ÿšถโ€โ™€๏ธ, โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“Œ ๐Ÿ‘† `fastapi` ๐Ÿ‘ˆ ๐Ÿ†• โฎ๏ธ โฌ. - -## ๐Ÿ”ƒ ๐Ÿ’ƒ - -๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ ๐Ÿšซ ๐Ÿ“Œ โฌ `starlette`. - -๐ŸŽ โฌ **FastAPI** ๐Ÿ”œ โš™๏ธ ๐ŸŽฏ ๐Ÿ†• โฌ ๐Ÿ’ƒ. - -, ๐Ÿ‘† ๐Ÿ’ช โžก๏ธ **FastAPI** โš™๏ธ โ˜‘ ๐Ÿ’ƒ โฌ. - -## ๐Ÿ”ƒ Pydantic - -Pydantic ๐Ÿ”Œ ๐Ÿ’ฏ **FastAPI** โฎ๏ธ ๐Ÿšฎ ๐Ÿ‘ ๐Ÿ’ฏ, ๐Ÿ†• โฌ Pydantic (๐Ÿ”› `1.0.0`) ๐Ÿ•ง ๐Ÿ”— โฎ๏ธ FastAPI. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“Œ Pydantic ๐Ÿ™† โฌ ๐Ÿ”› `1.0.0` ๐Ÿ‘ˆ ๐Ÿ‘ท ๐Ÿ‘† & ๐Ÿ”› `2.0.0`. - -๐Ÿ–ผ: - -```txt -pydantic>=1.2.0,<2.0.0 -``` diff --git a/docs/em/docs/features.md b/docs/em/docs/features.md deleted file mode 100644 index ccbed0cae..000000000 --- a/docs/em/docs/features.md +++ /dev/null @@ -1,201 +0,0 @@ -# โš’ - -## FastAPI โš’ - -**FastAPI** ๐Ÿค ๐Ÿ‘† ๐Ÿ“„: - -### โš“๏ธ ๐Ÿ”› ๐Ÿ“‚ ๐Ÿฉ - -* ๐Ÿ—„ ๐Ÿ› ๏ธ ๐Ÿ—, โœ… ๐Ÿ“„ โžก ๐Ÿ› ๏ธ, ๐Ÿ”ข, ๐Ÿ’ช ๐Ÿ“จ, ๐Ÿ’‚โ€โ™‚, โ™’๏ธ. -* ๐Ÿง ๐Ÿ“Š ๐Ÿท ๐Ÿงพ โฎ๏ธ ๐ŸŽป ๐Ÿ”— (๐Ÿ—„ โšซ๏ธ ๐Ÿงข ๐Ÿ”› ๐ŸŽป ๐Ÿ”—). -* ๐Ÿ”ง ๐Ÿคญ ๐Ÿ‘ซ ๐Ÿฉ, โฎ๏ธ ๐Ÿ˜” ๐Ÿ”ฌ. โ†ฉ๏ธ ๐Ÿ‘Ž ๐Ÿงฝ ๐Ÿ”› ๐Ÿ”. -* ๐Ÿ‘‰ โœ” โš™๏ธ ๐Ÿง **๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ โšก** ๐Ÿ“š ๐Ÿ‡ช๐Ÿ‡ธ. - -### ๐Ÿง ๐Ÿฉบ - -๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿงพ & ๐Ÿ”ฌ ๐Ÿ•ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข. ๐Ÿ› ๏ธ โš“๏ธ ๐Ÿ”› ๐Ÿ—„, ๐Ÿ“ค ๐Ÿ’— ๐ŸŽ›, 2๏ธโƒฃ ๐Ÿ”Œ ๐Ÿ”ข. - -* ๐Ÿฆ ๐ŸŽš, โฎ๏ธ ๐ŸŽ“ ๐Ÿ”ฌ, ๐Ÿค™ & ๐Ÿ’ฏ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ–ฅ. - -![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) - -* ๐ŸŽ› ๐Ÿ› ๏ธ ๐Ÿงพ โฎ๏ธ ๐Ÿ“„. - -![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) - -### ๐Ÿ› ๐Ÿ - -โšซ๏ธ ๐ŸŒ โš“๏ธ ๐Ÿ”› ๐Ÿฉ **๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ ๐Ÿ†Ž** ๐Ÿ“„ (๐Ÿ‘ Pydantic). ๐Ÿ™…โ€โ™‚ ๐Ÿ†• โ• ๐Ÿ’ก. ๐Ÿฉ ๐Ÿ› ๐Ÿ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช 2๏ธโƒฃ โฒ โ†—๏ธ โ” โš™๏ธ ๐Ÿ ๐Ÿ†Ž (๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ โš™๏ธ FastAPI), โœ… ๐Ÿ“ ๐Ÿ”ฐ: [๐Ÿ ๐Ÿ†Ž](python-types.md){.internal-link target=_blank}. - -๐Ÿ‘† โœ ๐Ÿฉ ๐Ÿ โฎ๏ธ ๐Ÿ†Ž: - -```Python -from datetime import date - -from pydantic import BaseModel - -# Declare a variable as a str -# and get editor support inside the function -def main(user_id: str): - return user_id - - -# A Pydantic model -class User(BaseModel): - id: int - name: str - joined: date -``` - -๐Ÿ‘ˆ ๐Ÿ’ช โคด๏ธ โš™๏ธ ๐Ÿ’–: - -```Python -my_user: User = User(id=3, name="John Doe", joined="2018-07-19") - -second_user_data = { - "id": 4, - "name": "Mary", - "joined": "2018-11-30", -} - -my_second_user: User = User(**second_user_data) -``` - -/// info - -`**second_user_data` โ›“: - -๐Ÿšถโ€โ™€๏ธ ๐Ÿ”‘ & ๐Ÿ’ฒ `second_user_data` #๏ธโƒฃ ๐Ÿ”— ๐Ÿ”‘-๐Ÿ’ฒ โŒ, ๐ŸŒ“: `User(id=4, name="Mary", joined="2018-11-30")` - -/// - -### ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ - -๐ŸŒ ๐Ÿ› ๏ธ ๐Ÿ— โฉ & ๐Ÿ‹๏ธ โš™๏ธ, ๐ŸŒ ๐Ÿšซ ๐Ÿ’ฏ ๐Ÿ”› ๐Ÿ’— ๐Ÿ‘จโ€๐ŸŽจ โญ โ–ถ๏ธ ๐Ÿ› ๏ธ, ๐Ÿšš ๐Ÿ† ๐Ÿ› ๏ธ ๐Ÿ’ก. - -๐Ÿ ๐Ÿ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ฌ โšซ๏ธ ๐Ÿ†‘ ๐Ÿ‘ˆ ๐ŸŒ… โš™๏ธ โš’ "โœ". - -๐ŸŽ‚ **FastAPI** ๐Ÿ› ๏ธ โš“๏ธ ๐Ÿ˜Œ ๐Ÿ‘ˆ. โœ ๐Ÿ‘ท ๐ŸŒ. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ›Ž ๐Ÿ’ช ๐Ÿ‘Ÿ ๐Ÿ”™ ๐Ÿฉบ. - -๐Ÿ“ฅ โ” ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ’ช โ„น ๐Ÿ‘†: - -* ๐ŸŽ™ ๐ŸŽ™ ๐Ÿ“Ÿ: - -![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) - -* ๐Ÿ—’: - -![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png) - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš ๐Ÿ› ๏ธ ๐Ÿ“Ÿ ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿค” ๐Ÿ’ช โญ. ๐Ÿ–ผ, `price` ๐Ÿ”‘ ๐Ÿ”˜ ๐ŸŽป ๐Ÿ’ช (๐Ÿ‘ˆ ๐Ÿ’ช โœ”๏ธ ๐Ÿฆ) ๐Ÿ‘ˆ ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ ๐Ÿ“จ. - -๐Ÿ™…โ€โ™‚ ๐ŸŒ– โŒจ โŒ ๐Ÿ”‘ ๐Ÿ“›, ๐Ÿ‘Ÿ ๐Ÿ”™ & โžก ๐Ÿ–– ๐Ÿฉบ, โš–๏ธ ๐Ÿ“œ ๐Ÿ†™ & ๐Ÿ”ฝ ๐Ÿ”Ž ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ˜’ โš™๏ธ `username` โš–๏ธ `user_name`. - -### ๐Ÿ“ - -โšซ๏ธ โœ”๏ธ ๐Ÿค” **๐Ÿ”ข** ๐ŸŒ, โฎ๏ธ ๐Ÿ“ฆ ๐Ÿ“ณ ๐ŸŒ. ๐ŸŒ ๐Ÿ”ข ๐Ÿ’ช ๐Ÿ‘Œ-๐ŸŽง โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ’ช & ๐Ÿ”ฌ ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿ’ช. - -โœ‹๏ธ ๐Ÿ”ข, โšซ๏ธ ๐ŸŒ **"๐Ÿ‘ท"**. - -### ๐Ÿ”ฌ - -* ๐Ÿ”ฌ ๐ŸŒ… (โš–๏ธ ๐ŸŒ โ“) ๐Ÿ **๐Ÿ’ฝ ๐Ÿ†Ž**, ๐Ÿ”Œ: - * ๐ŸŽป ๐ŸŽš (`dict`). - * ๐ŸŽป ๐ŸŽป (`list`) โš– ๐Ÿฌ ๐Ÿ†Ž. - * ๐ŸŽป (`str`) ๐Ÿ‘, ๐Ÿ”ฌ ๐Ÿ•™ & ๐Ÿ‘Ÿ ๐Ÿ“. - * ๐Ÿ”ข (`int`, `float`) โฎ๏ธ ๐Ÿ•™ & ๐Ÿ‘Ÿ ๐Ÿ’ฒ, โ™’๏ธ. - -* ๐Ÿ”ฌ ๐ŸŒ… ๐Ÿ˜ ๐Ÿ†Ž, ๐Ÿ’–: - * ๐Ÿ“›. - * ๐Ÿ“ง. - * ๐Ÿ†”. - * ...& ๐ŸŽ. - -๐ŸŒ ๐Ÿ”ฌ ๐Ÿต ๐Ÿ‘-๐Ÿ› & ๐Ÿ‹๏ธ **Pydantic**. - -### ๐Ÿ’‚โ€โ™‚ & ๐Ÿค - -๐Ÿ’‚โ€โ™‚ & ๐Ÿค ๐Ÿ› ๏ธ. ๐Ÿต ๐Ÿ™† โš  โฎ๏ธ ๐Ÿ’ฝ โš–๏ธ ๐Ÿ“Š ๐Ÿท. - -๐ŸŒ ๐Ÿ’‚โ€โ™‚ โš– ๐Ÿ”ฌ ๐Ÿ—„, ๐Ÿ”Œ: - -* ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ”ฐ. -* **Oauth2๏ธโƒฃ** (โฎ๏ธ **๐Ÿฅ™ ๐Ÿค**). โœ… ๐Ÿ”ฐ ๐Ÿ”› [Oauth2๏ธโƒฃ โฎ๏ธ ๐Ÿฅ™](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}. -* ๐Ÿ› ๏ธ ๐Ÿ”‘: - * ๐ŸŽš. - * ๐Ÿ”ข ๐Ÿ”ข. - * ๐Ÿช, โ™’๏ธ. - -โž• ๐ŸŒ ๐Ÿ’‚โ€โ™‚ โš’ โšช๏ธโžก๏ธ ๐Ÿ’ƒ (๐Ÿ”Œ **๐ŸŽ‰ ๐Ÿช**). - -๐ŸŒ ๐Ÿ— โ™ป ๐Ÿงฐ & ๐Ÿฆฒ ๐Ÿ‘ˆ โฉ ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ‘† โš™๏ธ, ๐Ÿ“Š ๐Ÿช, ๐Ÿ”— & โ˜ ๐Ÿ’ฝ, โ™’๏ธ. - -### ๐Ÿ”— ๐Ÿ’‰ - -FastAPI ๐Ÿ”Œ ๐Ÿ“ถ โฉ โš™๏ธ, โœ‹๏ธ ๐Ÿ“ถ ๐Ÿ‹๏ธ ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ. - -* ๐Ÿ”— ๐Ÿ’ช โœ”๏ธ ๐Ÿ”—, ๐Ÿ— ๐Ÿ”— โš–๏ธ **"๐Ÿ“Š" ๐Ÿ”—**. -* ๐ŸŒ **๐Ÿ” ๐Ÿต** ๐Ÿ› ๏ธ. -* ๐ŸŒ ๐Ÿ”— ๐Ÿ’ช ๐Ÿšš ๐Ÿ’ฝ โšช๏ธโžก๏ธ ๐Ÿ“จ & **โ†” โžก ๐Ÿ› ๏ธ** โš› & ๐Ÿง ๐Ÿงพ. -* **๐Ÿง ๐Ÿ”ฌ** *โžก ๐Ÿ› ๏ธ* ๐Ÿ”ข ๐Ÿ”ฌ ๐Ÿ”—. -* ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿค โš™๏ธ, **๐Ÿ’ฝ ๐Ÿ”—**, โ™’๏ธ. -* **๐Ÿ™…โ€โ™‚ โš ** โฎ๏ธ ๐Ÿ’ฝ, ๐Ÿ•ธ, โ™’๏ธ. โœ‹๏ธ โฉ ๐Ÿ› ๏ธ โฎ๏ธ ๐ŸŒ ๐Ÿ‘ซ. - -### โ™พ "๐Ÿ”Œ-๐Ÿ”Œ" - -โš–๏ธ ๐ŸŽ ๐ŸŒŒ, ๐Ÿ™…โ€โ™‚ ๐Ÿ’ช ๐Ÿ‘ซ, ๐Ÿ—„ & โš™๏ธ ๐Ÿ“Ÿ ๐Ÿ‘† ๐Ÿ’ช. - -๐Ÿ™† ๐Ÿ› ๏ธ ๐Ÿ— ๐Ÿ™… โš™๏ธ (โฎ๏ธ ๐Ÿ”—) ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โœ "๐Ÿ”Œ-" ๐Ÿ‘† ๐Ÿˆธ 2๏ธโƒฃ โธ ๐Ÿ“Ÿ โš™๏ธ ๐ŸŽ ๐Ÿ“Š & โ• โš™๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. - -### ๐Ÿ’ฏ - -* 1๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ’ฏ ๐Ÿ’ฐ. -* 1๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ†Ž โœ ๐Ÿ“Ÿ ๐Ÿงข. -* โš™๏ธ ๐Ÿญ ๐Ÿˆธ. - -## ๐Ÿ’ƒ โš’ - -**FastAPI** ๐Ÿ• ๐Ÿ”— โฎ๏ธ (& โš“๏ธ ๐Ÿ”›) ๐Ÿ’ƒ. , ๐Ÿ™† ๐ŸŒ– ๐Ÿ’ƒ ๐Ÿ“Ÿ ๐Ÿ‘† โœ”๏ธ, ๐Ÿ”œ ๐Ÿ‘ท. - -`FastAPI` ๐Ÿค™ ๐ŸŽง-๐ŸŽ“ `Starlette`. , ๐Ÿšฅ ๐Ÿ‘† โช ๐Ÿ’ญ โš–๏ธ โš™๏ธ ๐Ÿ’ƒ, ๐ŸŒ… ๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿ‘ท ๐ŸŽ ๐ŸŒŒ. - -โฎ๏ธ **FastAPI** ๐Ÿ‘† ๐Ÿคš ๐ŸŒ **๐Ÿ’ƒ**'โ“‚ โš’ (FastAPI ๐Ÿ’ƒ ๐Ÿ”› ๐Ÿ’Š): - -* ๐Ÿค™ ๐ŸŽ† ๐ŸŽญ. โšซ๏ธ 1๏ธโƒฃ โฉ ๐Ÿ ๐Ÿ› ๏ธ ๐Ÿ’ช, ๐Ÿ”› ๐Ÿ‡ท๐Ÿ‡ช โฎ๏ธ **โœณ** & **๐Ÿšถ**. -* ** *๏ธโƒฃ ** ๐Ÿ•โ€๐Ÿฆบ. -* -๐Ÿ› ๏ธ ๐Ÿ–ฅ ๐Ÿ“‹. -* ๐Ÿ•ด & ๐Ÿคซ ๐ŸŽ‰. -* ๐Ÿ’ฏ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ— ๐Ÿ”› ๐Ÿ‡ธ๐Ÿ‡ฒ. -* **โšœ**, ๐Ÿ—œ, ๐ŸŽป ๐Ÿ“, ๐ŸŽ ๐Ÿ“จ. -* **๐ŸŽ‰ & ๐Ÿช** ๐Ÿ•โ€๐Ÿฆบ. -* 1๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ’ฏ ๐Ÿ’ฐ. -* 1๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ†Ž โœ โœ. - -## Pydantic โš’ - -**FastAPI** ๐Ÿ• ๐Ÿ”— โฎ๏ธ (& โš“๏ธ ๐Ÿ”›) Pydantic. , ๐Ÿ™† ๐ŸŒ– Pydantic ๐Ÿ“Ÿ ๐Ÿ‘† โœ”๏ธ, ๐Ÿ”œ ๐Ÿ‘ท. - -โœ… ๐Ÿ”ข ๐Ÿ—ƒ โš“๏ธ ๐Ÿ”› Pydantic, ๐Ÿœโ“‚, ๐Ÿญโ“‚ ๐Ÿ’ฝ. - -๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ ๐Ÿ“š ๐Ÿ’ผ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐ŸŽ ๐ŸŽš ๐Ÿ‘† ๐Ÿคš โšช๏ธโžก๏ธ ๐Ÿ“จ **๐Ÿ”— ๐Ÿ’ฝ**, ๐ŸŒ โœ” ๐Ÿ”. - -๐ŸŽ โœ” ๐ŸŽ ๐ŸŒŒ ๐Ÿคญ, ๐Ÿ“š ๐Ÿ’ผ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐ŸŽš ๐Ÿ‘† ๐Ÿคš โšช๏ธโžก๏ธ ๐Ÿ’ฝ **๐Ÿ”— ๐Ÿ‘ฉโ€๐Ÿ’ป**. - -โฎ๏ธ **FastAPI** ๐Ÿ‘† ๐Ÿคš ๐ŸŒ **Pydantic**'โ“‚ โš’ (FastAPI โš“๏ธ ๐Ÿ”› Pydantic ๐ŸŒ ๐Ÿ’ฝ ๐Ÿšš): - -* **๐Ÿ™…โ€โ™‚ ๐Ÿ” **: - * ๐Ÿ™…โ€โ™‚ ๐Ÿ†• ๐Ÿ”— ๐Ÿ”‘ โ—พ-๐Ÿ‡ช๐Ÿ‡ธ ๐Ÿ’ก. - * ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ ๐Ÿ†Ž ๐Ÿ‘† ๐Ÿ’ญ โ” โš™๏ธ Pydantic. -* ๐Ÿคพ ๐ŸŽ† โฎ๏ธ ๐Ÿ‘† **๐Ÿ’พ/๐Ÿงถ/๐Ÿง **: - * โ†ฉ๏ธ Pydantic ๐Ÿ“Š ๐Ÿ“Š ๐Ÿ‘ ๐ŸŽ“ ๐Ÿ‘† ๐Ÿ”ฌ; ๐Ÿš˜-๐Ÿ› ๏ธ, ๐Ÿงฝ, โœ & ๐Ÿ‘† ๐Ÿค” ๐Ÿ”œ ๐ŸŒ ๐Ÿ‘ท โ˜‘ โฎ๏ธ ๐Ÿ‘† โœ” ๐Ÿ’ฝ. -* โœ” **๐Ÿ— ๐Ÿ“Š**: - * โš™๏ธ ๐Ÿ”— Pydantic ๐Ÿท, ๐Ÿ `typing`'โ“‚ `List` & `Dict`, โ™’๏ธ. - * & ๐Ÿ’ณ โœ” ๐Ÿ— ๐Ÿ’ฝ ๐Ÿ”— ๐ŸŽฏ & ๐Ÿ’ช ๐Ÿ”ฌ, โœ… & ๐Ÿ“„ ๐ŸŽป ๐Ÿ”—. - * ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ™‡ **๐Ÿฆ ๐ŸŽป** ๐ŸŽš & โœ”๏ธ ๐Ÿ‘ซ ๐ŸŒ โœ” & โœ. -* **๐Ÿง**: - * Pydantic โœ” ๐Ÿ›ƒ ๐Ÿ“Š ๐Ÿ†Ž ๐Ÿ”ฌ โš–๏ธ ๐Ÿ‘† ๐Ÿ’ช โ†” ๐Ÿ”ฌ โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ”› ๐Ÿท ๐ŸŽ€ โฎ๏ธ ๐Ÿ’ณ ๐Ÿ‘จโ€๐ŸŽจ. -* 1๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ’ฏ ๐Ÿ’ฐ. diff --git a/docs/em/docs/help-fastapi.md b/docs/em/docs/help-fastapi.md deleted file mode 100644 index 9d802f9e4..000000000 --- a/docs/em/docs/help-fastapi.md +++ /dev/null @@ -1,269 +0,0 @@ -# โ„น FastAPI - ๐Ÿคš โ„น - -๐Ÿ‘† ๐Ÿ’– **FastAPI**โ“ - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’– โ„น FastAPI, ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ’ป, & ๐Ÿ“• โ“ - -โš–๏ธ ๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’– ๐Ÿคš โ„น โฎ๏ธ **FastAPI**โ“ - -๐Ÿ“ค ๐Ÿ“ถ ๐Ÿ™… ๐ŸŒŒ โ„น (๐Ÿ“š ๐Ÿ”Œ 1๏ธโƒฃ โš–๏ธ 2๏ธโƒฃ ๐Ÿ–Š). - -& ๐Ÿ“ค ๐Ÿ“š ๐ŸŒŒ ๐Ÿคš โ„น ๐Ÿ’โ€โ™‚๏ธ. - -## ๐Ÿ‘ฑ๐Ÿ“” ๐Ÿ“ฐ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘ฑ๐Ÿ“” (๐ŸŒ) [**FastAPI & ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ** ๐Ÿ“ฐ](newsletter.md){.internal-link target=_blank} ๐Ÿšง โ„น ๐Ÿ”ƒ: - -* ๐Ÿ“ฐ ๐Ÿ”ƒ FastAPI & ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ๐Ÿ‘ถ -* ๐Ÿฆฎ ๐Ÿ‘ถ -* โš’ ๐Ÿ‘ถ -* ๐Ÿ’” ๐Ÿ”€ ๐Ÿ‘ถ -* ๐Ÿ’โ€โ™‚ & ๐ŸŽฑ ๐Ÿ‘ถ - -## โฉ FastAPI ๐Ÿ”› ๐Ÿ‘ฑ๐Ÿ“” - -โฉ ๐Ÿถ Fastapi ๐Ÿ”› **๐Ÿ‘ฑ๐Ÿ“”** ๐Ÿคš ๐Ÿ“ฐ ๐Ÿ“ฐ ๐Ÿ”ƒ **FastAPI**. ๐Ÿ‘ถ - -## โœด **FastAPI** ๐Ÿ“‚ - -๐Ÿ‘† ๐Ÿ’ช "โœด" FastAPI ๐Ÿ“‚ (๐Ÿ–Š โœด ๐Ÿ”ผ ๐Ÿ” โ–ถ๏ธ๏ธ): https://github.com/fastapi/fastapi. ๐Ÿ‘ถ ๐Ÿ‘ถ - -โŽ โœด, ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ”Ž โšซ๏ธ ๐ŸŒ… ๐Ÿ’ช & ๐Ÿ‘€ ๐Ÿ‘ˆ โšซ๏ธ โœ”๏ธ โช โš  ๐ŸŽ. - -## โŒš ๐Ÿ“‚ ๐Ÿ—ƒ ๐Ÿš€ - -๐Ÿ‘† ๐Ÿ’ช "โŒš" FastAPI ๐Ÿ“‚ (๐Ÿ–Š "โŒš" ๐Ÿ”ผ ๐Ÿ” โ–ถ๏ธ๏ธ): https://github.com/fastapi/fastapi. ๐Ÿ‘ถ - -๐Ÿ“ค ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ–Š "๐Ÿš€ ๐Ÿ•ด". - -๐Ÿ”จ โšซ๏ธ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“จ (๐Ÿ‘† ๐Ÿ“ง) ๐Ÿ•โ” ๐Ÿ“ค ๐Ÿ†• ๐Ÿš€ (๐Ÿ†• โฌ) **FastAPI** โฎ๏ธ ๐Ÿ› ๐Ÿ”ง & ๐Ÿ†• โš’. - -## ๐Ÿ”— โฎ๏ธ ๐Ÿ“• - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— โฎ๏ธ ๐Ÿ‘ค (๐Ÿ‡น๐Ÿ‡ฆ ๐Ÿ‡ฉ๐Ÿ‡ฌ / `tiangolo`), ๐Ÿ“•. - -๐Ÿ‘† ๐Ÿ’ช: - -* โฉ ๐Ÿ‘ค ๐Ÿ”› **๐Ÿ“‚**. - * ๐Ÿ‘€ ๐ŸŽ ๐Ÿ“‚ โ„น ๐Ÿ— ๐Ÿ‘ค โœ”๏ธ โœ ๐Ÿ‘ˆ ๐Ÿ’ช โ„น ๐Ÿ‘†. - * โฉ ๐Ÿ‘ค ๐Ÿ‘€ ๐Ÿ•โ” ๐Ÿ‘ค โœ ๐Ÿ†• ๐Ÿ“‚ โ„น ๐Ÿ—. -* โฉ ๐Ÿ‘ค ๐Ÿ”› **๐Ÿ‘ฑ๐Ÿ“”** โš–๏ธ โ˜ . - * ๐Ÿ’ฌ ๐Ÿ‘ค โ” ๐Ÿ‘† โš™๏ธ FastAPI (๐Ÿ‘ค ๐Ÿ’Œ ๐Ÿ‘‚ ๐Ÿ‘ˆ). - * ๐Ÿ‘‚ ๐Ÿ•โ” ๐Ÿ‘ค โš’ ๐ŸŽ‰ โš–๏ธ ๐Ÿš€ ๐Ÿ†• ๐Ÿงฐ. - * ๐Ÿ‘† ๐Ÿ’ช โฉ ๐Ÿถ Fastapi ๐Ÿ”› ๐Ÿ‘ฑ๐Ÿ“” (๐ŸŽ ๐Ÿง). -* ๐Ÿ”— โฎ๏ธ ๐Ÿ‘ค ๐Ÿ”› **๐Ÿ‘ฑ๐Ÿ“”**. - * ๐Ÿ‘‚ ๐Ÿ•โ” ๐Ÿ‘ค โš’ ๐ŸŽ‰ โš–๏ธ ๐Ÿš€ ๐Ÿ†• ๐Ÿงฐ (๐Ÿ‘ ๐Ÿ‘ค โš™๏ธ ๐Ÿ‘ฑ๐Ÿ“” ๐ŸŒ– ๐Ÿ›Ž ๐Ÿคท โ™‚). -* โœ โšซ๏ธโ” ๐Ÿ‘ค โœ (โš–๏ธ โฉ ๐Ÿ‘ค) ๐Ÿ”› **๐Ÿ‡ธ๐Ÿ‡ฒ.** โš–๏ธ **๐Ÿ”‰**. - * โœ ๐ŸŽ ๐Ÿ’ญ, ๐Ÿ“„, & โœ ๐Ÿ”ƒ ๐Ÿงฐ ๐Ÿ‘ค โœ”๏ธ โœ. - * โฉ ๐Ÿ‘ค โœ ๐Ÿ•โ” ๐Ÿ‘ค โœ ๐Ÿ•ณ ๐Ÿ†•. - -## ๐Ÿ‘ฑ๐Ÿ“” ๐Ÿ”ƒ **FastAPI** - -๐Ÿ‘ฑ๐Ÿ“” ๐Ÿ”ƒ **FastAPI** & โžก๏ธ ๐Ÿ‘ค & ๐ŸŽ ๐Ÿ’ญ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ’– โšซ๏ธ. ๐Ÿ‘ถ - -๐Ÿ‘ค ๐Ÿ’Œ ๐Ÿ‘‚ ๐Ÿ”ƒ โ” **FastAPI** ๐Ÿ’†โ€โ™‚ โš™๏ธ, โšซ๏ธโ” ๐Ÿ‘† โœ”๏ธ ๐Ÿ’– โšซ๏ธ, โ” ๐Ÿ—/๐Ÿข ๐Ÿ‘† โš™๏ธ โšซ๏ธ, โ™’๏ธ. - -## ๐Ÿ—ณ FastAPI - -* ๐Ÿ—ณ **FastAPI** ๐Ÿ“. -* ๐Ÿ—ณ **FastAPI** ๐Ÿ“ฑ. -* ๐Ÿ’ฌ ๐Ÿ‘† โš™๏ธ **FastAPI** ๐Ÿ”› โ„น. - -## โ„น ๐ŸŽ โฎ๏ธ โ” ๐Ÿ“‚ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”„ & โ„น ๐ŸŽ โฎ๏ธ ๐Ÿ‘ซ โ”: - -* ๐Ÿ“‚ ๐Ÿ’ฌ -* ๐Ÿ“‚ โ” - -๐Ÿ“š ๐Ÿ’ผ ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† โช ๐Ÿ’ญ โ” ๐Ÿ“š โ”. ๐Ÿ‘ถ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿค ๐Ÿ“š ๐Ÿ‘ซ๐Ÿ‘ซ โฎ๏ธ ๐Ÿ‘ซ โ”, ๐Ÿ‘† ๐Ÿ”œ โ–ถ๏ธ๏ธ ๐Ÿ›‚ [FastAPI ๐Ÿ•ด](fastapi-people.md#_2){.internal-link target=_blank}. ๐Ÿ‘ถ - -๐Ÿ’ญ, ๐Ÿ† โš  โ˜: ๐Ÿ”„ ๐Ÿ˜‡. ๐Ÿ‘ซ๐Ÿ‘ซ ๐Ÿ‘Ÿ โฎ๏ธ ๐Ÿ‘ซ ๐Ÿ˜ฉ & ๐Ÿ“š ๐Ÿ’ผ ๐Ÿšซ ๐Ÿ’ญ ๐Ÿ† ๐ŸŒŒ, โœ‹๏ธ ๐Ÿ”„ ๐Ÿ† ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ˜‡. ๐Ÿ‘ถ - -๐Ÿ’ญ **FastAPI** ๐Ÿ‘ช ๐Ÿ˜‡ & ๐Ÿ‘. ๐ŸŽ ๐Ÿ•ฐ, ๐Ÿšซ ๐Ÿšซ ๐ŸŽญ โš–๏ธ ๐Ÿ˜› ๐ŸŽญ โคต ๐ŸŽ. ๐Ÿ‘ฅ โœ”๏ธ โœŠ ๐Ÿ’… ๐Ÿ”  ๐ŸŽ. - ---- - -๐Ÿ“ฅ โ” โ„น ๐ŸŽ โฎ๏ธ โ” (๐Ÿ’ฌ โš–๏ธ โ”): - -### ๐Ÿค” โ” - -* โœ… ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค” โšซ๏ธโ” **๐ŸŽฏ** & โš™๏ธ ๐Ÿ’ผ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ’ฌ. - -* โคด๏ธ โœ… ๐Ÿšฅ โ” (โญ• ๐Ÿ‘ช โ”) **๐Ÿ†‘**. - -* ๐Ÿ“š ๐Ÿ’ผ โ” ๐Ÿ’ญ ๐Ÿ”ƒ ๐Ÿ‘ฝ โš— โšช๏ธโžก๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป, โœ‹๏ธ ๐Ÿ“ค ๐Ÿ’ช **๐Ÿ‘** 1๏ธโƒฃ. ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค” โš  & โš™๏ธ ๐Ÿ’ผ ๐Ÿ‘, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช ๐Ÿค” ๐Ÿ‘ **๐ŸŽ› โš—**. - -* ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšซ ๐Ÿค” โ”, ๐Ÿ’ญ ๐ŸŒ– **โ„น**. - -### ๐Ÿ”ฌ โš  - -๐ŸŒ… ๐Ÿ’ผ & ๐Ÿ† โ” ๐Ÿ“ค ๐Ÿ•ณ ๐Ÿ”— ๐Ÿ‘จโ€๐Ÿ’ผ **โฎ๏ธ ๐Ÿ“Ÿ**. - -๐Ÿ“š ๐Ÿ’ผ ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ•ด ๐Ÿ“ ๐Ÿงฌ ๐Ÿ“Ÿ, โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿฅƒ **๐Ÿ”ฌ โš **. - -* ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ญ ๐Ÿ‘ซ ๐Ÿšš โญ, ๐Ÿ”ฌ, ๐Ÿ–ผ, ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช **๐Ÿ“-๐Ÿ“‹** & ๐Ÿƒ ๐ŸŒ ๐Ÿ‘€ ๐ŸŽ โŒ โš–๏ธ ๐ŸŽญ ๐Ÿ‘ซ ๐Ÿ‘€, โš–๏ธ ๐Ÿค” ๐Ÿ‘ซ โš™๏ธ ๐Ÿ’ผ ๐Ÿ‘. - -* ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ˜Ÿ ๐Ÿ’โ€โ™‚๏ธ ๐Ÿ‘, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”„ **โœ ๐Ÿ–ผ** ๐Ÿ’– ๐Ÿ‘ˆ ๐Ÿ‘†, ๐Ÿงข ๐Ÿ”› ๐Ÿ“› โš . โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ’ช โœŠ ๐Ÿ“š ๐Ÿ•ฐ & โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘ป ๐Ÿ’ญ ๐Ÿ‘ซ โœ โš  ๐Ÿฅ‡. - -### ๐Ÿค” โš— - -* โฎ๏ธ ๐Ÿ’†โ€โ™‚ ๐Ÿ’ช ๐Ÿค” โ”, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค ๐Ÿ‘ซ ๐Ÿ’ช **โ”**. - -* ๐Ÿ“š ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ‘ ๐Ÿค” ๐Ÿ‘ซ **๐Ÿ“ˆ โš  โš–๏ธ โš™๏ธ ๐Ÿ’ผ**, โ†ฉ๏ธ ๐Ÿ“ค 5๏ธโƒฃ๐Ÿ“† ๐Ÿ‘ ๐ŸŒŒ โŽ โšซ๏ธ ๐ŸŒ˜ โšซ๏ธโ” ๐Ÿ‘ซ ๐Ÿ”„. - -### ๐Ÿ’ญ ๐Ÿ” - -๐Ÿšฅ ๐Ÿ‘ซ ๐Ÿ“จ, ๐Ÿ“ค โ†• ๐Ÿคž ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ โŽ ๐Ÿ‘ซ โš , ใŠ—, **๐Ÿ‘† ๐Ÿ’‚**โ— ๐Ÿฆธ - -* ๐Ÿ”œ, ๐Ÿšฅ ๐Ÿ‘ˆ โŽ ๐Ÿ‘ซ โš , ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ญ ๐Ÿ‘ซ: - - * ๐Ÿ“‚ ๐Ÿ’ฌ: โ„ข ๐Ÿค **โ”**. - * ๐Ÿ“‚ โ”: **๐Ÿ”** โ”**. - -## โŒš ๐Ÿ“‚ ๐Ÿ—ƒ - -๐Ÿ‘† ๐Ÿ’ช "โŒš" FastAPI ๐Ÿ“‚ (๐Ÿ–Š "โŒš" ๐Ÿ”ผ ๐Ÿ” โ–ถ๏ธ๏ธ): https://github.com/fastapi/fastapi. ๐Ÿ‘ถ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ–Š "๐Ÿ‘€" โ†ฉ๏ธ "๐Ÿš€ ๐Ÿ•ด" ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ•โ” ๐Ÿ‘ฑ โœ ๐Ÿ†• โ” โš–๏ธ โ”. ๐Ÿ‘† ๐Ÿ’ช โœ” ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ•ด ๐Ÿ’š ๐Ÿšจ ๐Ÿ”ƒ ๐Ÿ†• โ”, โš–๏ธ ๐Ÿ’ฌ, โš–๏ธ ๐ŸŽธ, โ™’๏ธ. - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”„ & โ„น ๐Ÿ‘ซ โŽ ๐Ÿ‘ˆ โ”. - -## ๐Ÿ’ญ โ” - -๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿ†• โ” ๐Ÿ“‚ ๐Ÿ—ƒ, ๐Ÿ–ผ: - -* ๐Ÿ’ญ **โ”** โš–๏ธ ๐Ÿ’ญ ๐Ÿ”ƒ **โš **. -* ๐Ÿค” ๐Ÿ†• **โš’**. - -**๐Ÿ—’**: ๐Ÿšฅ ๐Ÿ‘† โšซ๏ธ, โคด๏ธ ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘† โ„น ๐ŸŽ. ๐Ÿ‘ถ - -## ๐Ÿ“„ ๐Ÿšฒ ๐Ÿ“จ - -๐Ÿ‘† ๐Ÿ’ช โ„น ๐Ÿ‘ค ๐Ÿ“„ ๐Ÿšฒ ๐Ÿ“จ โšช๏ธโžก๏ธ ๐ŸŽ. - -๐Ÿ”„, ๐Ÿ™ ๐Ÿ”„ ๐Ÿ‘† ๐Ÿ† ๐Ÿ˜‡. ๐Ÿ‘ถ - ---- - -๐Ÿ“ฅ โšซ๏ธโ” โœ”๏ธ ๐Ÿคฏ & โ” ๐Ÿ“„ ๐Ÿšฒ ๐Ÿ“จ: - -### ๐Ÿค” โš  - -* ๐Ÿฅ‡, โš’ ๐Ÿ’ญ ๐Ÿ‘† **๐Ÿค” โš ** ๐Ÿ‘ˆ ๐Ÿšฒ ๐Ÿ“จ ๐Ÿ”„ โŽ. โšซ๏ธ ๐Ÿ’ช โœ”๏ธ ๐Ÿ“ ๐Ÿ’ฌ ๐Ÿ“‚ ๐Ÿ’ฌ โš–๏ธ โ”. - -* ๐Ÿ“ค ๐Ÿ‘ ๐Ÿคž ๐Ÿ‘ˆ ๐Ÿšฒ ๐Ÿ“จ ๐Ÿšซ ๐Ÿค™ ๐Ÿ’ช โ†ฉ๏ธ โš  ๐Ÿ’ช โŽ **๐ŸŽ ๐ŸŒŒ**. โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค” โš–๏ธ ๐Ÿ’ญ ๐Ÿ”ƒ ๐Ÿ‘ˆ. - -### ๐Ÿšซ ๐Ÿ˜Ÿ ๐Ÿ”ƒ ๐Ÿ‘— - -* ๐Ÿšซ ๐Ÿ˜Ÿ ๐Ÿ’โ€โ™‚๏ธ ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ‘œ ๐Ÿ’– ๐Ÿ’• ๐Ÿ“ง ๐Ÿ‘—, ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿฅฌ & ๐Ÿ”— ๐Ÿ›ƒ ๐Ÿ’• โŽ. - -* ๐Ÿšซ ๐Ÿ˜Ÿ ๐Ÿ”ƒ ๐Ÿ‘— ๐Ÿšซ, ๐Ÿ“ค โช ๐Ÿง ๐Ÿงฐ โœ… ๐Ÿ‘ˆ. - -& ๐Ÿšฅ ๐Ÿ“ค ๐Ÿ™† ๐ŸŽ ๐Ÿ‘— โš–๏ธ โš– ๐Ÿ’ช, ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ”— ๐Ÿ‘ˆ, โš–๏ธ ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ’• ๐Ÿ”› ๐Ÿ” โฎ๏ธ ๐Ÿ’ช ๐Ÿ”€. - -### โœ… ๐Ÿ“Ÿ - -* โœ… & โœ ๐Ÿ“Ÿ, ๐Ÿ‘€ ๐Ÿšฅ โšซ๏ธ โš’ ๐Ÿ”‘, **๐Ÿƒ โšซ๏ธ ๐ŸŒ** & ๐Ÿ‘€ ๐Ÿšฅ โšซ๏ธ ๐Ÿค™ โŽ โš . - -* โคด๏ธ **๐Ÿค** ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ‘ˆ, ๐Ÿ‘ˆ โ” ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿค™ โœ… โšซ๏ธ. - -/// info - -๐Ÿ‘, ๐Ÿ‘ค ๐Ÿ’ช ๐Ÿšซ ๐ŸŽฏ ๐Ÿ’™ ๐ŸŽธ ๐Ÿ‘ˆ โœ”๏ธ ๐Ÿ“š โœ”. - -๐Ÿ“š ๐Ÿ•ฐ โšซ๏ธ โœ”๏ธ ๐Ÿ”จ ๐Ÿ‘ˆ ๐Ÿ“ค ๐ŸŽธ โฎ๏ธ 3๏ธโƒฃ, 5๏ธโƒฃ โš–๏ธ ๐ŸŒ… โœ”, ๐ŸŽฒ โ†ฉ๏ธ ๐Ÿ“› ๐Ÿ˜Œ, โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ‘ค โœ… ๐ŸŽธ, ๐Ÿ‘ซ ๐Ÿค™ ๐Ÿ’”, โœ”๏ธ ๐Ÿ›, โš–๏ธ ๐Ÿšซ โŽ โš  ๐Ÿ‘ซ ๐Ÿ›„ โŽ. ๐Ÿ‘ถ - -, โšซ๏ธ ๐Ÿค™ โš  ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿค™ โœ & ๐Ÿƒ ๐Ÿ“Ÿ, & โžก๏ธ ๐Ÿ‘ค ๐Ÿ’ญ ๐Ÿค ๐Ÿ‘ˆ ๐Ÿ‘†. ๐Ÿ‘ถ - -/// - -* ๐Ÿšฅ ๐Ÿ‡ต๐Ÿ‡ท ๐Ÿ’ช ๐Ÿ“‰ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ญ ๐Ÿ‘ˆ, โœ‹๏ธ ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ ๐Ÿ’ช ๐Ÿ’โ€โ™‚๏ธ ๐Ÿ˜Ÿ, ๐Ÿ“ค 5๏ธโƒฃ๐Ÿ“† ๐Ÿ“š ๐Ÿค” โ˜ ๐ŸŽ‘ (& ๐Ÿ‘ค ๐Ÿ”œ โœ”๏ธ ๐Ÿ‘‡ ๐Ÿ‘ ๐Ÿ‘ ๐Ÿ‘ถ), โšซ๏ธ ๐Ÿ‘ป ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽฏ ๐Ÿ”› โš› ๐Ÿ‘œ. - -### ๐Ÿ’ฏ - -* โ„น ๐Ÿ‘ค โœ… ๐Ÿ‘ˆ ๐Ÿ‡ต๐Ÿ‡ท โœ”๏ธ **๐Ÿ’ฏ**. - -* โœ… ๐Ÿ‘ˆ ๐Ÿ’ฏ **โŒ** โญ ๐Ÿ‡ต๐Ÿ‡ท. ๐Ÿ‘ถ - -* โคด๏ธ โœ… ๐Ÿ‘ˆ ๐Ÿ’ฏ **๐Ÿšถโ€โ™€๏ธ** โฎ๏ธ ๐Ÿ‡ต๐Ÿ‡ท. ๐Ÿ‘ถ - -* ๐Ÿ“š ๐ŸŽธ ๐Ÿšซ โœ”๏ธ ๐Ÿ’ฏ, ๐Ÿ‘† ๐Ÿ’ช **๐ŸŽ—** ๐Ÿ‘ซ ๐Ÿšฎ ๐Ÿ’ฏ, โš–๏ธ ๐Ÿ‘† ๐Ÿ’ช **๐Ÿค”** ๐Ÿ’ฏ ๐Ÿ‘†. ๐Ÿ‘ˆ 1๏ธโƒฃ ๐Ÿ‘œ ๐Ÿ‘ˆ ๐Ÿด ๐ŸŒ… ๐Ÿ•ฐ & ๐Ÿ‘† ๐Ÿ’ช โ„น ๐Ÿ“š โฎ๏ธ ๐Ÿ‘ˆ. - -* โคด๏ธ ๐Ÿค โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ”„, ๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘† โœ… โšซ๏ธ. ๐Ÿ‘ถ - -## โœ ๐Ÿšฒ ๐Ÿ“จ - -๐Ÿ‘† ๐Ÿ’ช [๐Ÿ“‰](contributing.md){.internal-link target=_blank} โ„น ๐Ÿ“Ÿ โฎ๏ธ ๐Ÿšฒ ๐Ÿ“จ, ๐Ÿ–ผ: - -* ๐Ÿ”ง ๐Ÿคญ ๐Ÿ‘† ๐Ÿ”Ž ๐Ÿ”› ๐Ÿงพ. -* ๐Ÿ’ฐ ๐Ÿ“„, ๐Ÿ“น, โš–๏ธ ๐Ÿ“ป ๐Ÿ‘† โœ โš–๏ธ ๐Ÿ”Ž ๐Ÿ”ƒ FastAPI โœ ๐Ÿ‘‰ ๐Ÿ“. - * โš’ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿšฎ ๐Ÿ‘† ๐Ÿ”— โ–ถ๏ธ ๐Ÿ”— ๐Ÿ“„. -* โ„น [๐Ÿ’ฌ ๐Ÿงพ](contributing.md#_9){.internal-link target=_blank} ๐Ÿ‘† ๐Ÿ‡ช๐Ÿ‡ธ. - * ๐Ÿ‘† ๐Ÿ’ช โ„น ๐Ÿ“„ โœ โœ ๐ŸŽ. -* ๐Ÿ› ๏ธ ๐Ÿ†• ๐Ÿงพ ๐Ÿ“„. -* ๐Ÿ”ง โ™ป โ”/๐Ÿ›. - * โš’ ๐Ÿ’ญ ๐Ÿšฎ ๐Ÿ’ฏ. -* ๐Ÿšฎ ๐Ÿ†• โš’. - * โš’ ๐Ÿ’ญ ๐Ÿšฎ ๐Ÿ’ฏ. - * โš’ ๐Ÿ’ญ ๐Ÿšฎ ๐Ÿงพ ๐Ÿšฅ โšซ๏ธ ๐Ÿ”—. - -## โ„น ๐Ÿšง FastAPI - -โ„น ๐Ÿ‘ค ๐Ÿšง **FastAPI**โ— ๐Ÿ‘ถ - -๐Ÿ“ค ๐Ÿ“š ๐Ÿ‘ท, & ๐Ÿ† โšซ๏ธ, **๐Ÿ‘†** ๐Ÿ’ช โšซ๏ธ. - -๐Ÿ‘‘ ๐Ÿ“‹ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โ–ถ๏ธ๏ธ ๐Ÿ”œ: - -* [โ„น ๐ŸŽ โฎ๏ธ โ” ๐Ÿ“‚](#i){.internal-link target=_blank} (๐Ÿ‘€ ๐Ÿ“„ ๐Ÿ”›). -* [๐Ÿ“„ ๐Ÿšฒ ๐Ÿ“จ](#i){.internal-link target=_blank} (๐Ÿ‘€ ๐Ÿ“„ ๐Ÿ”›). - -๐Ÿ‘ˆ 2๏ธโƒฃ ๐Ÿ“‹ โšซ๏ธโ” **๐Ÿด ๐Ÿ•ฐ ๐Ÿ†**. ๐Ÿ‘ˆ ๐Ÿ‘‘ ๐Ÿ‘ท ๐Ÿ† FastAPI. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช โ„น ๐Ÿ‘ค โฎ๏ธ ๐Ÿ‘ˆ, **๐Ÿ‘† ๐Ÿค ๐Ÿ‘ค ๐Ÿšง FastAPI** & โš’ ๐Ÿ’ญ โšซ๏ธ ๐Ÿšง **๐Ÿ› ๏ธ โฉ & ๐Ÿ‘ป**. ๐Ÿ‘ถ - -## ๐Ÿ›‘ ๐Ÿ’ฌ - -๐Ÿ›‘ ๐Ÿ‘ถ ๐Ÿ˜ง ๐Ÿ’ฌ ๐Ÿ’ฝ ๐Ÿ‘ถ & ๐Ÿค™ ๐Ÿ‘… โฎ๏ธ ๐ŸŽ FastAPI ๐Ÿ‘ช. - -/// tip - -โ”, ๐Ÿ’ญ ๐Ÿ‘ซ ๐Ÿ“‚ ๐Ÿ’ฌ, ๐Ÿ“ค ๐ŸŒ… ๐Ÿ‘ ๐Ÿคž ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ โ„น [FastAPI ๐Ÿ•ด](fastapi-people.md#_2){.internal-link target=_blank}. - -โš™๏ธ ๐Ÿ’ฌ ๐Ÿ•ด ๐ŸŽ ๐Ÿข ๐Ÿ’ฌ. - -/// - -### ๐Ÿšซ โš™๏ธ ๐Ÿ’ฌ โ” - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ’ฌ โœ” ๐ŸŒ… "๐Ÿ†“ ๐Ÿ’ฌ", โšซ๏ธ โฉ ๐Ÿ’ญ โ” ๐Ÿ‘ˆ ๐Ÿ’โ€โ™‚๏ธ ๐Ÿข & ๐ŸŒ… โš  โ”,, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšซ ๐Ÿ“จ โ”. - -๐Ÿ“‚, ๐Ÿ“„ ๐Ÿ”œ ๐Ÿฆฎ ๐Ÿ‘† โœ โ–ถ๏ธ๏ธ โ” ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ– ๐Ÿ’ช ๐Ÿคš ๐Ÿ‘ โ”, โš–๏ธ โŽ โš  ๐Ÿ‘† โญ ๐Ÿ’ฌ. & ๐Ÿ“‚ ๐Ÿ‘ค ๐Ÿ’ช โš’ ๐Ÿ’ญ ๐Ÿ‘ค ๐Ÿ•ง โ” ๐ŸŒ, ๐Ÿšฅ โšซ๏ธ โœŠ ๐Ÿ•ฐ. ๐Ÿ‘ค ๐Ÿ’ช ๐Ÿšซ ๐Ÿค™ ๐Ÿ‘ˆ โฎ๏ธ ๐Ÿ’ฌ โš™๏ธ. ๐Ÿ‘ถ - -๐Ÿ’ฌ ๐Ÿ’ฌ โš™๏ธ ๐Ÿšซ ๐Ÿ’ช ๐Ÿ“‡ ๐Ÿ“‚, โ” & โ” 5๏ธโƒฃ๐Ÿ“† ๐Ÿคš ๐Ÿ’ธ ๐Ÿ’ฌ. & ๐Ÿ•ด ๐Ÿ• ๐Ÿ“‚ ๐Ÿ’ฏ โ–ถ๏ธ๏ธ [FastAPI ๐Ÿ•ด](fastapi-people.md#_2){.internal-link target=_blank}, ๐Ÿ‘† ๐Ÿ”œ ๐ŸŒ… ๐ŸŽฒ ๐Ÿ“จ ๐ŸŒ… ๐Ÿ™‹ ๐Ÿ“‚. - -๐Ÿ”› ๐ŸŽ ๐Ÿš„, ๐Ÿ“ค ๐Ÿ’ฏ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ฌ โš™๏ธ, ๐Ÿ“ค โ†• ๐Ÿคž ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ”Ž ๐Ÿ‘ฑ ๐Ÿ’ฌ ๐Ÿ“ค, ๐ŸŒ– ๐ŸŒ ๐Ÿ•ฐ. ๐Ÿ‘ถ - -## ๐Ÿ’ฐ ๐Ÿ“• - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ฐ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ“• (๐Ÿ‘ค) ๐Ÿ”˜ ๐Ÿ“‚ ๐Ÿ’ฐ. - -๐Ÿ“ค ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ› ๐Ÿ‘ค โ˜• ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ’ฌ ๐Ÿ‘. ๐Ÿ‘ถ - -& ๐Ÿ‘† ๐Ÿ’ช โ–ถ๏ธ๏ธ ๐Ÿฅ‡1st โš–๏ธ ๐ŸŒŸ ๐Ÿ’ฐ FastAPI. ๐Ÿ‘ถ ๐Ÿ‘ถ - -## ๐Ÿ’ฐ ๐Ÿงฐ ๐Ÿ‘ˆ ๐Ÿ‹๏ธ FastAPI - -๐Ÿ‘† โœ”๏ธ ๐Ÿ‘€ ๐Ÿงพ, FastAPI ๐Ÿง ๐Ÿ”› โŒš ๐Ÿ˜, ๐Ÿ’ƒ & Pydantic. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ฐ: - -* โœก ๐Ÿ (Pydantic) -* ๐Ÿ—œ (๐Ÿ’ƒ, Uvicorn) - ---- - -๐Ÿ‘ โ— ๐Ÿ‘ถ diff --git a/docs/em/docs/history-design-future.md b/docs/em/docs/history-design-future.md deleted file mode 100644 index fe3664395..000000000 --- a/docs/em/docs/history-design-future.md +++ /dev/null @@ -1,79 +0,0 @@ -# ๐Ÿ“–, ๐Ÿ”ง & ๐Ÿ”ฎ - -๐Ÿ•ฐ ๐Ÿ, **FastAPI** ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ญ: - -> โšซ๏ธโ” ๐Ÿ“– ๐Ÿ‘‰ ๐Ÿ— โ“ โšซ๏ธ ๐Ÿ˜‘ โœ”๏ธ ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ ๐Ÿ•ณ ๐Ÿ‘Œ ๐Ÿ‘ฉโ€โคโ€๐Ÿ‘จ ๐Ÿ—“๏ธ [...] - -๐Ÿ“ฅ ๐Ÿฅ ๐Ÿ– ๐Ÿ‘ˆ ๐Ÿ“–. - -## ๐ŸŽ› - -๐Ÿ‘ค โœ”๏ธ ๐Ÿ— ๐Ÿ”— โฎ๏ธ ๐Ÿ— ๐Ÿ“„ ๐Ÿ“š 1๏ธโƒฃ2๏ธโƒฃ๐Ÿ—“๏ธ (๐ŸŽฐ ๐Ÿซ, ๐Ÿ“Ž โš™๏ธ, ๐Ÿ” ๐Ÿ‘จโ€๐Ÿญ, โ˜ ๐Ÿ’ฝ, โ™’๏ธ), โ†˜๏ธ ๐Ÿ“š ๐Ÿ‰ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -๐Ÿ• ๐Ÿ‘ˆ, ๐Ÿ‘ค ๐Ÿ’ช ๐Ÿ”ฌ, ๐Ÿ’ฏ & โš™๏ธ ๐Ÿ“š ๐ŸŽ›. - -๐Ÿ“– **FastAPI** ๐Ÿ‘‘ ๐Ÿ• ๐Ÿ“– ๐Ÿšฎ โช. - -๐Ÿ™†โ€โ™€ ๐Ÿ“„ [๐ŸŽ›](alternatives.md){.internal-link target=_blank}: - -
- -**FastAPI** ๐Ÿšซ๐Ÿ”œ ๐Ÿ”€ ๐Ÿšฅ ๐Ÿšซ โฎ๏ธ ๐Ÿ‘ท ๐ŸŽ. - -๐Ÿ“ค โœ”๏ธ ๐Ÿ“š ๐Ÿงฐ โœ โญ ๐Ÿ‘ˆ โœ”๏ธ โ„น ๐Ÿ˜ฎ ๐Ÿšฎ ๐Ÿ—. - -๐Ÿ‘ค โœ”๏ธ โŽ ๐Ÿ— ๐Ÿ†• ๐Ÿ› ๏ธ ๐Ÿ“š 1๏ธโƒฃ2๏ธโƒฃ๐Ÿ—“๏ธ. ๐Ÿฅ‡ ๐Ÿ‘ค ๐Ÿ”„ โŽ ๐ŸŒ โš’ ๐Ÿ“” **FastAPI** โš™๏ธ ๐Ÿ“š ๐ŸŽ ๐Ÿ› ๏ธ, ๐Ÿ”Œ-๐Ÿ”Œ, & ๐Ÿงฐ. - -โœ‹๏ธ โ˜, ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ ๐ŸŽ ๐ŸŽ› ๐ŸŒ˜ ๐Ÿ— ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿšš ๐ŸŒ ๐Ÿ‘ซ โš’, โœŠ ๐Ÿ† ๐Ÿ’ญ โšช๏ธโžก๏ธ โฎ๏ธ ๐Ÿงฐ, & ๐ŸŒ€ ๐Ÿ‘ซ ๐Ÿ† ๐ŸŒŒ ๐Ÿ’ช, โš™๏ธ ๐Ÿ‡ช๐Ÿ‡ธ โš’ ๐Ÿ‘ˆ โž–๐Ÿšซ ๐Ÿ’ช โญ (๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ โž• ๐Ÿ†Ž ๐Ÿ”‘). - -
- -## ๐Ÿ”ฌ - -โš™๏ธ ๐ŸŒ โฎ๏ธ ๐ŸŽ› ๐Ÿ‘ค โœ”๏ธ ๐Ÿคž ๐Ÿ’ก โšช๏ธโžก๏ธ ๐ŸŒ ๐Ÿ‘ซ, โœŠ ๐Ÿ’ญ, & ๐ŸŒ€ ๐Ÿ‘ซ ๐Ÿ† ๐ŸŒŒ ๐Ÿ‘ค ๐Ÿ’ช ๐Ÿ”Ž ๐Ÿ‘ค & ๐Ÿ‰ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ค โœ”๏ธ ๐Ÿ‘ท โฎ๏ธ. - -๐Ÿ–ผ, โšซ๏ธ ๐Ÿ†‘ ๐Ÿ‘ˆ ๐ŸŽฒ โšซ๏ธ ๐Ÿ”œ โš“๏ธ ๐Ÿ”› ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘. - -, ๐Ÿ† ๐ŸŽฏ โš™๏ธ โช โ™ป ๐Ÿฉ. - -, โญ โ–ถ๏ธ ๐Ÿ“Ÿ **FastAPI**, ๐Ÿ‘ค ๐Ÿ’ธ ๐Ÿ“š ๐Ÿ—“๏ธ ๐ŸŽ“ ๐Ÿ”Œ ๐Ÿ—„, ๐ŸŽป ๐Ÿ”—, Oauth2๏ธโƒฃ, โ™’๏ธ. ๐ŸŽฏ ๐Ÿ‘ซ ๐Ÿ’›, ๐Ÿ”€, & ๐Ÿ”บ. - -## ๐Ÿ”ง - -โคด๏ธ ๐Ÿ‘ค ๐Ÿ’ธ ๐Ÿ•ฐ ๐Ÿ”ง ๐Ÿ‘ฉโ€๐Ÿ’ป "๐Ÿ› ๏ธ" ๐Ÿ‘ค ๐Ÿ’š โœ”๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป (๐Ÿ‘ฉโ€๐Ÿ’ป โš™๏ธ FastAPI). - -๐Ÿ‘ค ๐Ÿ’ฏ ๐Ÿ“š ๐Ÿ’ญ ๐Ÿ† ๐ŸŒŸ ๐Ÿ ๐Ÿ‘จโ€๐ŸŽจ: ๐Ÿ—’, ๐Ÿ†š ๐Ÿ“Ÿ, ๐ŸŽ  ๐Ÿงข ๐Ÿ‘จโ€๐ŸŽจ. - -๐Ÿ ๐Ÿ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ฌ, ๐Ÿ‘ˆ ๐Ÿ“” ๐Ÿ”ƒ 8๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -โšซ๏ธ โ›“ ๐Ÿ‘ˆ **FastAPI** ๐ŸŽฏ ๐Ÿ’ฏ โฎ๏ธ ๐Ÿ‘จโ€๐ŸŽจ โš™๏ธ 8๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ ๐Ÿ‘ฉโ€๐Ÿ’ป. & ๐Ÿ† ๐ŸŽ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ˜‘ ๐Ÿ‘ท โžก, ๐ŸŒ ๐Ÿšฎ ๐Ÿ’ฐ ๐Ÿ”œ ๐Ÿ‘ท ๐ŸŒ– ๐ŸŒ ๐Ÿ‘จโ€๐ŸŽจ. - -๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘ค ๐Ÿ’ช ๐Ÿ”Ž ๐Ÿ† ๐ŸŒŒ ๐Ÿ“‰ ๐Ÿ“Ÿ โŽ ๐ŸŒ… ๐Ÿ’ช, โœ”๏ธ ๐Ÿ› ๏ธ ๐ŸŒ, ๐Ÿ†Ž & โŒ โœ…, โ™’๏ธ. - -๐ŸŒ ๐ŸŒŒ ๐Ÿ‘ˆ ๐Ÿšš ๐Ÿ† ๐Ÿ› ๏ธ ๐Ÿ’ก ๐ŸŒ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -## ๐Ÿ“„ - -โฎ๏ธ ๐Ÿ”ฌ ๐Ÿ“š ๐ŸŽ›, ๐Ÿ‘ค ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘ค ๐Ÿ”œ โš™๏ธ **Pydantic** ๐Ÿšฎ ๐Ÿ“ˆ. - -โคด๏ธ ๐Ÿ‘ค ๐Ÿ“‰ โšซ๏ธ, โš’ โšซ๏ธ ๐Ÿ• ๐Ÿ› ๏ธ โฎ๏ธ ๐ŸŽป ๐Ÿ”—, ๐Ÿ•โ€๐Ÿฆบ ๐ŸŽ ๐ŸŒŒ ๐Ÿ”ฌ โš› ๐Ÿ“„, & ๐Ÿ“‰ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ (๐Ÿ†Ž โœ…, โœ) โš“๏ธ ๐Ÿ”› ๐Ÿ’ฏ ๐Ÿ“š ๐Ÿ‘จโ€๐ŸŽจ. - -โฎ๏ธ ๐Ÿ› ๏ธ, ๐Ÿ‘ค ๐Ÿ“‰ **๐Ÿ’ƒ**, ๐ŸŽ ๐Ÿ”‘ ๐Ÿ“„. - -## ๐Ÿ› ๏ธ - -๐Ÿ•ฐ ๐Ÿ‘ค โ–ถ๏ธ ๐Ÿ— **FastAPI** โšซ๏ธ, ๐Ÿ† ๐Ÿ– โช ๐Ÿฅ‰, ๐Ÿ”ง ๐Ÿ”ฌ, ๐Ÿ“„ & ๐Ÿงฐ ๐Ÿ”œ, & ๐Ÿ’ก ๐Ÿ”ƒ ๐Ÿฉ & ๐Ÿ”ง ๐Ÿ†‘ & ๐Ÿ‹. - -## ๐Ÿ”ฎ - -๐Ÿ‘‰ โ˜, โšซ๏ธ โช ๐Ÿ†‘ ๐Ÿ‘ˆ **FastAPI** โฎ๏ธ ๐Ÿšฎ ๐Ÿ’ญ โž– โš  ๐Ÿ“š ๐Ÿ‘ซ๐Ÿ‘ซ. - -โšซ๏ธ ๐Ÿ’†โ€โ™‚ ๐Ÿ‘ ๐Ÿคญ โฎ๏ธ ๐ŸŽ› โ™ฃ ๐Ÿ“š โš™๏ธ ๐Ÿ’ผ ๐Ÿ‘. - -๐Ÿ“š ๐Ÿ‘ฉโ€๐Ÿ’ป & ๐Ÿ‰ โช ๐Ÿช€ ๐Ÿ”› **FastAPI** ๐Ÿ‘ซ ๐Ÿ— (๐Ÿ”Œ ๐Ÿ‘ค & ๐Ÿ‘‡ ๐Ÿ‰). - -โœ‹๏ธ, ๐Ÿ“ค ๐Ÿ“š ๐Ÿ“ˆ & โš’ ๐Ÿ‘Ÿ. - -**FastAPI** โœ”๏ธ ๐Ÿ‘‘ ๐Ÿ”ฎ โคด๏ธ. - -& [๐Ÿ‘† โ„น](help-fastapi.md){.internal-link target=_blank} ๐Ÿ“‰ ๐Ÿ‘. diff --git a/docs/em/docs/how-to/conditional-openapi.md b/docs/em/docs/how-to/conditional-openapi.md deleted file mode 100644 index e47ea0c35..000000000 --- a/docs/em/docs/how-to/conditional-openapi.md +++ /dev/null @@ -1,56 +0,0 @@ -# ๐ŸŽฒ ๐Ÿ—„ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โš’ & ๐ŸŒ ๐Ÿ”ข ๐Ÿ”— ๐Ÿ—„ โœ” โš“๏ธ ๐Ÿ”› ๐ŸŒ, & โŽ โšซ๏ธ ๐Ÿ•. - -## ๐Ÿ”ƒ ๐Ÿ’‚โ€โ™‚, ๐Ÿ”—, & ๐Ÿฉบ - -๐Ÿ•ตโ€โ™‚ ๐Ÿ‘† ๐Ÿงพ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿญ *๐Ÿšซ๐Ÿ”œ ๐Ÿšซ* ๐ŸŒŒ ๐Ÿ›ก ๐Ÿ‘† ๐Ÿ› ๏ธ. - -๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿšฎ ๐Ÿ™† โž• ๐Ÿ’‚โ€โ™‚ ๐Ÿ‘† ๐Ÿ› ๏ธ, *โžก ๐Ÿ› ๏ธ* ๐Ÿ”œ ๐Ÿ’ช ๐ŸŒโ” ๐Ÿ‘ซ. - -๐Ÿšฅ ๐Ÿ“ค ๐Ÿ’‚โ€โ™‚ โš  ๐Ÿ‘† ๐Ÿ“Ÿ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ”€. - -๐Ÿ•ตโ€โ™‚ ๐Ÿงพ โš’ โšซ๏ธ ๐ŸŒ… โš  ๐Ÿค” โ” ๐Ÿ”— โฎ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ, & ๐Ÿ’ช โš’ โšซ๏ธ ๐ŸŒ… โš  ๐Ÿ‘† โ„น โšซ๏ธ ๐Ÿญ. โšซ๏ธ ๐Ÿ’ช ๐Ÿค” ๐ŸŽฏ ๐Ÿ“จ ๐Ÿ’‚โ€โ™‚ ๐Ÿ”˜ ๐ŸŒŒ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ” ๐Ÿ‘† ๐Ÿ› ๏ธ, ๐Ÿ“ค ๐Ÿ“š ๐Ÿ‘ ๐Ÿ‘œ ๐Ÿ‘† ๐Ÿ’ช, ๐Ÿ–ผ: - -* โš’ ๐Ÿ’ญ ๐Ÿ‘† โœ”๏ธ ๐Ÿ‘ ๐Ÿ”ฌ Pydantic ๐Ÿท ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ’ช & ๐Ÿ“จ. -* ๐Ÿ”— ๐Ÿ™† โœ” โœ” & ๐Ÿ”‘ โš™๏ธ ๐Ÿ”—. -* ๐Ÿ™… ๐Ÿช ๐Ÿ”ข ๐Ÿ”, ๐Ÿ•ด ๐Ÿ”#๏ธโƒฃ. -* ๐Ÿ› ๏ธ & โš™๏ธ ๐Ÿ‘-๐Ÿ’ญ ๐Ÿ” ๐Ÿงฐ, ๐Ÿ’– ๐Ÿ‡ธ๐Ÿ‡ฒ & ๐Ÿฅ™ ๐Ÿค, โ™’๏ธ. -* ๐Ÿšฎ ๐ŸŒ… ๐Ÿงฝ โœ” ๐ŸŽ› โฎ๏ธ Oauth2๏ธโƒฃ โ†” ๐ŸŒโ” ๐Ÿ’ช. -* ...โ™’๏ธ. - -๐Ÿ‘, ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† โœ”๏ธ ๐Ÿ“ถ ๐ŸŽฏ โš™๏ธ ๐Ÿ’ผ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿค™ ๐Ÿ’ช โŽ ๐Ÿ› ๏ธ ๐Ÿฉบ ๐ŸŒ (โœ… ๐Ÿญ) โš–๏ธ โš“๏ธ ๐Ÿ”› ๐Ÿ“ณ โšช๏ธโžก๏ธ ๐ŸŒ ๐Ÿ”ข. - -## ๐ŸŽฒ ๐Ÿ—„ โšช๏ธโžก๏ธ โš’ & ๐Ÿ‡จ๐Ÿ‡ป { - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช โš™๏ธ ๐ŸŽ Pydantic โš’ ๐Ÿ”— ๐Ÿ‘† ๐Ÿ— ๐Ÿ—„ & ๐Ÿฉบ โšœ. - -๐Ÿ–ผ: - -{* ../../docs_src/conditional_openapi/tutorial001.py hl[6,11] *} - -๐Ÿ“ฅ ๐Ÿ‘ฅ ๐Ÿ“ฃ โš’ `openapi_url` โฎ๏ธ ๐ŸŽ ๐Ÿ”ข `"/openapi.json"`. - -& โคด๏ธ ๐Ÿ‘ฅ โš™๏ธ โšซ๏ธ ๐Ÿ•โ” ๐Ÿ— `FastAPI` ๐Ÿ“ฑ. - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โŽ ๐Ÿ—„ (โœ… ๐ŸŽš ๐Ÿฉบ) โš’ ๐ŸŒ ๐Ÿ”ข `OPENAPI_URL` ๐Ÿ› ๐ŸŽป, ๐Ÿ’–: - -
- -```console -$ OPENAPI_URL= uvicorn main:app - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -โคด๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถ ๐Ÿ“› `/openapi.json`, `/docs`, โš–๏ธ `/redoc` ๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš `404 Not Found` โŒ ๐Ÿ’–: - -```JSON -{ - "detail": "Not Found" -} -``` diff --git a/docs/em/docs/how-to/custom-request-and-route.md b/docs/em/docs/how-to/custom-request-and-route.md deleted file mode 100644 index 32d7fbfec..000000000 --- a/docs/em/docs/how-to/custom-request-and-route.md +++ /dev/null @@ -1,109 +0,0 @@ -# ๐Ÿ›ƒ ๐Ÿ“จ & APIRoute ๐ŸŽ“ - -๐Ÿ’ผ, ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿ’š ๐Ÿ” โš› โš™๏ธ `Request` & `APIRoute` ๐ŸŽ“. - -๐ŸŽฏ, ๐Ÿ‘‰ 5๏ธโƒฃ๐Ÿ“† ๐Ÿ‘ ๐ŸŽ› โš› ๐Ÿ› ๏ธ. - -๐Ÿ–ผ, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โœ โš–๏ธ ๐Ÿ”ฌ ๐Ÿ“จ ๐Ÿ’ช โญ โšซ๏ธ ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿˆธ. - -/// danger - -๐Ÿ‘‰ "๐Ÿง" โš’. - -๐Ÿšฅ ๐Ÿ‘† โ–ถ๏ธ โฎ๏ธ **FastAPI** ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿšถ ๐Ÿ‘‰ ๐Ÿ“„. - -/// - -## โš™๏ธ ๐Ÿ’ผ - -โš™๏ธ ๐Ÿ’ผ ๐Ÿ”Œ: - -* ๐Ÿญ ๐Ÿšซ-๐ŸŽป ๐Ÿ“จ ๐Ÿ’ช ๐ŸŽป (โœ… `msgpack`). -* ๐Ÿ—œ ๐Ÿ—œ-๐Ÿ—œ ๐Ÿ“จ ๐Ÿ’ช. -* ๐Ÿ” ๐Ÿšจ ๐ŸŒ ๐Ÿ“จ ๐Ÿ’ช. - -## ๐Ÿšš ๐Ÿ›ƒ ๐Ÿ“จ ๐Ÿ’ช ๐Ÿ”ข - -โžก๏ธ ๐Ÿ‘€ โ” โš’ โš™๏ธ ๐Ÿ›ƒ `Request` ๐Ÿฟ ๐Ÿ—œ ๐Ÿ—œ ๐Ÿ“จ. - -& `APIRoute` ๐Ÿฟ โš™๏ธ ๐Ÿ‘ˆ ๐Ÿ›ƒ ๐Ÿ“จ ๐ŸŽ“. - -### โœ ๐Ÿ›ƒ `GzipRequest` ๐ŸŽ“ - -/// tip - -๐Ÿ‘‰ ๐Ÿงธ ๐Ÿ–ผ ๐ŸŽฆ โ” โšซ๏ธ ๐Ÿ‘ท, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ—œ ๐Ÿ•โ€๐Ÿฆบ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿšš [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank}. - -/// - -๐Ÿฅ‡, ๐Ÿ‘ฅ โœ `GzipRequest` ๐ŸŽ“, โ” ๐Ÿ”œ ๐Ÿ“ `Request.body()` ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ—œ ๐Ÿ’ช ๐Ÿ” โ˜‘ ๐ŸŽš. - -๐Ÿšฅ ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ `gzip` ๐ŸŽš, โšซ๏ธ ๐Ÿ”œ ๐Ÿšซ ๐Ÿ”„ ๐Ÿ—œ ๐Ÿ’ช. - -๐Ÿ‘ˆ ๐ŸŒŒ, ๐ŸŽ ๐Ÿ›ฃ ๐ŸŽ“ ๐Ÿ’ช ๐Ÿต ๐Ÿ—œ ๐Ÿ—œ โš–๏ธ ๐Ÿ—œ ๐Ÿ“จ. - -{* ../../docs_src/custom_request_and_route/tutorial001.py hl[8:15] *} - -### โœ ๐Ÿ›ƒ `GzipRoute` ๐ŸŽ“ - -โญ, ๐Ÿ‘ฅ โœ ๐Ÿ›ƒ ๐Ÿฟ `fastapi.routing.APIRoute` ๐Ÿ‘ˆ ๐Ÿ”œ โš’ โš™๏ธ `GzipRequest`. - -๐Ÿ‘‰ ๐Ÿ•ฐ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ“ ๐Ÿ‘ฉโ€๐Ÿ”ฌ `APIRoute.get_route_handler()`. - -๐Ÿ‘‰ ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ“จ ๐Ÿ”ข. & ๐Ÿ‘ˆ ๐Ÿ”ข โšซ๏ธโ” ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ“จ. - -๐Ÿ“ฅ ๐Ÿ‘ฅ โš™๏ธ โšซ๏ธ โœ `GzipRequest` โšช๏ธโžก๏ธ โฎ๏ธ ๐Ÿ“จ. - -{* ../../docs_src/custom_request_and_route/tutorial001.py hl[18:26] *} - -/// note | ๐Ÿ“ก โ„น - -`Request` โœ”๏ธ `request.scope` ๐Ÿ”ข, ๐Ÿ‘ˆ ๐Ÿ `dict` โš— ๐Ÿ—ƒ ๐Ÿ”— ๐Ÿ“จ. - - `Request` โœ”๏ธ `request.receive`, ๐Ÿ‘ˆ ๐Ÿ”ข "๐Ÿ“จ" ๐Ÿ’ช ๐Ÿ“จ. - - `scope` `dict` & `receive` ๐Ÿ”ข ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ• ๐Ÿ”ซ ๐Ÿ”ง. - - & ๐Ÿ‘ˆ 2๏ธโƒฃ ๐Ÿ‘œ, `scope` & `receive`, โšซ๏ธโ” ๐Ÿ’ช โœ ๐Ÿ†• `Request` ๐Ÿ‘. - -๐Ÿ’ก ๐ŸŒ… ๐Ÿ”ƒ `Request` โœ… ๐Ÿ’ƒ ๐Ÿฉบ ๐Ÿ”ƒ ๐Ÿ“จ. - -/// - -๐Ÿ•ด ๐Ÿ‘œ ๐Ÿ”ข ๐Ÿ“จ `GzipRequest.get_route_handler` ๐Ÿ”จ ๐ŸŽ ๐Ÿ—œ `Request` `GzipRequest`. - -๐Ÿ”จ ๐Ÿ‘‰, ๐Ÿ‘† `GzipRequest` ๐Ÿ”œ โœŠ ๐Ÿ’… ๐Ÿ—œ ๐Ÿ“Š (๐Ÿšฅ ๐Ÿ’ช) โญ ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. - -โฎ๏ธ ๐Ÿ‘ˆ, ๐ŸŒ ๐Ÿญ โš› ๐ŸŽ. - -โœ‹๏ธ โ†ฉ๏ธ ๐Ÿ‘† ๐Ÿ”€ `GzipRequest.body`, ๐Ÿ“จ ๐Ÿ’ช ๐Ÿ”œ ๐Ÿ” ๐Ÿ—œ ๐Ÿ•โ” โšซ๏ธ ๐Ÿ“ **FastAPI** ๐Ÿ•โ” ๐Ÿ’ช. - -## ๐Ÿ” ๐Ÿ“จ ๐Ÿ’ช โš  ๐Ÿ•โ€๐Ÿฆบ - -/// tip - -โŽ ๐Ÿ‘‰ ๐ŸŽ โš , โšซ๏ธ ๐ŸŽฒ ๐Ÿ“š โฉ โš™๏ธ `body` ๐Ÿ›ƒ ๐Ÿ•โ€๐Ÿฆบ `RequestValidationError` ([๐Ÿšš โŒ](../tutorial/handling-errors.md#requestvalidationerror){.internal-link target=_blank}). - -โœ‹๏ธ ๐Ÿ‘‰ ๐Ÿ–ผ โ˜‘ & โšซ๏ธ ๐ŸŽฆ โ” ๐Ÿ”— โฎ๏ธ ๐Ÿ”— ๐Ÿฆฒ. - -/// - -๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ ๐Ÿ‘‰ ๐ŸŽ ๐ŸŽฏ ๐Ÿ” ๐Ÿ“จ ๐Ÿ’ช โš  ๐Ÿ•โ€๐Ÿฆบ. - -๐ŸŒ ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿต ๐Ÿ“จ ๐Ÿ”˜ `try`/`except` ๐Ÿซ: - -{* ../../docs_src/custom_request_and_route/tutorial002.py hl[13,15] *} - -๐Ÿšฅ โš  ๐Ÿ“‰, `Request` ๐Ÿ‘ ๐Ÿ”œ โ†”, ๐Ÿ‘ฅ ๐Ÿ’ช โœ & โš’ โš™๏ธ ๐Ÿ“จ ๐Ÿ’ช ๐Ÿ•โ” ๐Ÿšš โŒ: - -{* ../../docs_src/custom_request_and_route/tutorial002.py hl[16:18] *} - -## ๐Ÿ›ƒ `APIRoute` ๐ŸŽ“ ๐Ÿ“ป - -๐Ÿ‘† ๐Ÿ’ช โš’ `route_class` ๐Ÿ”ข `APIRouter`: - -{* ../../docs_src/custom_request_and_route/tutorial003.py hl[26] *} - -๐Ÿ‘‰ ๐Ÿ–ผ, *โžก ๐Ÿ› ๏ธ* ๐Ÿ”ฝ `router` ๐Ÿ”œ โš™๏ธ ๐Ÿ›ƒ `TimedRoute` ๐ŸŽ“, & ๐Ÿ”œ โœ”๏ธ โž• `X-Response-Time` ๐ŸŽš ๐Ÿ“จ โฎ๏ธ ๐Ÿ•ฐ โšซ๏ธ โœŠ ๐Ÿ— ๐Ÿ“จ: - -{* ../../docs_src/custom_request_and_route/tutorial003.py hl[13:20] *} diff --git a/docs/em/docs/how-to/extending-openapi.md b/docs/em/docs/how-to/extending-openapi.md deleted file mode 100644 index c3e6c7f66..000000000 --- a/docs/em/docs/how-to/extending-openapi.md +++ /dev/null @@ -1,83 +0,0 @@ -# โ†” ๐Ÿ—„ - -/// warning - -๐Ÿ‘‰ ๐Ÿ‘ ๐Ÿง โš’. ๐Ÿ‘† ๐ŸŽฒ ๐Ÿ’ช ๐Ÿšถ โšซ๏ธ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“„ ๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ, ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽฒ ๐Ÿšถ ๐Ÿ‘‰ ๐Ÿ“„. - -๐Ÿšฅ ๐Ÿ‘† โช ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”€ ๐Ÿ— ๐Ÿ—„ ๐Ÿ”—, ๐Ÿ˜ฃ ๐Ÿ‘‚. - -/// - -๐Ÿ“ค ๐Ÿ’ผ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช ๐Ÿ”€ ๐Ÿ— ๐Ÿ—„ ๐Ÿ”—. - -๐Ÿ‘‰ ๐Ÿ“„ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โ”. - -## ๐Ÿ˜ ๐Ÿ› ๏ธ - -๐Ÿ˜ (๐Ÿ”ข) ๐Ÿ› ๏ธ, โฉ. - -`FastAPI` ๐Ÿˆธ (๐Ÿ‘) โœ”๏ธ `.openapi()` ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ‘ˆ ๐Ÿ“ˆ ๐Ÿ“จ ๐Ÿ—„ ๐Ÿ”—. - -๐Ÿ• ๐Ÿˆธ ๐ŸŽš ๐Ÿ—, *โžก ๐Ÿ› ๏ธ* `/openapi.json` (โš–๏ธ โšซ๏ธโ” ๐Ÿ‘† โš’ ๐Ÿ‘† `openapi_url`) ยฎ. - -โšซ๏ธ ๐Ÿ“จ ๐ŸŽป ๐Ÿ“จ โฎ๏ธ ๐Ÿ ๐Ÿˆธ `.openapi()` ๐Ÿ‘ฉโ€๐Ÿ”ฌ. - -๐Ÿ”ข, โšซ๏ธโ” ๐Ÿ‘ฉโ€๐Ÿ”ฌ `.openapi()` ๐Ÿ”จ โœ… ๐Ÿ  `.openapi_schema` ๐Ÿ‘€ ๐Ÿšฅ โšซ๏ธ โœ”๏ธ ๐ŸŽš & ๐Ÿ“จ ๐Ÿ‘ซ. - -๐Ÿšฅ โšซ๏ธ ๐Ÿšซ, โšซ๏ธ ๐Ÿ— ๐Ÿ‘ซ โš™๏ธ ๐Ÿš™ ๐Ÿ”ข `fastapi.openapi.utils.get_openapi`. - -& ๐Ÿ‘ˆ ๐Ÿ”ข `get_openapi()` ๐Ÿ“จ ๐Ÿ”ข: - -* `title`: ๐Ÿ—„ ๐Ÿ“›, ๐ŸŽฆ ๐Ÿฉบ. -* `version`: โฌ ๐Ÿ‘† ๐Ÿ› ๏ธ, โœ… `2.5.0`. -* `openapi_version`: โฌ ๐Ÿ—„ ๐Ÿ”ง โš™๏ธ. ๐Ÿ”ข, โช: `3.0.2`. -* `description`: ๐Ÿ“› ๐Ÿ‘† ๐Ÿ› ๏ธ. -* `routes`: ๐Ÿ“‡ ๐Ÿ›ฃ, ๐Ÿ‘ซ ๐Ÿ”  ยฎ *โžก ๐Ÿ› ๏ธ*. ๐Ÿ‘ซ โœŠ โšช๏ธโžก๏ธ `app.routes`. - -## ๐Ÿ”‘ ๐Ÿ”ข - -โš™๏ธ โ„น ๐Ÿ”›, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ ๐Ÿš™ ๐Ÿ”ข ๐Ÿ— ๐Ÿ—„ ๐Ÿ”— & ๐Ÿ” ๐Ÿ”  ๐Ÿ• ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช. - -๐Ÿ–ผ, โžก๏ธ ๐Ÿšฎ ๐Ÿ“„ ๐Ÿ—„ โ†” ๐Ÿ”Œ ๐Ÿ›ƒ ๐Ÿ”ฑ. - -### ๐Ÿ˜ **FastAPI** - -๐Ÿฅ‡, โœ ๐ŸŒ ๐Ÿ‘† **FastAPI** ๐Ÿˆธ ๐Ÿ›Ž: - -{* ../../docs_src/extending_openapi/tutorial001.py hl[1,4,7:9] *} - -### ๐Ÿ— ๐Ÿ—„ ๐Ÿ”— - -โคด๏ธ, โš™๏ธ ๐ŸŽ ๐Ÿš™ ๐Ÿ”ข ๐Ÿ— ๐Ÿ—„ ๐Ÿ”—, ๐Ÿ”˜ `custom_openapi()` ๐Ÿ”ข: - -{* ../../docs_src/extending_openapi/tutorial001.py hl[2,15:20] *} - -### ๐Ÿ”€ ๐Ÿ—„ ๐Ÿ”— - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ“„ โ†”, โŽ ๐Ÿ›ƒ `x-logo` `info` "๐ŸŽš" ๐Ÿ—„ ๐Ÿ”—: - -{* ../../docs_src/extending_openapi/tutorial001.py hl[21:23] *} - -### ๐Ÿ’พ ๐Ÿ—„ ๐Ÿ”— - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ  `.openapi_schema` "๐Ÿ’พ", ๐Ÿช ๐Ÿ‘† ๐Ÿ— ๐Ÿ”—. - -๐Ÿ‘ˆ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ† ๐Ÿšซ โœ”๏ธ ๐Ÿ— ๐Ÿ”— ๐Ÿ”  ๐Ÿ•ฐ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“‚ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿฉบ. - -โšซ๏ธ ๐Ÿ”œ ๐Ÿ— ๐Ÿ•ด ๐Ÿ•, & โคด๏ธ ๐ŸŽ ๐Ÿ’พ ๐Ÿ”— ๐Ÿ”œ โš™๏ธ โญ ๐Ÿ“จ. - -{* ../../docs_src/extending_openapi/tutorial001.py hl[13:14,24:25] *} - -### ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ”ฌ - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ช โŽ `.openapi()` ๐Ÿ‘ฉโ€๐Ÿ”ฌ โฎ๏ธ ๐Ÿ‘† ๐Ÿ†• ๐Ÿ”ข. - -{* ../../docs_src/extending_openapi/tutorial001.py hl[28] *} - -### โœ… โšซ๏ธ - -๐Ÿ• ๐Ÿ‘† ๐Ÿšถ http://127.0.0.1:8000/redoc ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘† โš™๏ธ ๐Ÿ‘† ๐Ÿ›ƒ ๐Ÿ”ฑ (๐Ÿ‘‰ ๐Ÿ–ผ, **FastAPI**'โ“‚ ๐Ÿ”ฑ): - - diff --git a/docs/em/docs/how-to/graphql.md b/docs/em/docs/how-to/graphql.md deleted file mode 100644 index 083e9ebd2..000000000 --- a/docs/em/docs/how-to/graphql.md +++ /dev/null @@ -1,60 +0,0 @@ -# ๐Ÿ•น - -**FastAPI** โš“๏ธ ๐Ÿ”› **๐Ÿ”ซ** ๐Ÿฉ, โšซ๏ธ ๐Ÿ“ถ โฉ ๐Ÿ› ๏ธ ๐Ÿ™† **๐Ÿ•น** ๐Ÿ—ƒ ๐Ÿ”— โฎ๏ธ ๐Ÿ”ซ. - -๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ€ ๐Ÿ˜ FastAPI *โžก ๐Ÿ› ๏ธ* โฎ๏ธ ๐Ÿ•น ๐Ÿ”› ๐ŸŽ ๐Ÿˆธ. - -/// tip - -**๐Ÿ•น** โŽ ๐Ÿ“ถ ๐ŸŽฏ โš™๏ธ ๐Ÿ’ผ. - -โšซ๏ธ โœ”๏ธ **๐Ÿ“ˆ** & **โš ** ๐Ÿ•โ” ๐Ÿ”ฌ โš  **๐Ÿ•ธ ๐Ÿ”—**. - -โš’ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿ”ฌ ๐Ÿšฅ **๐Ÿ’ฐ** ๐Ÿ‘† โš™๏ธ ๐Ÿ’ผ โš– **๐Ÿ‘**. ๐Ÿ‘ถ - -/// - -## ๐Ÿ•น ๐Ÿ—ƒ - -๐Ÿ“ฅ **๐Ÿ•น** ๐Ÿ—ƒ ๐Ÿ‘ˆ โœ”๏ธ **๐Ÿ”ซ** ๐Ÿ•โ€๐Ÿฆบ. ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ซ โฎ๏ธ **FastAPI**: - -* ๐Ÿ“ ๐Ÿ‘ถ - * โฎ๏ธ ๐Ÿฉบ FastAPI -* ๐Ÿ‘ธ - * โฎ๏ธ ๐Ÿฉบ FastAPI -* ๐ŸŸ - * โฎ๏ธ ๐ŸŸ ๐Ÿ”ซ ๐Ÿšš ๐Ÿ”ซ ๐Ÿ› ๏ธ -* โš— - * โฎ๏ธ ๐Ÿ’ƒ-Graphene3๏ธโƒฃ - -## ๐Ÿ•น โฎ๏ธ ๐Ÿ“ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช โš–๏ธ ๐Ÿ’š ๐Ÿ‘ท โฎ๏ธ **๐Ÿ•น**, **๐Ÿ“** **๐Ÿ‘** ๐Ÿ—ƒ โšซ๏ธ โœ”๏ธ ๐Ÿ”ง ๐Ÿ” **FastAPI** ๐Ÿ”ง, โšซ๏ธ ๐ŸŒ โš“๏ธ ๐Ÿ”› **๐Ÿ†Ž โœ**. - -โš“๏ธ ๐Ÿ”› ๐Ÿ‘† โš™๏ธ ๐Ÿ’ผ, ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿ’– โš™๏ธ ๐ŸŽ ๐Ÿ—ƒ, โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ‘ค, ๐Ÿ‘ค ๐Ÿ”œ ๐ŸŽฒ ๐Ÿค” ๐Ÿ‘† ๐Ÿ”„ **๐Ÿ“**. - -๐Ÿ“ฅ ๐Ÿคช ๐ŸŽฎ โ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ› ๏ธ ๐Ÿ“ โฎ๏ธ FastAPI: - -{* ../../docs_src/graphql/tutorial001.py hl[3,22,25:26] *} - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ก ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ“ ๐Ÿ“ ๐Ÿงพ. - -& ๐Ÿฉบ ๐Ÿ”ƒ ๐Ÿ“ โฎ๏ธ FastAPI. - -## ๐Ÿ— `GraphQLApp` โšช๏ธโžก๏ธ ๐Ÿ’ƒ - -โฎ๏ธ โฌ ๐Ÿ’ƒ ๐Ÿ”Œ `GraphQLApp` ๐ŸŽ“ ๐Ÿ› ๏ธ โฎ๏ธ โš—. - -โšซ๏ธ ๐Ÿ˜ข โšช๏ธโžก๏ธ ๐Ÿ’ƒ, โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ“Ÿ ๐Ÿ‘ˆ โš™๏ธ โšซ๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช **โ†”** ๐Ÿ’ƒ-Graphene3๏ธโƒฃ, ๐Ÿ‘ˆ ๐Ÿ“” ๐ŸŽ โš™๏ธ ๐Ÿ’ผ & โœ”๏ธ **๐ŸŒ– ๐ŸŒ“ ๐Ÿ”ข**. - -/// tip - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ•น, ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ‘ ๐Ÿ‘† โœ… ๐Ÿ‘… ๐Ÿ“, โšซ๏ธ โš“๏ธ ๐Ÿ”› ๐Ÿ†Ž โœ โ†ฉ๏ธ ๐Ÿ›ƒ ๐ŸŽ“ & ๐Ÿ†Ž. - -/// - -## ๐Ÿ’ก ๐ŸŒ… - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ก ๐ŸŒ… ๐Ÿ”ƒ **๐Ÿ•น** ๐Ÿ›‚ ๐Ÿ•น ๐Ÿงพ. - -๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ”  ๐Ÿ‘ˆ ๐Ÿ—ƒ ๐Ÿ”ฌ ๐Ÿ”› ๐Ÿ‘ซ ๐Ÿ”—. diff --git a/docs/em/docs/index.md b/docs/em/docs/index.md deleted file mode 100644 index 5f5fc2e39..000000000 --- a/docs/em/docs/index.md +++ /dev/null @@ -1,474 +0,0 @@ -# FastAPI - - - -

- FastAPI -

-

- FastAPI ๐Ÿ› ๏ธ, โ†• ๐ŸŽญ, โฉ ๐Ÿ’ก, โฉ ๐Ÿ“Ÿ, ๐Ÿ”œ ๐Ÿญ -

-

- - Test - - - Coverage - - - Package version - - - Supported Python versions - -

- ---- - -**๐Ÿงพ**: https://fastapi.tiangolo.com - -**โ„น ๐Ÿ“Ÿ**: https://github.com/fastapi/fastapi - ---- - -FastAPI ๐Ÿ›, โฉ (โ†•-๐ŸŽญ), ๐Ÿ•ธ ๐Ÿ› ๏ธ ๐Ÿ— ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ 3๏ธโƒฃ.8๏ธโƒฃ โž• โš“๏ธ ๐Ÿ”› ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘. - -๐Ÿ”‘ โš’: - -* **โฉ**: ๐Ÿ“ถ โ†• ๐ŸŽญ, ๐Ÿ”› ๐Ÿ‡ท๐Ÿ‡ช โฎ๏ธ **โœณ** & **๐Ÿšถ** (๐Ÿ‘ ๐Ÿ’ƒ & Pydantic). [1๏ธโƒฃ โฉ ๐Ÿ ๐Ÿ› ๏ธ ๐Ÿ’ช](#_15). -* **โฉ ๐Ÿ“Ÿ**: ๐Ÿ“ˆ ๐Ÿš… ๐Ÿ› ๏ธ โš’ ๐Ÿ”ƒ 2๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ 3๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ. * -* **๐Ÿ‘ฉโ€โคโ€๐Ÿ‘จ ๐Ÿ›**: ๐Ÿ“‰ ๐Ÿ”ƒ 4๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ ๐Ÿ—ฟ (๐Ÿ‘ฉโ€๐Ÿ’ป) ๐Ÿ“‰ โŒ. * -* **๐Ÿ‹๏ธ**: ๐Ÿ‘‘ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ. ๐Ÿ› ๏ธ ๐ŸŒ. ๐ŸŒ˜ ๐Ÿ•ฐ ๐Ÿ› ๏ธ. -* **โฉ**: ๐Ÿ”ง โฉ โš™๏ธ & ๐Ÿ’ก. ๐ŸŒ˜ ๐Ÿ•ฐ ๐Ÿ‘‚ ๐Ÿฉบ. -* **๐Ÿ“**: ๐Ÿ“‰ ๐Ÿ“Ÿ โŽ. ๐Ÿ’— โš’ โšช๏ธโžก๏ธ ๐Ÿ”  ๐Ÿ”ข ๐Ÿ“„. ๐Ÿ‘ฉโ€โคโ€๐Ÿ‘จ ๐Ÿ›. -* **๐Ÿ‹๏ธ**: ๐Ÿคš ๐Ÿญ-๐Ÿ”œ ๐Ÿ“Ÿ. โฎ๏ธ ๐Ÿง ๐ŸŽ“ ๐Ÿงพ. -* **๐Ÿฉ-โš“๏ธ**: โš“๏ธ ๐Ÿ”› (& ๐Ÿ• ๐Ÿ”— โฎ๏ธ) ๐Ÿ“‚ ๐Ÿฉ ๐Ÿ”—: ๐Ÿ—„ (โช ๐Ÿ’ญ ๐Ÿฆ) & ๐ŸŽป ๐Ÿ”—. - -* โš– โš“๏ธ ๐Ÿ”› ๐Ÿ’ฏ ๐Ÿ”› ๐Ÿ”— ๐Ÿ› ๏ธ ๐Ÿ‰, ๐Ÿ— ๐Ÿญ ๐Ÿˆธ. - -## ๐Ÿ’ฐ - - - -{% if sponsors %} -{% for sponsor in sponsors.gold -%} - -{% endfor -%} -{%- for sponsor in sponsors.silver -%} - -{% endfor %} -{% endif %} - - - -๐ŸŽ ๐Ÿ’ฐ - -## ๐Ÿค” - -"_[...] ๐Ÿ‘ค โš™๏ธ **FastAPI** ๐Ÿ“š ๐Ÿ‘ซ ๐Ÿ“†. [...] ๐Ÿ‘ค ๐Ÿค™ ๐Ÿ“† โš™๏ธ โšซ๏ธ ๐ŸŒ ๐Ÿ‘‡ ๐Ÿ‰ **โš— ๐Ÿ•โ€๐Ÿฆบ ๐Ÿคธโ€โ™‚**. ๐Ÿ‘ซ ๐Ÿ’†โ€โ™‚ ๐Ÿ› ๏ธ ๐Ÿ”˜ ๐Ÿš **๐Ÿ–ฅ** ๐Ÿฌ & **๐Ÿ“ ** ๐Ÿฌ._" - -
๐Ÿงฟ ๐Ÿ‡ต๐Ÿ‡ฐ - ๐Ÿคธโ€โ™‚ (๐Ÿ‡ฆ๐Ÿ‡ช)
- ---- - -"_๐Ÿ‘ฅ ๐Ÿ› ๏ธ **FastAPI** ๐Ÿ—ƒ ๐Ÿค– **๐ŸŽ‚** ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ”ข ๐Ÿšš **๐Ÿ”ฎ**. [๐Ÿ‘จ๐Ÿ“›]_" - -
๐Ÿ‡ฎ๐Ÿ‡น ๐Ÿ‡ธ๐Ÿ‡ป, ๐Ÿ‘จ๐Ÿ“› ๐Ÿ‘จ๐Ÿ“›, & ๐Ÿ‡ฑ๐Ÿ‡ฐ ๐Ÿ•‰ ๐Ÿ•‰ - ๐Ÿ™ƒ (๐Ÿ‡ฆ๐Ÿ‡ช)
- ---- - -"_**๐Ÿ“บ** ๐Ÿ™ ๐Ÿ“ฃ ๐Ÿ“‚-โ„น ๐Ÿš€ ๐Ÿ‘† **โš” ๐Ÿงพ** ๐ŸŽถ ๐Ÿ› ๏ธ: **๐Ÿ“จ**โ— [๐Ÿ— โฎ๏ธ **FastAPI**]_" - -
โœก ๐Ÿ, ๐Ÿ‘– ๐Ÿ‡ช๐Ÿ‡ธ, ๐ŸŒฒ ๐Ÿ - ๐Ÿ“บ (๐Ÿ‡ฆ๐Ÿ‡ช)
- ---- - -"_๐Ÿ‘ค ๐Ÿคญ ๐ŸŒ• ๐Ÿ˜„ ๐Ÿ”ƒ **FastAPI**. โšซ๏ธ ๐ŸŽŠ โ—_" - -
โœก ๐Ÿ‡ญ๐Ÿ‡ฐ - ๐Ÿ ๐Ÿ”ข ๐Ÿ“ป ๐Ÿฆ  (๐Ÿ‡ฆ๐Ÿ‡ช)
- ---- - -"_๐Ÿค™, โšซ๏ธโ” ๐Ÿ‘† โœ”๏ธ ๐Ÿ— ๐Ÿ‘€ ๐Ÿ’Ž ๐Ÿ’  & ๐Ÿ‡ต๐Ÿ‡ฑ. ๐Ÿ“š ๐ŸŒŒ, โšซ๏ธ โšซ๏ธโ” ๐Ÿ‘ค ๐Ÿ’š **๐Ÿค—** - โšซ๏ธ ๐Ÿค™ ๐Ÿ˜ ๐Ÿ‘€ ๐Ÿ‘ฑ ๐Ÿ— ๐Ÿ‘ˆ._" - -
โœก ๐Ÿ—„ - ๐Ÿค— ๐Ÿ‘ผ (๐Ÿ‡ฆ๐Ÿ‡ช)
- ---- - -"_๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘€ ๐Ÿ’ก 1๏ธโƒฃ **๐Ÿ› ๐Ÿ› ๏ธ** ๐Ÿ— ๐ŸŽ‚ ๐Ÿ”—, โœ… ๐Ÿ‘… **FastAPI** [...] โšซ๏ธ โฉ, โฉ โš™๏ธ & โฉ ๐Ÿ’ก [...]_" - -"_๐Ÿ‘ฅ โœ”๏ธ ๐ŸŽ› ๐Ÿคญ **FastAPI** ๐Ÿ‘† **๐Ÿ”—** [...] ๐Ÿ‘ค ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’– โšซ๏ธ [...]_" - -
๐Ÿ‡ฑ๐Ÿ‡จ ๐Ÿ‡ธ๐Ÿ‡ฒ - โœก Honnibal - ๐Ÿ’ฅ ๐Ÿ‘ฒ ๐Ÿ•ด - ๐ŸŒˆ ๐Ÿ‘ผ (๐Ÿ‡ฆ๐Ÿ‡ช) - (๐Ÿ‡ฆ๐Ÿ‡ช)
- ---- - -"_๐Ÿšฅ ๐Ÿ™† ๐Ÿ‘€ ๐Ÿ— ๐Ÿญ ๐Ÿ ๐Ÿ› ๏ธ, ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ† ๐Ÿ‘ **FastAPI**. โšซ๏ธ **๐Ÿ’Ž ๐Ÿ—**, **๐Ÿ™… โš™๏ธ** & **๐Ÿ† ๐Ÿ› ๏ธ**, โšซ๏ธ โœ”๏ธ โ–ถ๏ธ๏ธ **๐Ÿ”‘ ๐Ÿฆฒ** ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿฅ‡ ๐Ÿ› ๏ธ ๐ŸŽ› & ๐Ÿš˜ ๐Ÿ“š ๐Ÿง & ๐Ÿ•โ€๐Ÿฆบ โœ… ๐Ÿ‘† ๐Ÿ•น ๐Ÿ”ซ ๐Ÿ‘จโ€๐Ÿ’ป._" - -
๐Ÿ‡น๐Ÿ‡ฆ ๐Ÿฐ - ๐Ÿ“ป (๐Ÿ‡ฆ๐Ÿ‡ช)
- ---- - -## **๐ŸŽ**, FastAPI ๐Ÿ‡ณ๐Ÿ‡จ - - - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ— โœณ ๐Ÿ“ฑ โš™๏ธ ๐Ÿ“ถ โ†ฉ๏ธ ๐Ÿ•ธ ๐Ÿ› ๏ธ, โœ… ๐Ÿ‘… **๐ŸŽ**. - -**๐ŸŽ** FastAPI ๐Ÿฅ ๐Ÿ‘ช. & โšซ๏ธ ๐ŸŽฏ **FastAPI ๐Ÿ‡ณ๐Ÿ‡จ**. ๐Ÿ‘ถ ๐Ÿ‘ถ ๐Ÿ‘ถ - -## ๐Ÿ“„ - -๐Ÿ 3๏ธโƒฃ.7๏ธโƒฃ โž• - -FastAPI ๐Ÿง ๐Ÿ”› โŒš ๐Ÿ˜: - -* ๐Ÿ’ƒ ๐Ÿ•ธ ๐Ÿ•. -* Pydantic ๐Ÿ“Š ๐Ÿ•. - -## ๐Ÿ‘ทโ€โ™‚ - -
- -```console -$ pip install "fastapi[standard]" - ----> 100% -``` - -
- -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ”ซ ๐Ÿ’ฝ, ๐Ÿญ โœ… Uvicorn โš–๏ธ Hypercorn. - -
- -```console -$ pip install "uvicorn[standard]" - ----> 100% -``` - -
- -## ๐Ÿ–ผ - -### โœ โšซ๏ธ - -* โœ ๐Ÿ“ `main.py` โฎ๏ธ: - -```Python -from typing import Union - -from fastapi import FastAPI - -app = FastAPI() - - -@app.get("/") -def read_root(): - return {"Hello": "World"} - - -@app.get("/items/{item_id}") -def read_item(item_id: int, q: Union[str, None] = None): - return {"item_id": item_id, "q": q} -``` - -
-โš–๏ธ โš™๏ธ async def... - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“Ÿ โš™๏ธ `async` / `await`, โš™๏ธ `async def`: - -```Python hl_lines="9 14" -from typing import Union - -from fastapi import FastAPI - -app = FastAPI() - - -@app.get("/") -async def read_root(): - return {"Hello": "World"} - - -@app.get("/items/{item_id}") -async def read_item(item_id: int, q: Union[str, None] = None): - return {"item_id": item_id, "q": q} -``` - -**๐Ÿ—’**: - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ญ, โœ… _"๐Ÿƒ โ“" _ ๐Ÿ“„ ๐Ÿ”ƒ `async` & `await` ๐Ÿฉบ. - -
- -### ๐Ÿƒ โšซ๏ธ - -๐Ÿƒ ๐Ÿ’ฝ โฎ๏ธ: - -
- -```console -$ uvicorn main:app --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -INFO: Started reloader process [28720] -INFO: Started server process [28722] -INFO: Waiting for application startup. -INFO: Application startup complete. -``` - -
- -
-๐Ÿ”ƒ ๐Ÿ“‹ uvicorn main:app --reload... - -๐Ÿ“‹ `uvicorn main:app` ๐Ÿ”—: - -* `main`: ๐Ÿ“ `main.py` (๐Ÿ "๐Ÿ•น"). -* `app`: ๐ŸŽš โœ ๐Ÿ”˜ `main.py` โฎ๏ธ โธ `app = FastAPI()`. -* `--reload`: โš’ ๐Ÿ’ฝ โ โฎ๏ธ ๐Ÿ“Ÿ ๐Ÿ”€. ๐Ÿ•ด ๐Ÿ‘‰ ๐Ÿ› ๏ธ. - -
- -### โœ… โšซ๏ธ - -๐Ÿ“‚ ๐Ÿ‘† ๐Ÿ–ฅ http://127.0.0.1:8000/items/5?q=somequery. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŽป ๐Ÿ“จ: - -```JSON -{"item_id": 5, "q": "somequery"} -``` - -๐Ÿ‘† โช โœ ๐Ÿ› ๏ธ ๐Ÿ‘ˆ: - -* ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ _โžก_ `/` & `/items/{item_id}`. -* ๐Ÿ‘ฏโ€โ™‚๏ธ _โžก_ โœŠ `GET` ๐Ÿ› ๏ธ (๐Ÿ’ญ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” _๐Ÿ‘ฉโ€๐Ÿ”ฌ_). -* _โžก_ `/items/{item_id}` โœ”๏ธ _โžก ๐Ÿ”ข_ `item_id` ๐Ÿ‘ˆ ๐Ÿ”œ `int`. -* _โžก_ `/items/{item_id}` โœ”๏ธ ๐Ÿ“ฆ `str` _๐Ÿ”ข = `q`. - -### ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿฉบ - -๐Ÿ”œ ๐Ÿšถ http://127.0.0.1:8000/docs. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿง ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿงพ (๐Ÿšš ๐Ÿฆ ๐ŸŽš): - -![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) - -### ๐ŸŽ› ๐Ÿ› ๏ธ ๐Ÿฉบ - -& ๐Ÿ”œ, ๐Ÿšถ http://127.0.0.1:8000/redoc. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŽ› ๐Ÿง ๐Ÿงพ (๐Ÿšš ๐Ÿ“„): - -![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) - -## ๐Ÿ–ผ โ™ป - -๐Ÿ”œ ๐Ÿ”€ ๐Ÿ“ `main.py` ๐Ÿ“จ ๐Ÿ’ช โšช๏ธโžก๏ธ `PUT` ๐Ÿ“จ. - -๐Ÿ“ฃ ๐Ÿ’ช โš™๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž, ๐Ÿ‘ Pydantic. - -```Python hl_lines="4 9-12 25-27" -from typing import Union - -from fastapi import FastAPI -from pydantic import BaseModel - -app = FastAPI() - - -class Item(BaseModel): - name: str - price: float - is_offer: Union[bool, None] = None - - -@app.get("/") -def read_root(): - return {"Hello": "World"} - - -@app.get("/items/{item_id}") -def read_item(item_id: int, q: Union[str, None] = None): - return {"item_id": item_id, "q": q} - - -@app.put("/items/{item_id}") -def update_item(item_id: int, item: Item): - return {"item_name": item.name, "item_id": item_id} -``` - -๐Ÿ’ฝ ๐Ÿ”œ ๐Ÿ”ƒ ๐Ÿ” (โ†ฉ๏ธ ๐Ÿ‘† ๐Ÿšฎ `--reload` `uvicorn` ๐Ÿ“‹ ๐Ÿ”›). - -### ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿฉบ โ™ป - -๐Ÿ”œ ๐Ÿšถ http://127.0.0.1:8000/docs. - -* ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿงพ ๐Ÿ”œ ๐Ÿ” โ„น, ๐Ÿ”Œ ๐Ÿ†• ๐Ÿ’ช: - -![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) - -* ๐Ÿ–Š ๐Ÿ”› ๐Ÿ”ผ "๐Ÿ”„ โšซ๏ธ ๐Ÿ‘…", โšซ๏ธ โœ” ๐Ÿ‘† ๐Ÿฅง ๐Ÿ”ข & ๐Ÿ”— ๐Ÿ”— โฎ๏ธ ๐Ÿ› ๏ธ: - -![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png) - -* โคด๏ธ ๐Ÿ–Š ๐Ÿ”› "๐Ÿ› ๏ธ" ๐Ÿ”ผ, ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ, ๐Ÿ“จ ๐Ÿ”ข, ๐Ÿคš ๐Ÿ & ๐ŸŽฆ ๐Ÿ‘ซ ๐Ÿ”› ๐Ÿ–ฅ: - -![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png) - -### ๐ŸŽ› ๐Ÿ› ๏ธ ๐Ÿฉบ โ™ป - -& ๐Ÿ”œ, ๐Ÿšถ http://127.0.0.1:8000/redoc. - -* ๐ŸŽ› ๐Ÿงพ ๐Ÿ”œ ๐ŸŽจ ๐Ÿ†• ๐Ÿ”ข ๐Ÿ”ข & ๐Ÿ’ช: - -![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) - -### ๐ŸŒƒ - -๐Ÿ“„, ๐Ÿ‘† ๐Ÿ“ฃ **๐Ÿ•** ๐Ÿ†Ž ๐Ÿ”ข, ๐Ÿ’ช, โ™’๏ธ. ๐Ÿ”ข ๐Ÿ”ข. - -๐Ÿ‘† ๐Ÿ‘ˆ โฎ๏ธ ๐Ÿฉ ๐Ÿ› ๐Ÿ ๐Ÿ†Ž. - -๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿ’ก ๐Ÿ†• โ•, ๐Ÿ‘ฉโ€๐Ÿ”ฌ โš–๏ธ ๐ŸŽ“ ๐ŸŽฏ ๐Ÿ—ƒ, โ™’๏ธ. - -๐Ÿฉ **๐Ÿ 3๏ธโƒฃ.7๏ธโƒฃ โž•**. - -๐Ÿ–ผ, `int`: - -```Python -item_id: int -``` - -โš–๏ธ ๐ŸŒ– ๐Ÿ— `Item` ๐Ÿท: - -```Python -item: Item -``` - -...& โฎ๏ธ ๐Ÿ‘ˆ ๐Ÿ‘ ๐Ÿ“„ ๐Ÿ‘† ๐Ÿคš: - -* ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ, ๐Ÿ”Œ: - * ๐Ÿ› ๏ธ. - * ๐Ÿ†Ž โœ…. -* ๐Ÿ”ฌ ๐Ÿ’ฝ: - * ๐Ÿง & ๐Ÿ†‘ โŒ ๐Ÿ•โ” ๐Ÿ“Š โŒ. - * ๐Ÿ”ฌ ๐Ÿ™‡ ๐Ÿฆ ๐ŸŽป ๐ŸŽš. -* ๐Ÿ› ๏ธ ๐Ÿ”ข ๐Ÿ’ฝ: ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ ๐Ÿ•ธ ๐Ÿ ๐Ÿ’ฝ & ๐Ÿ†Ž. ๐Ÿ‘‚ โšช๏ธโžก๏ธ: - * ๐ŸŽป. - * โžก ๐Ÿ”ข. - * ๐Ÿ”ข ๐Ÿ”ข. - * ๐Ÿช. - * ๐ŸŽš. - * ๐Ÿ“จ. - * ๐Ÿ“. -* ๐Ÿ› ๏ธ ๐Ÿ”ข ๐Ÿ“Š: ๐Ÿ—œ โšช๏ธโžก๏ธ ๐Ÿ ๐Ÿ’ฝ & ๐Ÿ†Ž ๐Ÿ•ธ ๐Ÿ’ฝ (๐ŸŽป): - * ๐Ÿ—œ ๐Ÿ ๐Ÿ†Ž (`str`, `int`, `float`, `bool`, `list`, โ™’๏ธ). - * `datetime` ๐ŸŽš. - * `UUID` ๐ŸŽš. - * ๐Ÿ’ฝ ๐Ÿท. - * ...& ๐Ÿ“š ๐ŸŒ–. -* ๐Ÿง ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿงพ, ๐Ÿ”Œ 2๏ธโƒฃ ๐ŸŽ› ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข: - * ๐Ÿฆ ๐ŸŽš. - * ๐Ÿ“„. - ---- - -๐Ÿ‘Ÿ ๐Ÿ”™ โฎ๏ธ ๐Ÿ“Ÿ ๐Ÿ–ผ, **FastAPI** ๐Ÿ”œ: - -* โœ” ๐Ÿ‘ˆ ๐Ÿ“ค `item_id` โžก `GET` & `PUT` ๐Ÿ“จ. -* โœ” ๐Ÿ‘ˆ `item_id` ๐Ÿ†Ž `int` `GET` & `PUT` ๐Ÿ“จ. - * ๐Ÿšฅ โšซ๏ธ ๐Ÿšซ, ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿ‘€ โš , ๐Ÿ†‘ โŒ. -* โœ… ๐Ÿšฅ ๐Ÿ“ค ๐Ÿ“ฆ ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ“› `q` ( `http://127.0.0.1:8000/items/foo?q=somequery`) `GET` ๐Ÿ“จ. - * `q` ๐Ÿ”ข ๐Ÿ“ฃ โฎ๏ธ `= None`, โšซ๏ธ ๐Ÿ“ฆ. - * ๐Ÿต `None` โšซ๏ธ ๐Ÿ”œ ๐Ÿšš (๐Ÿ’ช ๐Ÿ’ผ โฎ๏ธ `PUT`). -* `PUT` ๐Ÿ“จ `/items/{item_id}`, โœ ๐Ÿ’ช ๐ŸŽป: - * โœ… ๐Ÿ‘ˆ โšซ๏ธ โœ”๏ธ โœ” ๐Ÿ”ข `name` ๐Ÿ‘ˆ ๐Ÿ”œ `str`. - * โœ… ๐Ÿ‘ˆ โšซ๏ธ โœ”๏ธ โœ” ๐Ÿ”ข `price` ๐Ÿ‘ˆ โœ”๏ธ `float`. - * โœ… ๐Ÿ‘ˆ โšซ๏ธ โœ”๏ธ ๐Ÿ“ฆ ๐Ÿ”ข `is_offer`, ๐Ÿ‘ˆ ๐Ÿ”œ `bool`, ๐Ÿšฅ ๐ŸŽ. - * ๐ŸŒ ๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ‘ท ๐Ÿ™‡ ๐Ÿฆ ๐ŸŽป ๐ŸŽš. -* ๐Ÿ—œ โšช๏ธโžก๏ธ & ๐ŸŽป ๐Ÿ”. -* ๐Ÿ“„ ๐ŸŒ โฎ๏ธ ๐Ÿ—„, ๐Ÿ‘ˆ ๐Ÿ’ช โš™๏ธ: - * ๐ŸŽ“ ๐Ÿงพ โš™๏ธ. - * ๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ โšก โš™๏ธ, ๐Ÿ“š ๐Ÿ‡ช๐Ÿ‡ธ. -* ๐Ÿšš 2๏ธโƒฃ ๐ŸŽ“ ๐Ÿงพ ๐Ÿ•ธ ๐Ÿ”ข ๐Ÿ”—. - ---- - -๐Ÿ‘ฅ ๐Ÿ–Œ ๐Ÿงฝ, โœ‹๏ธ ๐Ÿ‘† โช ๐Ÿคš ๐Ÿ’ญ โ” โšซ๏ธ ๐ŸŒ ๐Ÿ‘ท. - -๐Ÿ”„ ๐Ÿ”€ โธ โฎ๏ธ: - -```Python - return {"item_name": item.name, "item_id": item_id} -``` - -...โšช๏ธโžก๏ธ: - -```Python - ... "item_name": item.name ... -``` - -...: - -```Python - ... "item_price": item.price ... -``` - -...& ๐Ÿ‘€ โ” ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ”œ ๐Ÿš˜-๐Ÿ ๐Ÿ”ข & ๐Ÿ’ญ ๐Ÿ‘ซ ๐Ÿ†Ž: - -![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) - -๐ŸŒ… ๐Ÿ ๐Ÿ–ผ ๐Ÿ”Œ ๐ŸŒ… โš’, ๐Ÿ‘€ ๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ. - -**๐Ÿš˜ ๐Ÿšจ**: ๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ ๐Ÿ”Œ: - -* ๐Ÿ“„ **๐Ÿ”ข** โšช๏ธโžก๏ธ ๐ŸŽ ๐ŸŽ ๐Ÿฅ‰: **๐ŸŽš**, **๐Ÿช**, **๐Ÿ“จ ๐Ÿ‘** & **๐Ÿ“**. -* โ” โš’ **๐Ÿ”ฌ โš›** `maximum_length` โš–๏ธ `regex`. -* ๐Ÿ“ถ ๐Ÿ‹๏ธ & โฉ โš™๏ธ **๐Ÿ”— ๐Ÿ’‰** โš™๏ธ. -* ๐Ÿ’‚โ€โ™‚ & ๐Ÿค, โœ… ๐Ÿ•โ€๐Ÿฆบ **Oauth2๏ธโƒฃ** โฎ๏ธ **๐Ÿฅ™ ๐Ÿค** & **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ”ฐ** ๐Ÿ”. -* ๐ŸŒ… ๐Ÿง (โœ‹๏ธ ๐Ÿ˜จ โฉ) โš’ ๐Ÿ“ฃ **๐Ÿ™‡ ๐Ÿฆ ๐ŸŽป ๐Ÿท** (๐Ÿ‘ Pydantic). -* **๐Ÿ•น** ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ“ & ๐ŸŽ ๐Ÿ—ƒ. -* ๐Ÿ“š โž• โš’ (๐Ÿ‘ ๐Ÿ’ƒ): - * ** *๏ธโƒฃ ** - * ๐Ÿ“ถ โฉ ๐Ÿ’ฏ โš“๏ธ ๐Ÿ”› ๐Ÿ‡ธ๐Ÿ‡ฒ & `pytest` - * **โšœ** - * **๐Ÿช ๐ŸŽ‰** - * ...& ๐ŸŒ–. - -## ๐ŸŽญ - -๐Ÿ”ฌ ๐Ÿ‡ธ๐Ÿ‡ฒ ๐Ÿ“‡ ๐ŸŽฆ **FastAPI** ๐Ÿˆธ ๐Ÿƒโ€โ™‚ ๐Ÿ”ฝ Uvicorn 1๏ธโƒฃ โฉ ๐Ÿ ๐Ÿ› ๏ธ ๐Ÿ’ช, ๐Ÿ•ด ๐Ÿ”› ๐Ÿ’ƒ & Uvicorn ๐Ÿ‘ซ (โš™๏ธ ๐Ÿ”˜ FastAPI). (*) - -๐Ÿค” ๐ŸŒ– ๐Ÿ”ƒ โšซ๏ธ, ๐Ÿ‘€ ๐Ÿ“„ ๐Ÿ“‡. - -## ๐Ÿ“ฆ ๐Ÿ”— - -โš™๏ธ Pydantic: - -* email-validator - ๐Ÿ“ง ๐Ÿ”ฌ. - -โš™๏ธ ๐Ÿ’ƒ: - -* httpx - โœ” ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ `TestClient`. -* jinja2 - โœ” ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ ๐Ÿ”ข ๐Ÿ“„ ๐Ÿ“ณ. -* python-multipart - โœ” ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ“จ "โœ", โฎ๏ธ `request.form()`. -* itsdangerous - โœ” `SessionMiddleware` ๐Ÿ•โ€๐Ÿฆบ. -* pyyaml - โœ” ๐Ÿ’ƒ `SchemaGenerator` ๐Ÿ•โ€๐Ÿฆบ (๐Ÿ‘† ๐ŸŽฒ ๐Ÿšซ ๐Ÿ’ช โšซ๏ธ โฎ๏ธ FastAPI). - -โš™๏ธ FastAPI / ๐Ÿ’ƒ: - -* uvicorn - ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿ“ & ๐Ÿฆ ๐Ÿ‘† ๐Ÿˆธ. -* orjson - โœ” ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ `ORJSONResponse`. -* ujson - โœ” ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ `UJSONResponse`. - -๐Ÿ‘† ๐Ÿ’ช โŽ ๐ŸŒ ๐Ÿ‘ซ โฎ๏ธ `pip install "fastapi[all]"`. - -## ๐Ÿ›‚ - -๐Ÿ‘‰ ๐Ÿ— ยฎ ๐Ÿ”ฝ โš– ๐Ÿ‡ฉ๐Ÿ‡ช ๐Ÿ›‚. diff --git a/docs/em/docs/project-generation.md b/docs/em/docs/project-generation.md deleted file mode 100644 index ef6a21821..000000000 --- a/docs/em/docs/project-generation.md +++ /dev/null @@ -1,84 +0,0 @@ -# ๐Ÿ— โšก - ๐Ÿ“„ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ— ๐Ÿš‚ ๐Ÿคš โ–ถ๏ธ, โšซ๏ธ ๐Ÿ”Œ ๐Ÿ“š โ–ถ๏ธ โš’ ๐Ÿ†™, ๐Ÿ’‚โ€โ™‚, ๐Ÿ’ฝ & ๐Ÿ› ๏ธ ๐Ÿ”— โช โŒ› ๐Ÿ‘†. - -๐Ÿ— ๐Ÿš‚ ๐Ÿ”œ ๐Ÿ•ง โœ”๏ธ ๐Ÿ“ถ ๐Ÿ™ƒ ๐Ÿ–ฅ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ”œ โ„น & ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ’ช, โœ‹๏ธ โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘ โ–ถ๏ธ โ˜ ๐Ÿ‘† ๐Ÿ—. - -## ๐ŸŒ• ๐Ÿ“š FastAPI โœณ - -๐Ÿ“‚: https://github.com/tiangolo/full-stack-fastapi-postgresql - -### ๐ŸŒ• ๐Ÿ“š FastAPI โœณ - โš’ - -* ๐ŸŒ• **โ˜** ๐Ÿ› ๏ธ (โ˜ ๐Ÿงข). -* โ˜ ๐Ÿ ๐Ÿ“ณ ๐Ÿ› ๏ธ. -* **โ˜ โœ** ๐Ÿ› ๏ธ & ๐Ÿ› ๏ธ ๐Ÿ‡ง๐Ÿ‡ฟ ๐Ÿ› ๏ธ. -* **๐Ÿญ ๐Ÿ”œ** ๐Ÿ ๐Ÿ•ธ ๐Ÿ’ฝ โš™๏ธ Uvicorn & ๐Ÿ. -* ๐Ÿ **FastAPI** ๐Ÿ‘ฉโ€๐Ÿ’ป: - * **โฉ**: ๐Ÿ“ถ โ†• ๐ŸŽญ, ๐Ÿ”› ๐Ÿ‡ท๐Ÿ‡ช โฎ๏ธ **โœณ** & **๐Ÿšถ** (๐Ÿ‘ ๐Ÿ’ƒ & Pydantic). - * **๐Ÿ‹๏ธ**: ๐Ÿ‘‘ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ. ๐Ÿ› ๏ธ ๐ŸŒ. ๐ŸŒ˜ ๐Ÿ•ฐ ๐Ÿ› ๏ธ. - * **โฉ**: ๐Ÿ”ง โฉ โš™๏ธ & ๐Ÿ’ก. ๐ŸŒ˜ ๐Ÿ•ฐ ๐Ÿ‘‚ ๐Ÿฉบ. - * **๐Ÿ“**: ๐Ÿ“‰ ๐Ÿ“Ÿ โŽ. ๐Ÿ’— โš’ โšช๏ธโžก๏ธ ๐Ÿ”  ๐Ÿ”ข ๐Ÿ“„. - * **๐Ÿ‹๏ธ**: ๐Ÿคš ๐Ÿญ-๐Ÿ”œ ๐Ÿ“Ÿ. โฎ๏ธ ๐Ÿง ๐ŸŽ“ ๐Ÿงพ. - * **๐Ÿฉ-โš“๏ธ**: โš“๏ธ ๐Ÿ”› (& ๐Ÿ• ๐Ÿ”— โฎ๏ธ) ๐Ÿ“‚ ๐Ÿฉ ๐Ÿ”—: ๐Ÿ—„ & ๐ŸŽป ๐Ÿ”—. - * **๐Ÿ“š ๐ŸŽ โš’** ๐Ÿ”Œ ๐Ÿง ๐Ÿ”ฌ, ๐Ÿ› ๏ธ, ๐ŸŽ“ ๐Ÿงพ, ๐Ÿค โฎ๏ธ Oauth2๏ธโƒฃ ๐Ÿฅ™ ๐Ÿค, โ™’๏ธ. -* **๐Ÿ” ๐Ÿ”** ๐Ÿ” ๐Ÿ”ข. -* **๐Ÿฅ™ ๐Ÿค** ๐Ÿค. -* **๐Ÿ‡ธ๐Ÿ‡ฒ** ๐Ÿท (๐Ÿ”ฌ ๐Ÿบ โ†”, ๐Ÿ‘ซ ๐Ÿ’ช โš™๏ธ โฎ๏ธ ๐Ÿฅ’ ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ”—). -* ๐Ÿ”ฐ โ–ถ๏ธ ๐Ÿท ๐Ÿ‘ฉโ€๐Ÿ’ป (๐Ÿ”€ & โŽ ๐Ÿ‘† ๐Ÿ’ช). -* **โš—** ๐Ÿ› ๏ธ. -* **โšœ** (โœ–๏ธ ๐Ÿ‡จ๐Ÿ‡ณ โ„น ๐Ÿค). -* **๐Ÿฅ’** ๐Ÿ‘จโ€๐Ÿญ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ—„ & โš™๏ธ ๐Ÿท & ๐Ÿ“Ÿ โšช๏ธโžก๏ธ ๐ŸŽ‚ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ•. -* ๐ŸŽ‚ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ฏ โš“๏ธ ๐Ÿ”› **โœณ**, ๐Ÿ› ๏ธ โฎ๏ธ โ˜, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ฏ ๐ŸŒ• ๐Ÿ› ๏ธ ๐Ÿ”—, ๐Ÿ”ฌ ๐Ÿ”› ๐Ÿ’ฝ. โšซ๏ธ ๐Ÿƒ โ˜, โšซ๏ธ ๐Ÿ’ช ๐Ÿ— ๐Ÿ†• ๐Ÿ’ฝ ๐Ÿช โšช๏ธโžก๏ธ ๐Ÿ–Œ ๐Ÿ”  ๐Ÿ•ฐ (๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โœณ, โœณ, โœณ, โš–๏ธ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ’š, & ๐Ÿ’ฏ ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿ‘ท). -* โฉ ๐Ÿ ๐Ÿ› ๏ธ โฎ๏ธ **๐Ÿ“‚ ๐Ÿ’พ** ๐Ÿ›ฐ โš–๏ธ-โ˜ ๐Ÿ› ๏ธ โฎ๏ธ โ†” ๐Ÿ’– โš› โš— โš–๏ธ ๐ŸŽ™ ๐ŸŽ™ ๐Ÿ“Ÿ ๐Ÿ“‚. -* **๐ŸŽฆ** ๐Ÿ•ธ: - * ๐Ÿ— โฎ๏ธ ๐ŸŽฆ โœณ. - * **๐Ÿฅ™ ๐Ÿค** ๐Ÿšš. - * ๐Ÿ’ณ ๐ŸŽ‘. - * โฎ๏ธ ๐Ÿ’ณ, ๐Ÿ‘‘ ๐Ÿ•น ๐ŸŽ‘. - * ๐Ÿ‘‘ ๐Ÿ•น โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ— & ๐Ÿ“•. - * ๐Ÿ‘ค ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“•. - * **๐Ÿ‡ท๐Ÿ‡ช**. - * **๐ŸŽฆ-๐Ÿ“ป**. - * **Vuetify** ๐ŸŒน ๐Ÿงฝ ๐Ÿ”ง ๐Ÿฆฒ. - * **๐Ÿ“•**. - * โ˜ ๐Ÿ’ฝ โš“๏ธ ๐Ÿ”› **๐Ÿ‘Œ** (๐Ÿ“ถ ๐Ÿคพ ๐ŸŽ† โฎ๏ธ ๐ŸŽฆ-๐Ÿ“ป). - * โ˜ ๐Ÿ‘-โ–ถ๏ธ ๐Ÿ—, ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ช ๐Ÿ–Š โš–๏ธ ๐Ÿ’• โœ ๐Ÿ“Ÿ. - * ๐Ÿ•ธ ๐Ÿ’ฏ ๐Ÿƒ ๐Ÿ— ๐Ÿ•ฐ (๐Ÿ’ช ๐Ÿ”• ๐Ÿ’โ€โ™‚๏ธ). - * โš’ ๐Ÿ”ง ๐Ÿ’ช, โšซ๏ธ ๐Ÿ‘ท ๐Ÿ‘… ๐Ÿ“ฆ, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค-๐Ÿ— โฎ๏ธ ๐ŸŽฆ โœณ โš–๏ธ โœ โšซ๏ธ ๐Ÿ‘† ๐Ÿ’ช, & ๐Ÿค-โš™๏ธ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ’š. -* ** *๏ธโƒฃ ** โœณ ๐Ÿ’ฝ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”€ โšซ๏ธ โš™๏ธ ๐Ÿ“ & โœณ ๐Ÿ’ช. -* **๐Ÿฅ€** ๐Ÿฅ’ ๐Ÿ‘จโ€๐Ÿญ โš–. -* ๐Ÿ“ โš– ๐Ÿ–– ๐Ÿ•ธ & ๐Ÿ‘ฉโ€๐Ÿ’ป โฎ๏ธ **Traefik**, ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ”ฝ ๐ŸŽ ๐Ÿ†”, ๐Ÿ‘ฝ โžก, โœ‹๏ธ ๐Ÿฆ ๐ŸŽ ๐Ÿ“ฆ. -* Traefik ๐Ÿ› ๏ธ, โœ… โžก๏ธ ๐Ÿ—œ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”** ๐Ÿ“„ ๐Ÿง โšก. -* โœณ **๐Ÿ†‘** (๐Ÿ” ๐Ÿ› ๏ธ), ๐Ÿ”Œ ๐Ÿ•ธ & ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ฌ. - -## ๐ŸŒ• ๐Ÿ“š FastAPI ๐Ÿ—„ - -๐Ÿ“‚: https://github.com/tiangolo/full-stack-fastapi-couchbase - -๐Ÿ‘ถ ๐Ÿ‘ถ **โš ** ๐Ÿ‘ถ ๐Ÿ‘ถ - -๐Ÿšฅ ๐Ÿ‘† โ–ถ๏ธ ๐Ÿ†• ๐Ÿ— โšช๏ธโžก๏ธ ๐Ÿ–Œ, โœ… ๐ŸŽ› ๐Ÿ“ฅ. - -๐Ÿ–ผ, ๐Ÿ— ๐Ÿš‚ ๐ŸŒ• ๐Ÿ“š FastAPI โœณ ๐Ÿ’ช ๐Ÿ‘ ๐ŸŽ›, โšซ๏ธ ๐ŸŽฏ ๐Ÿšง & โš™๏ธ. & โšซ๏ธ ๐Ÿ”Œ ๐ŸŒ ๐Ÿ†• โš’ & ๐Ÿ“ˆ. - -๐Ÿ‘† ๐Ÿ†“ โš™๏ธ ๐Ÿ—„-โš“๏ธ ๐Ÿš‚ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š, โšซ๏ธ ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ‘ท ๐Ÿ‘Œ, & ๐Ÿšฅ ๐Ÿ‘† โช โœ”๏ธ ๐Ÿ— ๐Ÿ— โฎ๏ธ โšซ๏ธ ๐Ÿ‘ˆ ๐Ÿ‘Œ ๐Ÿ‘ (& ๐Ÿ‘† ๐ŸŽฒ โช โ„น โšซ๏ธ โ™ฃ ๐Ÿ‘† ๐Ÿ’ช). - -๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ… ๐Ÿ”ƒ โšซ๏ธ ๐Ÿฉบ ๐Ÿฆ. - -## ๐ŸŒ• ๐Ÿ“š FastAPI โœณ - -...๐Ÿ’ช ๐Ÿ‘Ÿ โช, โš“๏ธ ๐Ÿ”› ๐Ÿ‘‡ ๐Ÿ•ฐ ๐Ÿšš & ๐ŸŽ โš–. ๐Ÿ‘ถ ๐Ÿ‘ถ - -## ๐ŸŽฐ ๐Ÿซ ๐Ÿท โฎ๏ธ ๐ŸŒˆ & FastAPI - -๐Ÿ“‚: https://github.com/microsoft/cookiecutter-spacy-fastapi - -### ๐ŸŽฐ ๐Ÿซ ๐Ÿท โฎ๏ธ ๐ŸŒˆ & FastAPI - โš’ - -* **๐ŸŒˆ** ๐Ÿ•œ ๐Ÿท ๐Ÿ› ๏ธ. -* **โ˜ ๐Ÿง  ๐Ÿ”Ž** ๐Ÿ“จ ๐Ÿ“ ๐Ÿ—. -* **๐Ÿญ ๐Ÿ”œ** ๐Ÿ ๐Ÿ•ธ ๐Ÿ’ฝ โš™๏ธ Uvicorn & ๐Ÿ. -* **โ˜ ๐Ÿ‘ฉโ€๐Ÿ’ป** Kubernetes (๐Ÿฆฒ) ๐Ÿ†‘/๐Ÿ’ฟ ๐Ÿ› ๏ธ ๐Ÿ—. -* **๐Ÿคธโ€โ™‚** ๐Ÿ’ช โš’ 1๏ธโƒฃ ๐ŸŒˆ ๐Ÿ— ๐Ÿ‡ช๐Ÿ‡ธ โฎ๏ธ ๐Ÿ— ๐Ÿ–ฅ. -* **๐Ÿ’ช ๐Ÿง** ๐ŸŽ ๐Ÿท ๐Ÿ› ๏ธ (Pytorch, ๐Ÿ‡ธ๐Ÿ‡ฒ), ๐Ÿšซ ๐ŸŒˆ. diff --git a/docs/em/docs/python-types.md b/docs/em/docs/python-types.md deleted file mode 100644 index d2af23bb9..000000000 --- a/docs/em/docs/python-types.md +++ /dev/null @@ -1,542 +0,0 @@ -# ๐Ÿ ๐Ÿ†Ž ๐ŸŽถ - -๐Ÿ โœ”๏ธ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ“ฆ "๐Ÿ†Ž ๐Ÿ”‘". - -๐Ÿ‘ซ **"๐Ÿ†Ž ๐Ÿ”‘"** ๐ŸŽ โ• ๐Ÿ‘ˆ โœ” ๐Ÿ“ฃ ๐Ÿ†Ž ๐Ÿ”ข. - -๐Ÿ“ฃ ๐Ÿ†Ž ๐Ÿ‘† ๐Ÿ”ข, ๐Ÿ‘จโ€๐ŸŽจ & ๐Ÿงฐ ๐Ÿ’ช ๐Ÿค ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ•โ€๐Ÿฆบ. - -๐Ÿ‘‰ **โฉ ๐Ÿ”ฐ / โ†—๏ธ** ๐Ÿ”ƒ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘. โšซ๏ธ ๐Ÿ“” ๐Ÿ•ด ๐Ÿ’ฏ ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ซ โฎ๏ธ **FastAPI**... โ” ๐Ÿค™ ๐Ÿ“ถ ๐Ÿฅ. - -**FastAPI** ๐ŸŒ โš“๏ธ ๐Ÿ”› ๐Ÿ‘ซ ๐Ÿ†Ž ๐Ÿ”‘, ๐Ÿ‘ซ ๐Ÿค โšซ๏ธ ๐Ÿ“š ๐Ÿ“ˆ & ๐Ÿ’ฐ. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ™… โš™๏ธ **FastAPI**, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ฐ โšช๏ธโžก๏ธ ๐Ÿซ ๐Ÿ– ๐Ÿ”ƒ ๐Ÿ‘ซ. - -/// note - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ ๐Ÿ•ด, & ๐Ÿ‘† โช ๐Ÿ’ญ ๐ŸŒ ๐Ÿ”ƒ ๐Ÿ†Ž ๐Ÿ”‘, ๐Ÿšถ โญ ๐Ÿ“ƒ. - -/// - -## ๐ŸŽฏ - -โžก๏ธ โ–ถ๏ธ โฎ๏ธ ๐Ÿ™… ๐Ÿ–ผ: - -```Python -{!../../docs_src/python_types/tutorial001.py!} -``` - -๐Ÿค™ ๐Ÿ‘‰ ๐Ÿ“‹ ๐Ÿ”ข: - -``` -John Doe -``` - -๐Ÿ”ข ๐Ÿ”จ ๐Ÿ“„: - -* โœŠ `first_name` & `last_name`. -* ๐Ÿ—œ ๐Ÿฅ‡ ๐Ÿ”ค ๐Ÿ”  1๏ธโƒฃ โ†– ๐Ÿ’ผ โฎ๏ธ `title()`. -* ๐Ÿ”ข ๐Ÿ‘ซ โฎ๏ธ ๐Ÿš€ ๐Ÿ–•. - -```Python hl_lines="2" -{!../../docs_src/python_types/tutorial001.py!} -``` - -### โœ โšซ๏ธ - -โšซ๏ธ ๐Ÿ“ถ ๐Ÿ™… ๐Ÿ“‹. - -โœ‹๏ธ ๐Ÿ”œ ๐ŸŒˆ ๐Ÿ‘ˆ ๐Ÿ‘† โœ โšซ๏ธ โšช๏ธโžก๏ธ ๐Ÿ–Œ. - -โ˜ ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ โ–ถ๏ธ ๐Ÿ”‘ ๐Ÿ”ข, ๐Ÿ‘† โœ”๏ธ ๐Ÿ”ข ๐Ÿ”œ... - -โœ‹๏ธ โคด๏ธ ๐Ÿ‘† โœ”๏ธ ๐Ÿค™ "๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ‘ˆ ๐Ÿ—œ ๐Ÿฅ‡ ๐Ÿ”ค โ†– ๐Ÿ’ผ". - -โšซ๏ธ `upper`โ“ โšซ๏ธ `uppercase`โ“ `first_uppercase`โ“ `capitalize`โ“ - -โคด๏ธ, ๐Ÿ‘† ๐Ÿ”„ โฎ๏ธ ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ, ๐Ÿ‘จโ€๐ŸŽจ โœ. - -๐Ÿ‘† ๐Ÿ†Ž ๐Ÿฅ‡ ๐Ÿ”ข ๐Ÿ”ข, `first_name`, โคด๏ธ โฃ (`.`) & โคด๏ธ ๐ŸŽฏ `Ctrl+Space` โฒ ๐Ÿ› ๏ธ. - -โœ‹๏ธ, ๐Ÿ˜ž, ๐Ÿ‘† ๐Ÿคš ๐Ÿ•ณ โš : - - - -### ๐Ÿšฎ ๐Ÿ†Ž - -โžก๏ธ ๐Ÿ”€ ๐Ÿ‘ โธ โšช๏ธโžก๏ธ โฎ๏ธ โฌ. - -๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ”€ โšซ๏ธโ” ๐Ÿ‘‰ ๐Ÿงฌ, ๐Ÿ”ข ๐Ÿ”ข, โšช๏ธโžก๏ธ: - -```Python - first_name, last_name -``` - -: - -```Python - first_name: str, last_name: str -``` - -๐Ÿ‘ˆ โšซ๏ธ. - -๐Ÿ‘ˆ "๐Ÿ†Ž ๐Ÿ”‘": - -```Python hl_lines="1" -{!../../docs_src/python_types/tutorial002.py!} -``` - -๐Ÿ‘ˆ ๐Ÿšซ ๐ŸŽ ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ’ฒ ๐Ÿ’– ๐Ÿ”œ โฎ๏ธ: - -```Python - first_name="john", last_name="doe" -``` - -โšซ๏ธ ๐ŸŽ ๐Ÿ‘œ. - -๐Ÿ‘ฅ โš™๏ธ โค (`:`), ๐Ÿšซ ๐ŸŒ“ (`=`). - -& โŽ ๐Ÿ†Ž ๐Ÿ”‘ ๐Ÿ›Ž ๐Ÿšซ ๐Ÿ”€ โšซ๏ธโ” ๐Ÿ”จ โšช๏ธโžก๏ธ โšซ๏ธโ” ๐Ÿ”œ ๐Ÿ”จ ๐Ÿต ๐Ÿ‘ซ. - -โœ‹๏ธ ๐Ÿ”œ, ๐ŸŒˆ ๐Ÿ‘† ๐Ÿ”„ ๐Ÿ–• ๐Ÿ— ๐Ÿ‘ˆ ๐Ÿ”ข, โœ‹๏ธ โฎ๏ธ ๐Ÿ†Ž ๐Ÿ”‘. - -๐ŸŽ โ˜, ๐Ÿ‘† ๐Ÿ”„ โฒ ๐Ÿ“‹ โฎ๏ธ `Ctrl+Space` & ๐Ÿ‘† ๐Ÿ‘€: - - - -โฎ๏ธ ๐Ÿ‘ˆ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“œ, ๐Ÿ‘€ ๐ŸŽ›, โญ ๐Ÿ‘† ๐Ÿ”Ž 1๏ธโƒฃ ๐Ÿ‘ˆ "๐Ÿ’ ๐Ÿ””": - - - -## ๐ŸŒ… ๐ŸŽฏ - -โœ… ๐Ÿ‘‰ ๐Ÿ”ข, โšซ๏ธ โช โœ”๏ธ ๐Ÿ†Ž ๐Ÿ”‘: - -```Python hl_lines="1" -{!../../docs_src/python_types/tutorial003.py!} -``` - -โ†ฉ๏ธ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ’ญ ๐Ÿ†Ž ๐Ÿ”ข, ๐Ÿ‘† ๐Ÿšซ ๐Ÿ•ด ๐Ÿคš ๐Ÿ› ๏ธ, ๐Ÿ‘† ๐Ÿคš โŒ โœ…: - - - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿ”ง โšซ๏ธ, ๐Ÿ—œ `age` ๐ŸŽป โฎ๏ธ `str(age)`: - -```Python hl_lines="2" -{!../../docs_src/python_types/tutorial004.py!} -``` - -## ๐Ÿ“ฃ ๐Ÿ†Ž - -๐Ÿ‘† ๐Ÿ‘€ ๐Ÿ‘‘ ๐Ÿฅ‰ ๐Ÿ“ฃ ๐Ÿ†Ž ๐Ÿ”‘. ๐Ÿ”ข ๐Ÿ”ข. - -๐Ÿ‘‰ ๐Ÿ‘‘ ๐Ÿฅ‰ ๐Ÿ‘† ๐Ÿ”œ โš™๏ธ ๐Ÿ‘ซ โฎ๏ธ **FastAPI**. - -### ๐Ÿ™… ๐Ÿ†Ž - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž, ๐Ÿšซ ๐Ÿ•ด `str`. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ, ๐Ÿ–ผ: - -* `int` -* `float` -* `bool` -* `bytes` - -```Python hl_lines="1" -{!../../docs_src/python_types/tutorial005.py!} -``` - -### ๐Ÿ’Š ๐Ÿ†Ž โฎ๏ธ ๐Ÿ†Ž ๐Ÿ”ข - -๐Ÿ“ค ๐Ÿ“Š ๐Ÿ“Š ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ”Œ ๐ŸŽ ๐Ÿ’ฒ, ๐Ÿ’– `dict`, `list`, `set` & `tuple`. & ๐Ÿ”— ๐Ÿ’ฒ ๐Ÿ’ช โœ”๏ธ ๐Ÿ‘ซ ๐Ÿ‘ ๐Ÿ†Ž ๐Ÿ’โ€โ™‚๏ธ. - -๐Ÿ‘‰ ๐Ÿ†Ž ๐Ÿ‘ˆ โœ”๏ธ ๐Ÿ”— ๐Ÿ†Ž ๐Ÿค™ "**๐Ÿ’Š**" ๐Ÿ†Ž. & โšซ๏ธ ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ‘ซ, โฎ๏ธ ๐Ÿ‘ซ ๐Ÿ”— ๐Ÿ†Ž. - -๐Ÿ“ฃ ๐Ÿ‘ˆ ๐Ÿ†Ž & ๐Ÿ”— ๐Ÿ†Ž, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿ•น `typing`. โšซ๏ธ ๐Ÿ”€ ๐ŸŽฏ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ซ ๐Ÿ†Ž ๐Ÿ”‘. - -#### ๐Ÿ†• โฌ ๐Ÿ - -โ• โš™๏ธ `typing` **๐Ÿ”—** โฎ๏ธ ๐ŸŒ โฌ, โšช๏ธโžก๏ธ ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ โช ๐Ÿ•, โœ… ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ, ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ, โ™’๏ธ. - -๐Ÿ ๐Ÿง, **๐Ÿ†• โฌ** ๐Ÿ‘Ÿ โฎ๏ธ ๐Ÿ“‰ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘‰ ๐Ÿ†Ž โœ & ๐Ÿ“š ๐Ÿ’ผ ๐Ÿ‘† ๐Ÿ† ๐Ÿšซ ๐Ÿ’ช ๐Ÿ—„ & โš™๏ธ `typing` ๐Ÿ•น ๐Ÿ“ฃ ๐Ÿ†Ž โœ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช โš’ ๐ŸŒ– โฎ๏ธ โฌ ๐Ÿ ๐Ÿ‘† ๐Ÿ—, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช โœŠ ๐Ÿ“ˆ ๐Ÿ‘ˆ โž• ๐Ÿฆ. ๐Ÿ‘€ ๐Ÿ–ผ ๐Ÿ”›. - -#### ๐Ÿ“‡ - -๐Ÿ–ผ, โžก๏ธ ๐Ÿ”ฌ ๐Ÿ”ข `list` `str`. - -//// tab | ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”› - -โšช๏ธโžก๏ธ `typing`, ๐Ÿ—„ `List` (โฎ๏ธ ๐Ÿ”  `L`): - -```Python hl_lines="1" -{!> ../../docs_src/python_types/tutorial006.py!} -``` - -๐Ÿ“ฃ ๐Ÿ”ข, โฎ๏ธ ๐ŸŽ โค (`:`) โ•. - -๐Ÿ†Ž, ๐Ÿšฎ `List` ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ—„ โšช๏ธโžก๏ธ `typing`. - -๐Ÿ“‡ ๐Ÿ†Ž ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ”— ๐Ÿ†Ž, ๐Ÿ‘† ๐Ÿšฎ ๐Ÿ‘ซ โฌœ ๐Ÿ—œ: - -```Python hl_lines="4" -{!> ../../docs_src/python_types/tutorial006.py!} -``` - -//// - -//// tab | ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”› - -๐Ÿ“ฃ ๐Ÿ”ข, โฎ๏ธ ๐ŸŽ โค (`:`) โ•. - -๐Ÿ†Ž, ๐Ÿšฎ `list`. - -๐Ÿ“‡ ๐Ÿ†Ž ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ”— ๐Ÿ†Ž, ๐Ÿ‘† ๐Ÿšฎ ๐Ÿ‘ซ โฌœ ๐Ÿ—œ: - -```Python hl_lines="1" -{!> ../../docs_src/python_types/tutorial006_py39.py!} -``` - -//// - -/// info - -๐Ÿ‘ˆ ๐Ÿ”— ๐Ÿ†Ž โฌœ ๐Ÿ—œ ๐Ÿค™ "๐Ÿ†Ž ๐Ÿ”ข". - -๐Ÿ‘‰ ๐Ÿ’ผ, `str` ๐Ÿ†Ž ๐Ÿ”ข ๐Ÿšถโ€โ™€๏ธ `List` (โš–๏ธ `list` ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”›). - -/// - -๐Ÿ‘ˆ โ›“: "๐Ÿ”ข `items` `list`, & ๐Ÿ”  ๐Ÿฌ ๐Ÿ‘‰ ๐Ÿ“‡ `str`". - -/// tip - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ โš–๏ธ ๐Ÿ”›, ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿ—„ `List` โšช๏ธโžก๏ธ `typing`, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ ๐Ÿฅ” `list` ๐Ÿ†Ž โ†ฉ๏ธ. - -/// - -๐Ÿ”จ ๐Ÿ‘ˆ, ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ’ช ๐Ÿšš ๐Ÿ•โ€๐Ÿฆบ โช ๐Ÿญ ๐Ÿฌ โšช๏ธโžก๏ธ ๐Ÿ“‡: - - - -๐Ÿต ๐Ÿ†Ž, ๐Ÿ‘ˆ ๐ŸŒ– ๐Ÿ’ช ๐Ÿ†. - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ”ข `item` 1๏ธโƒฃ ๐Ÿ”ฃ ๐Ÿ“‡ `items`. - -& , ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ’ญ โšซ๏ธ `str`, & ๐Ÿšš ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ˆ. - -#### ๐Ÿ”ข & โš’ - -๐Ÿ‘† ๐Ÿ”œ ๐ŸŽ ๐Ÿ“ฃ `tuple`โ“‚ & `set`โ“‚: - -//// tab | ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”› - -```Python hl_lines="1 4" -{!> ../../docs_src/python_types/tutorial007.py!} -``` - -//// - -//// tab | ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”› - -```Python hl_lines="1" -{!> ../../docs_src/python_types/tutorial007_py39.py!} -``` - -//// - -๐Ÿ‘‰ โ›“: - -* ๐Ÿ”ข `items_t` `tuple` โฎ๏ธ 3๏ธโƒฃ ๐Ÿฌ, `int`, โž•1๏ธโƒฃ `int`, & `str`. -* ๐Ÿ”ข `items_s` `set`, & ๐Ÿ”  ๐Ÿšฎ ๐Ÿฌ ๐Ÿ†Ž `bytes`. - -#### #๏ธโƒฃ - -๐Ÿ”ฌ `dict`, ๐Ÿ‘† ๐Ÿšถโ€โ™€๏ธ 2๏ธโƒฃ ๐Ÿ†Ž ๐Ÿ”ข, ๐ŸŽ โ•. - -๐Ÿฅ‡ ๐Ÿ†Ž ๐Ÿ”ข ๐Ÿ”‘ `dict`. - -๐Ÿฅˆ ๐Ÿ†Ž ๐Ÿ”ข ๐Ÿ’ฒ `dict`: - -//// tab | ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”› - -```Python hl_lines="1 4" -{!> ../../docs_src/python_types/tutorial008.py!} -``` - -//// - -//// tab | ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”› - -```Python hl_lines="1" -{!> ../../docs_src/python_types/tutorial008_py39.py!} -``` - -//// - -๐Ÿ‘‰ โ›“: - -* ๐Ÿ”ข `prices` `dict`: - * ๐Ÿ”‘ ๐Ÿ‘‰ `dict` ๐Ÿ†Ž `str` (โžก๏ธ ๐Ÿ’ฌ, ๐Ÿ“› ๐Ÿ”  ๐Ÿฌ). - * ๐Ÿ’ฒ ๐Ÿ‘‰ `dict` ๐Ÿ†Ž `float` (โžก๏ธ ๐Ÿ’ฌ, ๐Ÿ”– ๐Ÿ”  ๐Ÿฌ). - -#### ๐Ÿ‡ช๐Ÿ‡บ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ’ช ๐Ÿ™† **๐Ÿ“š ๐Ÿ†Ž**, ๐Ÿ–ผ, `int` โš–๏ธ `str`. - -๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”› (โœ… ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ) ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Union` ๐Ÿ†Ž โšช๏ธโžก๏ธ `typing` & ๐Ÿšฎ ๐Ÿ”˜ โฌœ ๐Ÿ—œ ๐Ÿ’ช ๐Ÿ†Ž ๐Ÿšซ. - -๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ ๐Ÿ“ค **๐ŸŽ› โ•** ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ’ช ๐Ÿ†Ž ๐Ÿ‘ฝ โธ โธ (`|`). - -//// tab | ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”› - -```Python hl_lines="1 4" -{!> ../../docs_src/python_types/tutorial008b.py!} -``` - -//// - -//// tab | ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ & ๐Ÿ”› - -```Python hl_lines="1" -{!> ../../docs_src/python_types/tutorial008b_py310.py!} -``` - -//// - -๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ’ผ ๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ `item` ๐Ÿ’ช `int` โš–๏ธ `str`. - -#### ๐ŸŽฒ `None` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ‘ˆ ๐Ÿ’ฒ ๐Ÿ’ช โœ”๏ธ ๐Ÿ†Ž, ๐Ÿ’– `str`, โœ‹๏ธ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ’ช `None`. - -๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”› (โœ… ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ) ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ โšซ๏ธ ๐Ÿญ & โš™๏ธ `Optional` โšช๏ธโžก๏ธ `typing` ๐Ÿ•น. - -```Python hl_lines="1 4" -{!../../docs_src/python_types/tutorial009.py!} -``` - -โš™๏ธ `Optional[str]` โ†ฉ๏ธ `str` ๐Ÿ”œ โžก๏ธ ๐Ÿ‘จโ€๐ŸŽจ โ„น ๐Ÿ‘† ๐Ÿ” โŒ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค” ๐Ÿ‘ˆ ๐Ÿ’ฒ ๐Ÿ•ง `str`, ๐Ÿ•โ” โšซ๏ธ ๐Ÿ’ช ๐Ÿค™ `None` ๐Ÿ’โ€โ™‚๏ธ. - -`Optional[Something]` ๐Ÿค™ โŒจ `Union[Something, None]`, ๐Ÿ‘ซ ๐ŸŒ“. - -๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Something | None`: - -//// tab | ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”› - -```Python hl_lines="1 4" -{!> ../../docs_src/python_types/tutorial009.py!} -``` - -//// - -//// tab | ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”› - ๐ŸŽ› - -```Python hl_lines="1 4" -{!> ../../docs_src/python_types/tutorial009b.py!} -``` - -//// - -//// tab | ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ & ๐Ÿ”› - -```Python hl_lines="1" -{!> ../../docs_src/python_types/tutorial009_py310.py!} -``` - -//// - -#### โš™๏ธ `Union` โš–๏ธ `Optional` - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿ โฌ ๐Ÿ”› 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ, ๐Ÿ“ฅ ๐Ÿ’โ€โ™‚ โšช๏ธโžก๏ธ ๐Ÿ‘‡ ๐Ÿ“ถ **๐Ÿค”** โ˜ ๐ŸŽ‘: - -* ๐Ÿ‘ถ โŽ โš™๏ธ `Optional[SomeType]` -* โ†ฉ๏ธ ๐Ÿ‘ถ **โš™๏ธ `Union[SomeType, None]`** ๐Ÿ‘ถ. - -๐Ÿ‘ฏโ€โ™‚๏ธ ๐ŸŒ“ & ๐Ÿ”˜ ๐Ÿ‘ซ ๐ŸŽ, โœ‹๏ธ ๐Ÿ‘ค ๐Ÿ”œ ๐Ÿ‘ `Union` โ†ฉ๏ธ `Optional` โ†ฉ๏ธ ๐Ÿ”ค "**๐Ÿ“ฆ**" ๐Ÿ”œ ๐Ÿ˜‘ ๐Ÿ”‘ ๐Ÿ‘ˆ ๐Ÿ’ฒ ๐Ÿ“ฆ, & โšซ๏ธ ๐Ÿค™ โ›“ "โšซ๏ธ ๐Ÿ’ช `None`", ๐Ÿšฅ โšซ๏ธ ๐Ÿšซ ๐Ÿ“ฆ & โœ”. - -๐Ÿ‘ค ๐Ÿ’ญ `Union[SomeType, None]` ๐ŸŒ– ๐Ÿ”‘ ๐Ÿ”ƒ โšซ๏ธโ” โšซ๏ธ โ›“. - -โšซ๏ธ ๐Ÿ”ƒ ๐Ÿ”ค & ๐Ÿ“›. โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿ”ค ๐Ÿ’ช ๐Ÿ“‰ โ” ๐Ÿ‘† & ๐Ÿ‘† ๐Ÿคฝโ€โ™‚ ๐Ÿ’ญ ๐Ÿ”ƒ ๐Ÿ“Ÿ. - -๐Ÿ–ผ, โžก๏ธ โœŠ ๐Ÿ‘‰ ๐Ÿ”ข: - -```Python hl_lines="1 4" -{!../../docs_src/python_types/tutorial009c.py!} -``` - -๐Ÿ”ข `name` ๐Ÿ”ฌ `Optional[str]`, โœ‹๏ธ โšซ๏ธ **๐Ÿšซ ๐Ÿ“ฆ**, ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ ๐Ÿค™ ๐Ÿ”ข ๐Ÿต ๐Ÿ”ข: - -```Python -say_hi() # Oh, no, this throws an error! ๐Ÿ˜ฑ -``` - -`name` ๐Ÿ”ข **โœ”** (๐Ÿšซ *๐Ÿ“ฆ*) โ†ฉ๏ธ โšซ๏ธ ๐Ÿšซ โœ”๏ธ ๐Ÿ”ข ๐Ÿ’ฒ. , `name` ๐Ÿšซ `None` ๐Ÿ’ฒ: - -```Python -say_hi(name=None) # This works, None is valid ๐ŸŽ‰ -``` - -๐Ÿ‘ ๐Ÿ“ฐ, ๐Ÿ• ๐Ÿ‘† ๐Ÿ”› ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ ๐Ÿ‘† ๐Ÿ† ๐Ÿšซ โœ”๏ธ ๐Ÿ˜Ÿ ๐Ÿ”ƒ ๐Ÿ‘ˆ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐ŸŽฏ โš™๏ธ `|` ๐Ÿ”ฌ ๐Ÿ‡ช๐Ÿ‡บ ๐Ÿ†Ž: - -```Python hl_lines="1 4" -{!../../docs_src/python_types/tutorial009c_py310.py!} -``` - -& โคด๏ธ ๐Ÿ‘† ๐Ÿ† ๐Ÿšซ โœ”๏ธ ๐Ÿ˜Ÿ ๐Ÿ”ƒ ๐Ÿ“› ๐Ÿ’– `Optional` & `Union`. ๐Ÿ‘ถ - -#### ๐Ÿ’Š ๐Ÿ†Ž - -๐Ÿ‘‰ ๐Ÿ†Ž ๐Ÿ‘ˆ โœŠ ๐Ÿ†Ž ๐Ÿ”ข โฌœ ๐Ÿ—œ ๐Ÿค™ **๐Ÿ’Š ๐Ÿ†Ž** โš–๏ธ **๐Ÿ’Š**, ๐Ÿ–ผ: - -//// tab | ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”› - -* `List` -* `Tuple` -* `Set` -* `Dict` -* `Union` -* `Optional` -* ...& ๐ŸŽ. - -//// - -//// tab | ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”› - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ ๐Ÿ’ฝ ๐Ÿ†Ž ๐Ÿ’Š (โฎ๏ธ โฌœ ๐Ÿ—œ & ๐Ÿ†Ž ๐Ÿ”˜): - -* `list` -* `tuple` -* `set` -* `dict` - - & ๐ŸŽ โฎ๏ธ ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ, โšช๏ธโžก๏ธ `typing` ๐Ÿ•น: - -* `Union` -* `Optional` -* ...& ๐ŸŽ. - -//// - -//// tab | ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ & ๐Ÿ”› - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ ๐Ÿ’ฝ ๐Ÿ†Ž ๐Ÿ’Š (โฎ๏ธ โฌœ ๐Ÿ—œ & ๐Ÿ†Ž ๐Ÿ”˜): - -* `list` -* `tuple` -* `set` -* `dict` - - & ๐ŸŽ โฎ๏ธ ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ, โšช๏ธโžก๏ธ `typing` ๐Ÿ•น: - -* `Union` -* `Optional` (๐ŸŽ โฎ๏ธ ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ) -* ...& ๐ŸŽ. - -๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ, ๐ŸŽ› โš™๏ธ ๐Ÿ’Š `Union` & `Optional`, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โธ โธ (`|`) ๐Ÿ“ฃ ๐Ÿ‡ช๐Ÿ‡บ ๐Ÿ†Ž. - -//// - -### ๐ŸŽ“ ๐Ÿ†Ž - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŽ“ ๐Ÿ†Ž ๐Ÿ”ข. - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† โœ”๏ธ ๐ŸŽ“ `Person`, โฎ๏ธ ๐Ÿ“›: - -```Python hl_lines="1-3" -{!../../docs_src/python_types/tutorial010.py!} -``` - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ†Ž `Person`: - -```Python hl_lines="6" -{!../../docs_src/python_types/tutorial010.py!} -``` - -& โคด๏ธ, ๐Ÿ”„, ๐Ÿ‘† ๐Ÿคš ๐ŸŒ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ: - - - -## Pydantic ๐Ÿท - -Pydantic ๐Ÿ ๐Ÿ—ƒ ๐ŸŽญ ๐Ÿ“Š ๐Ÿ”ฌ. - -๐Ÿ‘† ๐Ÿ“ฃ "๐Ÿ’ " ๐Ÿ’ฝ ๐ŸŽ“ โฎ๏ธ ๐Ÿ”ข. - -& ๐Ÿ”  ๐Ÿ”ข โœ”๏ธ ๐Ÿ†Ž. - -โคด๏ธ ๐Ÿ‘† โœ ๐Ÿ‘ ๐Ÿ‘ˆ ๐ŸŽ“ โฎ๏ธ ๐Ÿ’ฒ & โšซ๏ธ ๐Ÿ”œ โœ” ๐Ÿ’ฒ, ๐Ÿ—œ ๐Ÿ‘ซ โ˜‘ ๐Ÿ†Ž (๐Ÿšฅ ๐Ÿ‘ˆ ๐Ÿ’ผ) & ๐Ÿค ๐Ÿ‘† ๐ŸŽš โฎ๏ธ ๐ŸŒ ๐Ÿ’ฝ. - -& ๐Ÿ‘† ๐Ÿคš ๐ŸŒ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ โฎ๏ธ ๐Ÿ‘ˆ ๐Ÿ“‰ ๐ŸŽš. - -๐Ÿ–ผ โšช๏ธโžก๏ธ ๐Ÿ›‚ Pydantic ๐Ÿฉบ: - -//// tab | ๐Ÿ 3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”› - -```Python -{!> ../../docs_src/python_types/tutorial011.py!} -``` - -//// - -//// tab | ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”› - -```Python -{!> ../../docs_src/python_types/tutorial011_py39.py!} -``` - -//// - -//// tab | ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ & ๐Ÿ”› - -```Python -{!> ../../docs_src/python_types/tutorial011_py310.py!} -``` - -//// - -/// info - -๐Ÿ’ก ๐ŸŒ– ๐Ÿ”ƒ Pydantic, โœ… ๐Ÿšฎ ๐Ÿฉบ. - -/// - -**FastAPI** ๐ŸŒ โš“๏ธ ๐Ÿ”› Pydantic. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ“š ๐ŸŒ… ๐ŸŒ ๐Ÿ‘‰ ๐Ÿ’ก [๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ](tutorial/index.md){.internal-link target=_blank}. - -/// tip - -Pydantic โœ”๏ธ ๐ŸŽ ๐ŸŽญ ๐Ÿ•โ” ๐Ÿ‘† โš™๏ธ `Optional` โš–๏ธ `Union[Something, None]` ๐Ÿต ๐Ÿ”ข ๐Ÿ’ฒ, ๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ… ๐Ÿ”ƒ โšซ๏ธ Pydantic ๐Ÿฉบ ๐Ÿ”ƒ โœ” ๐Ÿ“ฆ ๐Ÿ‘. - -/// - -## ๐Ÿ†Ž ๐Ÿ”‘ **FastAPI** - -**FastAPI** โœŠ ๐Ÿ“ˆ ๐Ÿ‘ซ ๐Ÿ†Ž ๐Ÿ”‘ ๐Ÿ“š ๐Ÿ‘œ. - -โฎ๏ธ **FastAPI** ๐Ÿ‘† ๐Ÿ“ฃ ๐Ÿ”ข โฎ๏ธ ๐Ÿ†Ž ๐Ÿ”‘ & ๐Ÿ‘† ๐Ÿคš: - -* **๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ**. -* **๐Ÿ†Ž โœ…**. - -...and **FastAPI** uses the same declarations : - -* **๐Ÿ”ฌ ๐Ÿ“„**: โšช๏ธโžก๏ธ ๐Ÿ“จ โžก ๐Ÿ”ข, ๐Ÿ”ข ๐Ÿ”ข, ๐ŸŽš, ๐Ÿ’ช, ๐Ÿ”—, โ™’๏ธ. -* **๐Ÿ—œ ๐Ÿ’ฝ**: โšช๏ธโžก๏ธ ๐Ÿ“จ ๐Ÿšš ๐Ÿ†Ž. -* **โœ” ๐Ÿ’ฝ**: ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ ๐Ÿ”  ๐Ÿ“จ: - * ๐Ÿญ **๐Ÿง โŒ** ๐Ÿ“จ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ•โ” ๐Ÿ“Š โŒ. -* **๐Ÿ“„** ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿ—„: - * โ” โคด๏ธ โš™๏ธ ๐Ÿง ๐ŸŽ“ ๐Ÿงพ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข. - -๐Ÿ‘‰ 5๏ธโƒฃ๐Ÿ“† ๐ŸŒ ๐Ÿ”Š ๐Ÿ“. ๐Ÿšซ ๐Ÿ˜Ÿ. ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŒ ๐Ÿ‘‰ ๐ŸŽฏ [๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ](tutorial/index.md){.internal-link target=_blank}. - -โš  ๐Ÿ‘œ ๐Ÿ‘ˆ โš™๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž, ๐Ÿ‘ ๐Ÿฅ‰ (โ†ฉ๏ธ โŽ ๐ŸŒ– ๐ŸŽ“, ๐Ÿ‘จโ€๐ŸŽจ, โ™’๏ธ), **FastAPI** ๐Ÿ”œ ๐Ÿ“š ๐Ÿ‘ท ๐Ÿ‘†. - -/// info - -๐Ÿšฅ ๐Ÿ‘† โช ๐Ÿšถ ๐Ÿ”˜ ๐ŸŒ ๐Ÿ”ฐ & ๐Ÿ‘Ÿ ๐Ÿ”™ ๐Ÿ‘€ ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ†Ž, ๐Ÿ‘ โ„น "๐ŸŽฎ ๐ŸŽผ" โšช๏ธโžก๏ธ `mypy`. - -/// diff --git a/docs/em/docs/tutorial/background-tasks.md b/docs/em/docs/tutorial/background-tasks.md deleted file mode 100644 index 4cbcbc710..000000000 --- a/docs/em/docs/tutorial/background-tasks.md +++ /dev/null @@ -1,84 +0,0 @@ -# ๐Ÿ–ฅ ๐Ÿ“‹ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ–ฅ ๐Ÿ“‹ ๐Ÿƒ *โฎ๏ธ* ๐Ÿ›ฌ ๐Ÿ“จ. - -๐Ÿ‘‰ โš  ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ”จ โฎ๏ธ ๐Ÿ“จ, โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿšซ ๐Ÿค™ โœ”๏ธ โŒ› ๐Ÿ› ๏ธ ๐Ÿ โญ ๐Ÿ“จ ๐Ÿ“จ. - -๐Ÿ‘‰ ๐Ÿ”Œ, ๐Ÿ–ผ: - -* ๐Ÿ“ง ๐Ÿ“จ ๐Ÿ“จ โฎ๏ธ ๐ŸŽญ ๐ŸŽฏ: - * ๐Ÿ”— ๐Ÿ“ง ๐Ÿ’ฝ & ๐Ÿ“จ ๐Ÿ“ง ๐Ÿ˜‘ "๐ŸŒ" (๐Ÿ“š ๐Ÿฅˆ), ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ“จ โ–ถ๏ธ๏ธ โ†–๏ธ & ๐Ÿ“จ ๐Ÿ“ง ๐Ÿ“จ ๐Ÿ–ฅ. -* ๐Ÿญ ๐Ÿ’ฝ: - * ๐Ÿ–ผ, โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ“ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿšถ ๐Ÿ”˜ ๐ŸŒ ๐Ÿ› ๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ“จ "๐Ÿšซ" (๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” 2๏ธโƒฃ0๏ธโƒฃ2๏ธโƒฃ) & ๐Ÿ› ๏ธ โšซ๏ธ ๐Ÿ–ฅ. - -## โš™๏ธ `BackgroundTasks` - -๐Ÿฅ‡, ๐Ÿ—„ `BackgroundTasks` & ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* โฎ๏ธ ๐Ÿ†Ž ๐Ÿ“„ `BackgroundTasks`: - -{* ../../docs_src/background_tasks/tutorial001.py hl[1,13] *} - -**FastAPI** ๐Ÿ”œ โœ ๐ŸŽš ๐Ÿ†Ž `BackgroundTasks` ๐Ÿ‘† & ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐Ÿ‘ˆ ๐Ÿ”ข. - -## โœ ๐Ÿ“‹ ๐Ÿ”ข - -โœ ๐Ÿ”ข ๐Ÿƒ ๐Ÿ–ฅ ๐Ÿ“‹. - -โšซ๏ธ ๐Ÿฉ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ”ข. - -โšซ๏ธ ๐Ÿ’ช `async def` โš–๏ธ ๐Ÿ˜ `def` ๐Ÿ”ข, **FastAPI** ๐Ÿ”œ ๐Ÿ’ญ โ” ๐Ÿต โšซ๏ธ โ˜‘. - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ“‹ ๐Ÿ”ข ๐Ÿ”œ โœ ๐Ÿ“ (โš– ๐Ÿ“จ ๐Ÿ“ง). - -& โœ ๐Ÿ› ๏ธ ๐Ÿšซ โš™๏ธ `async` & `await`, ๐Ÿ‘ฅ ๐Ÿ”ฌ ๐Ÿ”ข โฎ๏ธ ๐Ÿ˜ `def`: - -{* ../../docs_src/background_tasks/tutorial001.py hl[6:9] *} - -## ๐Ÿšฎ ๐Ÿ–ฅ ๐Ÿ“‹ - -๐Ÿ”˜ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘† ๐Ÿ“‹ ๐Ÿ”ข *๐Ÿ–ฅ ๐Ÿ“‹* ๐ŸŽš โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ”ฌ `.add_task()`: - -{* ../../docs_src/background_tasks/tutorial001.py hl[14] *} - -`.add_task()` ๐Ÿ“จ โŒ: - -* ๐Ÿ“‹ ๐Ÿ”ข ๐Ÿƒ ๐Ÿ–ฅ (`write_notification`). -* ๐Ÿ™† ๐Ÿ” โŒ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ“‹ ๐Ÿ”ข โœ” (`email`). -* ๐Ÿ™† ๐Ÿ‡จ๐Ÿ‡ป โŒ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ“‹ ๐Ÿ”ข (`message="some notification"`). - -## ๐Ÿ”— ๐Ÿ’‰ - -โš™๏ธ `BackgroundTasks` ๐Ÿ‘ท โฎ๏ธ ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ†Ž `BackgroundTasks` ๐Ÿ’— ๐ŸŽš: *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, ๐Ÿ”— (โ˜‘), ๐ŸŽง-๐Ÿ”—, โ™’๏ธ. - -**FastAPI** ๐Ÿ’ญ โšซ๏ธโ” ๐Ÿ”  ๐Ÿ’ผ & โ” ๐Ÿค-โš™๏ธ ๐ŸŽ ๐ŸŽš, ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿ–ฅ ๐Ÿ“‹ ๐Ÿ”— ๐Ÿ‘ฏโ€โ™‚๏ธ & ๐Ÿƒ ๐Ÿ–ฅ โฎ๏ธ: - -{* ../../docs_src/background_tasks/tutorial002.py hl[13,15,22,25] *} - -๐Ÿ‘‰ ๐Ÿ–ผ, ๐Ÿ“ง ๐Ÿ”œ โœ `log.txt` ๐Ÿ“ *โฎ๏ธ* ๐Ÿ“จ ๐Ÿ“จ. - -๐Ÿšฅ ๐Ÿ“ค ๐Ÿ”ข ๐Ÿ“จ, โšซ๏ธ ๐Ÿ”œ โœ ๐Ÿ•น ๐Ÿ–ฅ ๐Ÿ“‹. - -& โคด๏ธ โž•1๏ธโƒฃ ๐Ÿ–ฅ ๐Ÿ“‹ ๐Ÿ— *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”œ โœ ๐Ÿ“ง โš™๏ธ `email` โžก ๐Ÿ”ข. - -## ๐Ÿ“ก โ„น - -๐ŸŽ“ `BackgroundTasks` ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ `starlette.background`. - -โšซ๏ธ ๐Ÿ—„/๐Ÿ”Œ ๐Ÿ”— ๐Ÿ”˜ FastAPI ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ—„ โšซ๏ธ โšช๏ธโžก๏ธ `fastapi` & โŽ ๐Ÿ˜ซ ๐Ÿ—„ ๐ŸŽ› `BackgroundTask` (๐Ÿต `s` ๐Ÿ”š) โšช๏ธโžก๏ธ `starlette.background`. - -๐Ÿ•ด โš™๏ธ `BackgroundTasks` (& ๐Ÿšซ `BackgroundTask`), โšซ๏ธ โคด๏ธ ๐Ÿ’ช โš™๏ธ โšซ๏ธ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”ข & โœ”๏ธ **FastAPI** ๐Ÿต ๐ŸŽ‚ ๐Ÿ‘†, ๐Ÿ’– ๐Ÿ•โ” โš™๏ธ `Request` ๐ŸŽš ๐Ÿ”—. - -โšซ๏ธ ๐Ÿ’ช โš™๏ธ `BackgroundTask` ๐Ÿ˜ž FastAPI, โœ‹๏ธ ๐Ÿ‘† โœ”๏ธ โœ ๐ŸŽš ๐Ÿ‘† ๐Ÿ“Ÿ & ๐Ÿ“จ ๐Ÿ’ƒ `Response` ๐Ÿ”Œ โšซ๏ธ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘€ ๐ŸŒ– โ„น ๐Ÿ’ƒ ๐Ÿ›‚ ๐Ÿฉบ ๐Ÿ–ฅ ๐Ÿ“‹. - -## โš  - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽญ ๐Ÿ‹๏ธ ๐Ÿ–ฅ ๐Ÿ“Š & ๐Ÿ‘† ๐Ÿšซ ๐ŸŽฏ ๐Ÿ’ช โšซ๏ธ ๐Ÿƒ ๐ŸŽ ๐Ÿ› ๏ธ (๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ช ๐Ÿ’ฐ ๐Ÿ’พ, ๐Ÿ”ข, โ™’๏ธ), ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ฐ โšช๏ธโžก๏ธ โš™๏ธ ๐ŸŽ ๐Ÿฆ ๐Ÿงฐ ๐Ÿ’– ๐Ÿฅ’. - -๐Ÿ‘ซ ๐Ÿ˜‘ ๐Ÿšš ๐ŸŒ– ๐Ÿ— ๐Ÿ“ณ, ๐Ÿ“ง/๐Ÿ‘จโ€๐Ÿญ ๐Ÿ“ค ๐Ÿ‘จโ€๐Ÿ’ผ, ๐Ÿ’– โœณ โš–๏ธ โœณ, โœ‹๏ธ ๐Ÿ‘ซ โœ” ๐Ÿ‘† ๐Ÿƒ ๐Ÿ–ฅ ๐Ÿ“‹ ๐Ÿ’— ๐Ÿ› ๏ธ, & โœด๏ธ, ๐Ÿ’— ๐Ÿ’ฝ. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” ๐Ÿ”ข & ๐ŸŽš โšช๏ธโžก๏ธ ๐ŸŽ **FastAPI** ๐Ÿ“ฑ, โš–๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽญ ๐Ÿคช ๐Ÿ–ฅ ๐Ÿ“‹ (๐Ÿ’– ๐Ÿ“จ ๐Ÿ“ง ๐Ÿ“จ), ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽฏ โš™๏ธ `BackgroundTasks`. - -## ๐ŸŒƒ - -๐Ÿ—„ & โš™๏ธ `BackgroundTasks` โฎ๏ธ ๐Ÿ”ข *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* & ๐Ÿ”— ๐Ÿšฎ ๐Ÿ–ฅ ๐Ÿ“‹. diff --git a/docs/em/docs/tutorial/bigger-applications.md b/docs/em/docs/tutorial/bigger-applications.md deleted file mode 100644 index 78a321ae6..000000000 --- a/docs/em/docs/tutorial/bigger-applications.md +++ /dev/null @@ -1,530 +0,0 @@ -# ๐Ÿฆ ๐Ÿˆธ - ๐Ÿ’— ๐Ÿ“ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ— ๐Ÿˆธ โš–๏ธ ๐Ÿ•ธ ๐Ÿ› ๏ธ, โšซ๏ธ ๐Ÿ›Ž ๐Ÿ’ผ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐ŸŒ ๐Ÿ”› ๐Ÿ‘ ๐Ÿ“. - -**FastAPI** ๐Ÿšš ๐Ÿช ๐Ÿงฐ ๐Ÿ“Š ๐Ÿ‘† ๐Ÿˆธ โช ๐Ÿšง ๐ŸŒ ๐Ÿ’ช. - -/// info - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ ๐Ÿบ, ๐Ÿ‘‰ ๐Ÿ”œ ๐ŸŒ“ ๐Ÿบ ๐Ÿ“—. - -/// - -## ๐Ÿ–ผ ๐Ÿ“ ๐Ÿ“Š - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† โœ”๏ธ ๐Ÿ“ ๐Ÿ“Š ๐Ÿ’– ๐Ÿ‘‰: - -``` -. -โ”œโ”€โ”€ app -โ”‚ย ย  โ”œโ”€โ”€ __init__.py -โ”‚ย ย  โ”œโ”€โ”€ main.py -โ”‚ย ย  โ”œโ”€โ”€ dependencies.py -โ”‚ย ย  โ””โ”€โ”€ routers -โ”‚ย ย  โ”‚ โ”œโ”€โ”€ __init__.py -โ”‚ย ย  โ”‚ โ”œโ”€โ”€ items.py -โ”‚ย ย  โ”‚ โ””โ”€โ”€ users.py -โ”‚ย ย  โ””โ”€โ”€ internal -โ”‚ย ย  โ”œโ”€โ”€ __init__.py -โ”‚ย ย  โ””โ”€โ”€ admin.py -``` - -/// tip - -๐Ÿ“ค ๐Ÿ“š `__init__.py` ๐Ÿ“: 1๏ธโƒฃ ๐Ÿ”  ๐Ÿ“ โš–๏ธ ๐Ÿ“. - -๐Ÿ‘‰ โšซ๏ธโ” โœ” ๐Ÿญ ๐Ÿ“Ÿ โšช๏ธโžก๏ธ 1๏ธโƒฃ ๐Ÿ“ ๐Ÿ”˜ โž•1๏ธโƒฃ. - -๐Ÿ–ผ, `app/main.py` ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ โธ ๐Ÿ’–: - -``` -from app.routers import items -``` - -/// - -* `app` ๐Ÿ“ ๐Ÿ”Œ ๐ŸŒ. & โšซ๏ธ โœ”๏ธ ๐Ÿ› ๐Ÿ“ `app/__init__.py`, โšซ๏ธ "๐Ÿ ๐Ÿ“ฆ" (๐Ÿ—ƒ "๐Ÿ ๐Ÿ•น"): `app`. -* โšซ๏ธ ๐Ÿ”Œ `app/main.py` ๐Ÿ“. โšซ๏ธ ๐Ÿ”˜ ๐Ÿ ๐Ÿ“ฆ (๐Ÿ“ โฎ๏ธ ๐Ÿ“ `__init__.py`), โšซ๏ธ "๐Ÿ•น" ๐Ÿ‘ˆ ๐Ÿ“ฆ: `app.main`. -* ๐Ÿ“ค `app/dependencies.py` ๐Ÿ“, ๐Ÿ’– `app/main.py`, โšซ๏ธ "๐Ÿ•น": `app.dependencies`. -* ๐Ÿ“ค ๐Ÿ“ `app/routers/` โฎ๏ธ โž•1๏ธโƒฃ ๐Ÿ“ `__init__.py`, โšซ๏ธ "๐Ÿ ๐Ÿ“ฆ": `app.routers`. -* ๐Ÿ“ `app/routers/items.py` ๐Ÿ”˜ ๐Ÿ“ฆ, `app/routers/`,, โšซ๏ธ ๐Ÿ”: `app.routers.items`. -* ๐ŸŽ โฎ๏ธ `app/routers/users.py`, โšซ๏ธ โž•1๏ธโƒฃ ๐Ÿ”: `app.routers.users`. -* ๐Ÿ“ค ๐Ÿ“ `app/internal/` โฎ๏ธ โž•1๏ธโƒฃ ๐Ÿ“ `__init__.py`, โšซ๏ธ โž•1๏ธโƒฃ "๐Ÿ ๐Ÿ“ฆ": `app.internal`. -* & ๐Ÿ“ `app/internal/admin.py` โž•1๏ธโƒฃ ๐Ÿ”: `app.internal.admin`. - - - -๐ŸŽ ๐Ÿ“ ๐Ÿ“Š โฎ๏ธ ๐Ÿค: - -``` -. -โ”œโ”€โ”€ app # "app" is a Python package -โ”‚ย ย  โ”œโ”€โ”€ __init__.py # this file makes "app" a "Python package" -โ”‚ย ย  โ”œโ”€โ”€ main.py # "main" module, e.g. import app.main -โ”‚ย ย  โ”œโ”€โ”€ dependencies.py # "dependencies" module, e.g. import app.dependencies -โ”‚ย ย  โ””โ”€โ”€ routers # "routers" is a "Python subpackage" -โ”‚ย ย  โ”‚ โ”œโ”€โ”€ __init__.py # makes "routers" a "Python subpackage" -โ”‚ย ย  โ”‚ โ”œโ”€โ”€ items.py # "items" submodule, e.g. import app.routers.items -โ”‚ย ย  โ”‚ โ””โ”€โ”€ users.py # "users" submodule, e.g. import app.routers.users -โ”‚ย ย  โ””โ”€โ”€ internal # "internal" is a "Python subpackage" -โ”‚ย ย  โ”œโ”€โ”€ __init__.py # makes "internal" a "Python subpackage" -โ”‚ย ย  โ””โ”€โ”€ admin.py # "admin" submodule, e.g. import app.internal.admin -``` - -## `APIRouter` - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ“ ๐Ÿ’ก ๐Ÿšš ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ” `/app/routers/users.py`. - -๐Ÿ‘† ๐Ÿ’š โœ”๏ธ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”— ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ฝ โšช๏ธโžก๏ธ ๐ŸŽ‚ ๐Ÿ“Ÿ, ๐Ÿšง โšซ๏ธ ๐Ÿ—. - -โœ‹๏ธ โšซ๏ธ ๐Ÿ• ๐ŸŽ **FastAPI** ๐Ÿˆธ/๐Ÿ•ธ ๐Ÿ› ๏ธ (โšซ๏ธ ๐Ÿ• ๐ŸŽ "๐Ÿ ๐Ÿ“ฆ"). - -๐Ÿ‘† ๐Ÿ’ช โœ *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ ๐Ÿ•น โš™๏ธ `APIRouter`. - -### ๐Ÿ—„ `APIRouter` - -๐Ÿ‘† ๐Ÿ—„ โšซ๏ธ & โœ "๐Ÿ‘" ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”œ โฎ๏ธ ๐ŸŽ“ `FastAPI`: - -```Python hl_lines="1 3" title="app/routers/users.py" -{!../../docs_src/bigger_applications/app/routers/users.py!} -``` - -### *โžก ๐Ÿ› ๏ธ* โฎ๏ธ `APIRouter` - -& โคด๏ธ ๐Ÿ‘† โš™๏ธ โšซ๏ธ ๐Ÿ“ฃ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. - -โš™๏ธ โšซ๏ธ ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”œ โš™๏ธ `FastAPI` ๐ŸŽ“: - -```Python hl_lines="6 11 16" title="app/routers/users.py" -{!../../docs_src/bigger_applications/app/routers/users.py!} -``` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ญ `APIRouter` "๐Ÿฉ `FastAPI`" ๐ŸŽ“. - -๐ŸŒ ๐ŸŽ ๐ŸŽ› ๐Ÿ•โ€๐Ÿฆบ. - -๐ŸŒ ๐ŸŽ `parameters`, `responses`, `dependencies`, `tags`, โ™’๏ธ. - -/// tip - -๐Ÿ‘‰ ๐Ÿ–ผ, ๐Ÿ”ข ๐Ÿค™ `router`, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“› โšซ๏ธ ๐Ÿ‘ ๐Ÿ‘† ๐Ÿ’š. - -/// - -๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ”Œ ๐Ÿ‘‰ `APIRouter` ๐Ÿ‘‘ `FastAPI` ๐Ÿ“ฑ, โœ‹๏ธ ๐Ÿฅ‡, โžก๏ธ โœ… ๐Ÿ”— & โž•1๏ธโƒฃ `APIRouter`. - -## ๐Ÿ”— - -๐Ÿ‘ฅ ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ”— โš™๏ธ ๐Ÿ“š ๐Ÿฅ‰ ๐Ÿˆธ. - -๐Ÿ‘ฅ ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ‘ซ ๐Ÿ‘ `dependencies` ๐Ÿ•น (`app/dependencies.py`). - -๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ”œ โš™๏ธ ๐Ÿ™… ๐Ÿ”— โœ ๐Ÿ›ƒ `X-Token` ๐ŸŽš: - -```Python hl_lines="1 4-6" title="app/dependencies.py" -{!../../docs_src/bigger_applications/app/dependencies.py!} -``` - -/// tip - -๐Ÿ‘ฅ โš™๏ธ ๐Ÿ’ญ ๐ŸŽš ๐Ÿ“‰ ๐Ÿ‘‰ ๐Ÿ–ผ. - -โœ‹๏ธ ๐ŸŽฐ ๐Ÿ’ผ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš ๐Ÿ‘ ๐Ÿ โš™๏ธ ๐Ÿ› ๏ธ [๐Ÿ’‚โ€โ™‚ ๐Ÿš™](security/index.md){.internal-link target=_blank}. - -/// - -## โž•1๏ธโƒฃ ๐Ÿ•น โฎ๏ธ `APIRouter` - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† โœ”๏ธ ๐Ÿ”— ๐Ÿ’ก ๐Ÿšš "๐Ÿฌ" โšช๏ธโžก๏ธ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ•น `app/routers/items.py`. - -๐Ÿ‘† โœ”๏ธ *โžก ๐Ÿ› ๏ธ* : - -* `/items/` -* `/items/{item_id}` - -โšซ๏ธ ๐ŸŒ ๐ŸŽ ๐Ÿ“Š โฎ๏ธ `app/routers/users.py`. - -โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿ’š ๐Ÿ™ƒ & ๐Ÿ“‰ ๐Ÿ“Ÿ ๐Ÿ–. - -๐Ÿ‘ฅ ๐Ÿ’ญ ๐ŸŒ *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘‰ ๐Ÿ•น โœ”๏ธ ๐ŸŽ: - -* โžก `prefix`: `/items`. -* `tags`: (1๏ธโƒฃ ๐Ÿ”–: `items`). -* โž• `responses`. -* `dependencies`: ๐Ÿ‘ซ ๐ŸŒ ๐Ÿ’ช ๐Ÿ‘ˆ `X-Token` ๐Ÿ”— ๐Ÿ‘ฅ โœ. - -, โ†ฉ๏ธ โŽ ๐ŸŒ ๐Ÿ‘ˆ ๐Ÿ”  *โžก ๐Ÿ› ๏ธ*, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšฎ โšซ๏ธ `APIRouter`. - -```Python hl_lines="5-10 16 21" title="app/routers/items.py" -{!../../docs_src/bigger_applications/app/routers/items.py!} -``` - -โžก ๐Ÿ”  *โžก ๐Ÿ› ๏ธ* โœ”๏ธ โ–ถ๏ธ โฎ๏ธ `/`, ๐Ÿ’–: - -```Python hl_lines="1" -@router.get("/{item_id}") -async def read_item(item_id: str): - ... -``` - -...๐Ÿ”ก ๐Ÿ”œ ๐Ÿšซ ๐Ÿ”Œ ๐Ÿ `/`. - -, ๐Ÿ”ก ๐Ÿ‘‰ ๐Ÿ’ผ `/items`. - -๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ“‡ `tags` & โž• `responses` ๐Ÿ‘ˆ ๐Ÿ”œ โœ” ๐ŸŒ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”Œ ๐Ÿ‘‰ ๐Ÿ“ป. - -& ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ“‡ `dependencies` ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿšฎ ๐ŸŒ *โžก ๐Ÿ› ๏ธ* ๐Ÿ“ป & ๐Ÿ”œ ๐Ÿ› ๏ธ/โŽ ๐Ÿ”  ๐Ÿ“จ โš’ ๐Ÿ‘ซ. - -/// tip - -๐Ÿ—’ ๐Ÿ‘ˆ, ๐ŸŒ… ๐Ÿ’– [๐Ÿ”— *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}, ๐Ÿ™…โ€โ™‚ ๐Ÿ’ฒ ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -/// - -๐Ÿ”š ๐Ÿ ๐Ÿ‘ˆ ๐Ÿฌ โžก ๐Ÿ”œ: - -* `/items/` -* `/items/{item_id}` - -...๐Ÿ‘ฅ ๐ŸŽฏ. - -* ๐Ÿ‘ซ ๐Ÿ”œ โ„ข โฎ๏ธ ๐Ÿ“‡ ๐Ÿ”– ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ‘ ๐ŸŽป `"items"`. - * ๐Ÿ‘ซ "๐Ÿ”–" โœด๏ธ โš  ๐Ÿง ๐ŸŽ“ ๐Ÿงพ โš™๏ธ (โš™๏ธ ๐Ÿ—„). -* ๐ŸŒ ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ”Œ ๐Ÿ” `responses`. -* ๐ŸŒ ๐Ÿ‘ซ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”œ โœ”๏ธ ๐Ÿ“‡ `dependencies` ๐Ÿ”ฌ/๐Ÿ› ๏ธ โญ ๐Ÿ‘ซ. - * ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ฃ ๐Ÿ”— ๐ŸŽฏ *โžก ๐Ÿ› ๏ธ*, **๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ› ๏ธ ๐Ÿ’โ€โ™‚๏ธ**. - * ๐Ÿ“ป ๐Ÿ”— ๐Ÿ› ๏ธ ๐Ÿฅ‡, โคด๏ธ [`dependencies` ๐Ÿ‘จโ€๐ŸŽจ](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}, & โคด๏ธ ๐Ÿ˜ ๐Ÿ”ข ๐Ÿ”—. - * ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ [`Security` ๐Ÿ”— โฎ๏ธ `scopes`](../advanced/security/oauth2-scopes.md){.internal-link target=_blank}. - -/// tip - -โœ”๏ธ `dependencies` `APIRouter` ๐Ÿ’ช โš™๏ธ, ๐Ÿ–ผ, ๐Ÿšš ๐Ÿค ๐ŸŽ‚ ๐Ÿ‘ช *โžก ๐Ÿ› ๏ธ*. ๐Ÿšฅ ๐Ÿ”— ๐Ÿšซ ๐Ÿšฎ ๐Ÿ“ฆ ๐Ÿ”  1๏ธโƒฃ ๐Ÿ‘ซ. - -/// - -/// check - -`prefix`, `tags`, `responses`, & `dependencies` ๐Ÿ”ข (๐Ÿ“š ๐ŸŽ ๐Ÿ’ผ) โš’ โšช๏ธโžก๏ธ **FastAPI** โ„น ๐Ÿ‘† โŽ ๐Ÿ“Ÿ โŽ. - -/// - -### ๐Ÿ—„ ๐Ÿ”— - -๐Ÿ‘‰ ๐Ÿ“Ÿ ๐Ÿ‘จโ€โคโ€๐Ÿ‘จ ๐Ÿ•น `app.routers.items`, ๐Ÿ“ `app/routers/items.py`. - -& ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿคš ๐Ÿ”— ๐Ÿ”ข โšช๏ธโžก๏ธ ๐Ÿ•น `app.dependencies`, ๐Ÿ“ `app/dependencies.py`. - -๐Ÿ‘ฅ โš™๏ธ โš– ๐Ÿ—„ โฎ๏ธ `..` ๐Ÿ”—: - -```Python hl_lines="3" title="app/routers/items.py" -{!../../docs_src/bigger_applications/app/routers/items.py!} -``` - -#### โ” โš– ๐Ÿ—„ ๐Ÿ‘ท - -/// tip - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ‘Œ โ” ๐Ÿ—„ ๐Ÿ‘ท, ๐Ÿ˜ฃ โญ ๐Ÿ“„ ๐Ÿ”›. - -/// - -๐Ÿ‘ โฃ `.`, ๐Ÿ’–: - -```Python -from .dependencies import get_token_header -``` - -๐Ÿ”œ โ›“: - -* โ–ถ๏ธ ๐ŸŽ ๐Ÿ“ฆ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ•น (๐Ÿ“ `app/routers/items.py`) ๐Ÿ–– (๐Ÿ“ `app/routers/`)... -* ๐Ÿ”Ž ๐Ÿ•น `dependencies` (๐Ÿ‘ฝ ๐Ÿ“ `app/routers/dependencies.py`)... -* & โšช๏ธโžก๏ธ โšซ๏ธ, ๐Ÿ—„ ๐Ÿ”ข `get_token_header`. - -โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿ“ ๐Ÿšซ ๐Ÿ”€, ๐Ÿ‘† ๐Ÿ”— ๐Ÿ“ `app/dependencies.py`. - -๐Ÿ’ญ โ” ๐Ÿ‘† ๐Ÿ“ฑ/๐Ÿ“ ๐Ÿ“Š ๐Ÿ‘€ ๐Ÿ’–: - - - ---- - -2๏ธโƒฃ โฃ `..`, ๐Ÿ’–: - -```Python -from ..dependencies import get_token_header -``` - -โ›“: - -* โ–ถ๏ธ ๐ŸŽ ๐Ÿ“ฆ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ•น (๐Ÿ“ `app/routers/items.py`) ๐Ÿ–– (๐Ÿ“ `app/routers/`)... -* ๐Ÿšถ ๐Ÿ‘ช ๐Ÿ“ฆ (๐Ÿ“ `app/`)... -* & ๐Ÿ“ค, ๐Ÿ”Ž ๐Ÿ•น `dependencies` (๐Ÿ“ `app/dependencies.py`)... -* & โšช๏ธโžก๏ธ โšซ๏ธ, ๐Ÿ—„ ๐Ÿ”ข `get_token_header`. - -๐Ÿ‘ˆ ๐Ÿ‘ท โ˜‘ โ— ๐Ÿ‘ถ - ---- - -๐ŸŽ ๐ŸŒŒ, ๐Ÿšฅ ๐Ÿ‘ฅ โœ”๏ธ โš™๏ธ 3๏ธโƒฃ โฃ `...`, ๐Ÿ’–: - -```Python -from ...dependencies import get_token_header -``` - -that ๐Ÿ”œ โ›“: - -* โ–ถ๏ธ ๐ŸŽ ๐Ÿ“ฆ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ•น (๐Ÿ“ `app/routers/items.py`) ๐Ÿ–– (๐Ÿ“ `app/routers/`)... -* ๐Ÿšถ ๐Ÿ‘ช ๐Ÿ“ฆ (๐Ÿ“ `app/`)... -* โคด๏ธ ๐Ÿšถ ๐Ÿ‘ช ๐Ÿ‘ˆ ๐Ÿ“ฆ (๐Ÿ“ค ๐Ÿ™…โ€โ™‚ ๐Ÿ‘ช ๐Ÿ“ฆ, `app` ๐Ÿ” ๐ŸŽš ๐Ÿ‘ถ)... -* & ๐Ÿ“ค, ๐Ÿ”Ž ๐Ÿ•น `dependencies` (๐Ÿ“ `app/dependencies.py`)... -* & โšช๏ธโžก๏ธ โšซ๏ธ, ๐Ÿ—„ ๐Ÿ”ข `get_token_header`. - -๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ”— ๐Ÿ“ฆ ๐Ÿ”› `app/`, โฎ๏ธ ๐Ÿšฎ ๐Ÿ‘ ๐Ÿ“ `__init__.py`, โ™’๏ธ. โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿšซ โœ”๏ธ ๐Ÿ‘ˆ. , ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿšฎ โŒ ๐Ÿ‘† ๐Ÿ–ผ. ๐Ÿ‘ถ - -โœ‹๏ธ ๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ญ โ” โšซ๏ธ ๐Ÿ‘ท, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โš– ๐Ÿ—„ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ“ฑ ๐Ÿ™…โ€โ™‚ ๐Ÿค” โ” ๐Ÿ— ๐Ÿ‘ซ. ๐Ÿ‘ถ - -### ๐Ÿšฎ ๐Ÿ›ƒ `tags`, `responses`, & `dependencies` - -๐Ÿ‘ฅ ๐Ÿšซ โŽ ๐Ÿ”ก `/items` ๐Ÿšซ `tags=["items"]` ๐Ÿ”  *โžก ๐Ÿ› ๏ธ* โ†ฉ๏ธ ๐Ÿ‘ฅ ๐Ÿšฎ ๐Ÿ‘ซ `APIRouter`. - -โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšฎ _๐ŸŒ…_ `tags` ๐Ÿ‘ˆ ๐Ÿ”œ โœ” ๐ŸŽฏ *โžก ๐Ÿ› ๏ธ*, & โž• `responses` ๐ŸŽฏ ๐Ÿ‘ˆ *โžก ๐Ÿ› ๏ธ*: - -```Python hl_lines="30-31" title="app/routers/items.py" -{!../../docs_src/bigger_applications/app/routers/items.py!} -``` - -/// tip - -๐Ÿ‘‰ ๐Ÿ โžก ๐Ÿ› ๏ธ ๐Ÿ”œ โœ”๏ธ ๐ŸŒ€ ๐Ÿ”–: `["items", "custom"]`. - - & โšซ๏ธ ๐Ÿ”œ โœ”๏ธ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ“จ ๐Ÿงพ, 1๏ธโƒฃ `404` & 1๏ธโƒฃ `403`. - -/// - -## ๐Ÿ‘‘ `FastAPI` - -๐Ÿ”œ, โžก๏ธ ๐Ÿ‘€ ๐Ÿ•น `app/main.py`. - -๐Ÿ“ฅ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ—„ & โš™๏ธ ๐ŸŽ“ `FastAPI`. - -๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ‘‘ ๐Ÿ“ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ‘ˆ ๐Ÿ‘” ๐ŸŒ ๐Ÿ‘ฏโ€โ™‚๏ธ. - -& ๐Ÿ† ๐Ÿ‘† โš› ๐Ÿ”œ ๐Ÿ”œ ๐Ÿ–– ๐Ÿšฎ ๐Ÿ‘ ๐ŸŽฏ ๐Ÿ•น, ๐Ÿ‘‘ ๐Ÿ“ ๐Ÿ”œ ๐Ÿ™…. - -### ๐Ÿ—„ `FastAPI` - -๐Ÿ‘† ๐Ÿ—„ & โœ `FastAPI` ๐ŸŽ“ ๐Ÿ›Ž. - -& ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ“ฃ [๐ŸŒ ๐Ÿ”—](dependencies/global-dependencies.md){.internal-link target=_blank} ๐Ÿ‘ˆ ๐Ÿ”œ ๐ŸŒ€ โฎ๏ธ ๐Ÿ”— ๐Ÿ”  `APIRouter`: - -```Python hl_lines="1 3 7" title="app/main.py" -{!../../docs_src/bigger_applications/app/main.py!} -``` - -### ๐Ÿ—„ `APIRouter` - -๐Ÿ”œ ๐Ÿ‘ฅ ๐Ÿ—„ ๐ŸŽ ๐Ÿ” ๐Ÿ‘ˆ โœ”๏ธ `APIRouter`โ“‚: - -```Python hl_lines="5" title="app/main.py" -{!../../docs_src/bigger_applications/app/main.py!} -``` - -๐Ÿ“ `app/routers/users.py` & `app/routers/items.py` ๐Ÿ” ๐Ÿ‘ˆ ๐Ÿ• ๐ŸŽ ๐Ÿ ๐Ÿ“ฆ `app`, ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ โฃ `.` ๐Ÿ—„ ๐Ÿ‘ซ โš™๏ธ "โš– ๐Ÿ—„". - -### โ” ๐Ÿญ ๐Ÿ‘ท - -๐Ÿ“„: - -```Python -from .routers import items, users -``` - -โ›“: - -* โ–ถ๏ธ ๐ŸŽ ๐Ÿ“ฆ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ•น (๐Ÿ“ `app/main.py`) ๐Ÿ–– (๐Ÿ“ `app/`)... -* ๐Ÿ‘€ ๐Ÿ“ฆ `routers` (๐Ÿ“ `app/routers/`)... -* & โšช๏ธโžก๏ธ โšซ๏ธ, ๐Ÿ—„ ๐Ÿ” `items` (๐Ÿ“ `app/routers/items.py`) & `users` (๐Ÿ“ `app/routers/users.py`)... - -๐Ÿ•น `items` ๐Ÿ”œ โœ”๏ธ ๐Ÿ”ข `router` (`items.router`). ๐Ÿ‘‰ ๐ŸŽ 1๏ธโƒฃ ๐Ÿ‘ฅ โœ ๐Ÿ“ `app/routers/items.py`, โšซ๏ธ `APIRouter` ๐ŸŽš. - -& โคด๏ธ ๐Ÿ‘ฅ ๐ŸŽ ๐Ÿ•น `users`. - -๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ—„ ๐Ÿ‘ซ ๐Ÿ’–: - -```Python -from app.routers import items, users -``` - -/// info - -๐Ÿฅ‡ โฌ "โš– ๐Ÿ—„": - -```Python -from .routers import items, users -``` - -๐Ÿฅˆ โฌ "๐ŸŽ† ๐Ÿ—„": - -```Python -from app.routers import items, users -``` - -๐Ÿ’ก ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ ๐Ÿ“ฆ & ๐Ÿ•น, โœ ๐Ÿ›‚ ๐Ÿ ๐Ÿงพ ๐Ÿ”ƒ ๐Ÿ•น. - -/// - -### โŽ ๐Ÿ“› ๐Ÿ’ฅ - -๐Ÿ‘ฅ ๐Ÿญ ๐Ÿ” `items` ๐Ÿ”—, โ†ฉ๏ธ ๐Ÿญ ๐Ÿšฎ ๐Ÿ”ข `router`. - -๐Ÿ‘‰ โ†ฉ๏ธ ๐Ÿ‘ฅ โœ”๏ธ โž•1๏ธโƒฃ ๐Ÿ”ข ๐Ÿ“› `router` ๐Ÿ” `users`. - -๐Ÿšฅ ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ—„ 1๏ธโƒฃ โฎ๏ธ ๐ŸŽ, ๐Ÿ’–: - -```Python -from .routers.items import router -from .routers.users import router -``` - -`router` โšช๏ธโžก๏ธ `users` ๐Ÿ”œ ๐Ÿ“ 1๏ธโƒฃ โšช๏ธโžก๏ธ `items` & ๐Ÿ‘ฅ ๐Ÿšซ๐Ÿ”œ ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ซ ๐ŸŽ ๐Ÿ•ฐ. - -, ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ‘ซ ๐ŸŽ ๐Ÿ“, ๐Ÿ‘ฅ ๐Ÿ—„ ๐Ÿ” ๐Ÿ”—: - -```Python hl_lines="5" title="app/main.py" -{!../../docs_src/bigger_applications/app/main.py!} -``` - -### ๐Ÿ”Œ `APIRouter`โ“‚ `users` & `items` - -๐Ÿ”œ, โžก๏ธ ๐Ÿ”Œ `router`โ“‚ โšช๏ธโžก๏ธ ๐Ÿ” `users` & `items`: - -```Python hl_lines="10-11" title="app/main.py" -{!../../docs_src/bigger_applications/app/main.py!} -``` - -/// info - -`users.router` ๐Ÿ”Œ `APIRouter` ๐Ÿ”˜ ๐Ÿ“ `app/routers/users.py`. - - & `items.router` ๐Ÿ”Œ `APIRouter` ๐Ÿ”˜ ๐Ÿ“ `app/routers/items.py`. - -/// - -โฎ๏ธ `app.include_router()` ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ”  `APIRouter` ๐Ÿ‘‘ `FastAPI` ๐Ÿˆธ. - -โšซ๏ธ ๐Ÿ”œ ๐Ÿ”Œ ๐ŸŒ ๐Ÿ›ฃ โšช๏ธโžก๏ธ ๐Ÿ‘ˆ ๐Ÿ“ป ๐Ÿ• โšซ๏ธ. - -/// note | ๐Ÿ“ก โ„น - -โšซ๏ธ ๐Ÿ”œ ๐Ÿค™ ๐Ÿ”˜ โœ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”  *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ ๐Ÿ“ฃ `APIRouter`. - -, โ›… ๐ŸŽ‘, โšซ๏ธ ๐Ÿ”œ ๐Ÿค™ ๐Ÿ‘ท ๐Ÿšฅ ๐ŸŒ ๐ŸŽ ๐Ÿ‘ ๐Ÿ“ฑ. - -/// - -/// check - -๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿ˜Ÿ ๐Ÿ”ƒ ๐ŸŽญ ๐Ÿ•โ” โœ… ๐Ÿ“ป. - -๐Ÿ‘‰ ๐Ÿ”œ โœŠ โฒ & ๐Ÿ”œ ๐Ÿ•ด ๐Ÿ”จ ๐Ÿ•ด. - -โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐Ÿ“‰ ๐ŸŽญ. ๐Ÿ‘ถ - -/// - -### ๐Ÿ”Œ `APIRouter` โฎ๏ธ ๐Ÿ›ƒ `prefix`, `tags`, `responses`, & `dependencies` - -๐Ÿ”œ, โžก๏ธ ๐ŸŒˆ ๐Ÿ‘† ๐Ÿข ๐Ÿค ๐Ÿ‘† `app/internal/admin.py` ๐Ÿ“. - -โšซ๏ธ ๐Ÿ”Œ `APIRouter` โฎ๏ธ ๐Ÿ“ก *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿข ๐Ÿ’ฐ ๐Ÿ–– ๐Ÿ“š ๐Ÿ—. - -๐Ÿ‘‰ ๐Ÿ–ผ โšซ๏ธ ๐Ÿ”œ ๐Ÿ’Ž ๐Ÿ™…. โœ‹๏ธ โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘ˆ โ†ฉ๏ธ โšซ๏ธ ๐Ÿ’ฐ โฎ๏ธ ๐ŸŽ ๐Ÿ— ๐Ÿข, ๐Ÿ‘ฅ ๐Ÿšซ๐Ÿ”œ ๐Ÿ”€ โšซ๏ธ & ๐Ÿšฎ `prefix`, `dependencies`, `tags`, โ™’๏ธ. ๐Ÿ”— `APIRouter`: - -```Python hl_lines="3" title="app/internal/admin.py" -{!../../docs_src/bigger_applications/app/internal/admin.py!} -``` - -โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿ’š โš’ ๐Ÿ›ƒ `prefix` ๐Ÿ•โ” โœ… `APIRouter` ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿšฎ *โžก ๐Ÿ› ๏ธ* โ–ถ๏ธ โฎ๏ธ `/admin`, ๐Ÿ‘ฅ ๐Ÿ’š ๐Ÿ” โšซ๏ธ โฎ๏ธ `dependencies` ๐Ÿ‘ฅ โช โœ”๏ธ ๐Ÿ‘‰ ๐Ÿ—, & ๐Ÿ‘ฅ ๐Ÿ’š ๐Ÿ”Œ `tags` & `responses`. - -๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ ๐Ÿ‘ˆ ๐Ÿต โœ”๏ธ ๐Ÿ”€ โฎ๏ธ `APIRouter` ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘ˆ ๐Ÿ”ข `app.include_router()`: - -```Python hl_lines="14-17" title="app/main.py" -{!../../docs_src/bigger_applications/app/main.py!} -``` - -๐Ÿ‘ˆ ๐ŸŒŒ, โฎ๏ธ `APIRouter` ๐Ÿ”œ ๐Ÿšง โš—, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ’ฐ ๐Ÿ‘ˆ ๐ŸŽ `app/internal/admin.py` ๐Ÿ“ โฎ๏ธ ๐ŸŽ ๐Ÿ— ๐Ÿข. - -๐Ÿ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ“ฑ, ๐Ÿ”  *โžก ๐Ÿ› ๏ธ* โšช๏ธโžก๏ธ `admin` ๐Ÿ•น ๐Ÿ”œ โœ”๏ธ: - -* ๐Ÿ”ก `/admin`. -* ๐Ÿ”– `admin`. -* ๐Ÿ”— `get_token_header`. -* ๐Ÿ“จ `418`. ๐Ÿ‘ถ - -โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ•ด ๐Ÿ“‰ ๐Ÿ‘ˆ `APIRouter` ๐Ÿ‘† ๐Ÿ“ฑ, ๐Ÿšซ ๐Ÿ™† ๐ŸŽ ๐Ÿ“Ÿ ๐Ÿ‘ˆ โš™๏ธ โšซ๏ธ. - -, ๐Ÿ–ผ, ๐ŸŽ ๐Ÿ— ๐Ÿ’ช โš™๏ธ ๐ŸŽ `APIRouter` โฎ๏ธ ๐ŸŽ ๐Ÿค ๐Ÿ‘ฉโ€๐Ÿ”ฌ. - -### ๐Ÿ”Œ *โžก ๐Ÿ› ๏ธ* - -๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšฎ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”— `FastAPI` ๐Ÿ“ฑ. - -๐Ÿ“ฅ ๐Ÿ‘ฅ โšซ๏ธ... ๐ŸŽฆ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿคท: - -```Python hl_lines="21-23" title="app/main.py" -{!../../docs_src/bigger_applications/app/main.py!} -``` - -& โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘ท โ˜‘, ๐Ÿ‘ฏโ€โ™‚๏ธ โฎ๏ธ ๐ŸŒ ๐ŸŽ *โžก ๐Ÿ› ๏ธ* ๐Ÿšฎ โฎ๏ธ `app.include_router()`. - -/// info | ๐Ÿ“ถ ๐Ÿ“ก โ„น - -**๐Ÿ—’**: ๐Ÿ‘‰ ๐Ÿ“ถ ๐Ÿ“ก โ„น ๐Ÿ‘ˆ ๐Ÿ‘† ๐ŸŽฒ ๐Ÿ’ช **๐Ÿšถ**. - ---- - - `APIRouter`โ“‚ ๐Ÿšซ "๐Ÿ—ป", ๐Ÿ‘ซ ๐Ÿšซ ๐Ÿ‘ฝ โšช๏ธโžก๏ธ ๐ŸŽ‚ ๐Ÿˆธ. - -๐Ÿ‘‰ โ†ฉ๏ธ ๐Ÿ‘ฅ ๐Ÿ’š ๐Ÿ”Œ ๐Ÿ‘ซ *โžก ๐Ÿ› ๏ธ* ๐Ÿ—„ ๐Ÿ”— & ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข. - -๐Ÿ‘ฅ ๐Ÿšซ๐Ÿ”œ โŽ ๐Ÿ‘ซ & "๐Ÿ—ป" ๐Ÿ‘ซ โžก ๐ŸŽ‚, *โžก ๐Ÿ› ๏ธ* "๐Ÿ––" (๐Ÿค-โœ), ๐Ÿšซ ๐Ÿ”Œ ๐Ÿ”—. - -/// - -## โœ… ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ - -๐Ÿ”œ, ๐Ÿƒ `uvicorn`, โš™๏ธ ๐Ÿ•น `app.main` & ๐Ÿ”ข `app`: - -
- -```console -$ uvicorn app.main:app --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -& ๐Ÿ“‚ ๐Ÿฉบ http://127.0.0.1:8000/docs. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ, โœ… โžก โšช๏ธโžก๏ธ ๐ŸŒ ๐Ÿ”, โš™๏ธ โ˜‘ โžก (& ๐Ÿ”ก) & โ˜‘ ๐Ÿ”–: - - - -## ๐Ÿ”Œ ๐ŸŽ ๐Ÿ“ป ๐Ÿ’— ๐Ÿ•ฐ โฎ๏ธ ๐ŸŽ `prefix` - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `.include_router()` ๐Ÿ’— ๐Ÿ•ฐ โฎ๏ธ *๐ŸŽ* ๐Ÿ“ป โš™๏ธ ๐ŸŽ ๐Ÿ”ก. - -๐Ÿ‘‰ ๐Ÿ’ช โš , ๐Ÿ–ผ, ๐ŸŽฆ ๐ŸŽ ๐Ÿ› ๏ธ ๐Ÿ”ฝ ๐ŸŽ ๐Ÿ”ก, โœ… `/api/v1` & `/api/latest`. - -๐Ÿ‘‰ ๐Ÿง โš™๏ธ ๐Ÿ‘ˆ ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿšซ ๐Ÿค™ ๐Ÿ’ช, โœ‹๏ธ โšซ๏ธ ๐Ÿ“ค ๐Ÿ’ผ ๐Ÿ‘†. - -## ๐Ÿ”Œ `APIRouter` โž•1๏ธโƒฃ - -๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”Œ `APIRouter` `FastAPI` ๐Ÿˆธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”Œ `APIRouter` โž•1๏ธโƒฃ `APIRouter` โš™๏ธ: - -```Python -router.include_router(other_router) -``` - -โš’ ๐Ÿ’ญ ๐Ÿ‘† โšซ๏ธ โญ ๐Ÿ”Œ `router` `FastAPI` ๐Ÿ“ฑ, ๐Ÿ‘ˆ *โžก ๐Ÿ› ๏ธ* โšช๏ธโžก๏ธ `other_router` ๐Ÿ”Œ. diff --git a/docs/em/docs/tutorial/body-fields.md b/docs/em/docs/tutorial/body-fields.md deleted file mode 100644 index f202284b5..000000000 --- a/docs/em/docs/tutorial/body-fields.md +++ /dev/null @@ -1,60 +0,0 @@ -# ๐Ÿ’ช - ๐Ÿ‘ - -๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ– ๐Ÿ”ฌ & ๐Ÿ—ƒ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”ข โฎ๏ธ `Query`, `Path` & `Body`, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”ฌ & ๐Ÿ—ƒ ๐Ÿ”˜ Pydantic ๐Ÿท โš™๏ธ Pydantic `Field`. - -## ๐Ÿ—„ `Field` - -๐Ÿฅ‡, ๐Ÿ‘† โœ”๏ธ ๐Ÿ—„ โšซ๏ธ: - -{* ../../docs_src/body_fields/tutorial001.py hl[4] *} - -/// warning - -๐Ÿ‘€ ๐Ÿ‘ˆ `Field` ๐Ÿ—„ ๐Ÿ”— โšช๏ธโžก๏ธ `pydantic`, ๐Ÿšซ โšช๏ธโžก๏ธ `fastapi` ๐ŸŒ ๐ŸŽ‚ (`Query`, `Path`, `Body`, โ™’๏ธ). - -/// - -## ๐Ÿ“ฃ ๐Ÿท ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช โคด๏ธ โš™๏ธ `Field` โฎ๏ธ ๐Ÿท ๐Ÿ”ข: - -{* ../../docs_src/body_fields/tutorial001.py hl[11:14] *} - -`Field` ๐Ÿ‘ท ๐ŸŽ ๐ŸŒŒ `Query`, `Path` & `Body`, โšซ๏ธ โœ”๏ธ ๐ŸŒ ๐ŸŽ ๐Ÿ”ข, โ™’๏ธ. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿค™, `Query`, `Path` & ๐ŸŽ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โญ โœ ๐ŸŽš ๐Ÿฟ โš  `Param` ๐ŸŽ“, โ” โšซ๏ธ ๐Ÿฟ Pydantic `FieldInfo` ๐ŸŽ“. - - & Pydantic `Field` ๐Ÿ“จ ๐Ÿ‘ `FieldInfo` ๐Ÿ‘. - -`Body` ๐Ÿ“จ ๐ŸŽš ๐Ÿฟ `FieldInfo` ๐Ÿ”—. & ๐Ÿ“ค ๐ŸŽ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โช ๐Ÿ‘ˆ ๐Ÿฟ `Body` ๐ŸŽ“. - -๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ—„ `Query`, `Path`, & ๐ŸŽ โšช๏ธโžก๏ธ `fastapi`, ๐Ÿ‘ˆ ๐Ÿค™ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“จ ๐ŸŽ ๐ŸŽ“. - -/// - -/// tip - -๐Ÿ‘€ โ” ๐Ÿ”  ๐Ÿท ๐Ÿ”ข โฎ๏ธ ๐Ÿ†Ž, ๐Ÿ”ข ๐Ÿ’ฒ & `Field` โœ”๏ธ ๐ŸŽ ๐Ÿ“Š *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”ข, โฎ๏ธ `Field` โ†ฉ๏ธ `Path`, `Query` & `Body`. - -/// - -## ๐Ÿšฎ โž• โ„น - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ โž• โ„น `Field`, `Query`, `Body`, โ™’๏ธ. & โšซ๏ธ ๐Ÿ”œ ๐Ÿ”Œ ๐Ÿ— ๐ŸŽป ๐Ÿ”—. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ก ๐ŸŒ… ๐Ÿ”ƒ โŽ โž• โ„น โช ๐Ÿฉบ, ๐Ÿ•โ” ๐Ÿซ ๐Ÿ“ฃ ๐Ÿ–ผ. - -/// warning - -โž• ๐Ÿ”‘ ๐Ÿšถโ€โ™€๏ธ `Field` ๐Ÿ”œ ๐ŸŽ ๐Ÿ“‰ ๐Ÿ—„ ๐Ÿ”— ๐Ÿ‘† ๐Ÿˆธ. -๐Ÿ‘ซ ๐Ÿ”‘ 5๏ธโƒฃ๐Ÿ“† ๐Ÿšซ ๐ŸŽฏ ๐Ÿ• ๐Ÿ—„ ๐Ÿ”ง, ๐Ÿ—„ ๐Ÿงฐ, ๐Ÿ–ผ [๐Ÿ—„ ๐Ÿ’ณ](https://validator.swagger.io/), 5๏ธโƒฃ๐Ÿ“† ๐Ÿšซ ๐Ÿ‘ท โฎ๏ธ ๐Ÿ‘† ๐Ÿ— ๐Ÿ”—. - -/// - -## ๐ŸŒƒ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ Pydantic `Field` ๐Ÿ“ฃ โž• ๐Ÿ”ฌ & ๐Ÿ—ƒ ๐Ÿท ๐Ÿ”ข. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โž• ๐Ÿ‡จ๐Ÿ‡ป โŒ ๐Ÿšถโ€โ™€๏ธ ๐ŸŒ– ๐ŸŽป ๐Ÿ”— ๐Ÿ—ƒ. diff --git a/docs/em/docs/tutorial/body-multiple-params.md b/docs/em/docs/tutorial/body-multiple-params.md deleted file mode 100644 index 3a2f2bd54..000000000 --- a/docs/em/docs/tutorial/body-multiple-params.md +++ /dev/null @@ -1,171 +0,0 @@ -# ๐Ÿ’ช - ๐Ÿ’— ๐Ÿ”ข - -๐Ÿ”œ ๐Ÿ‘ˆ ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ‘€ โ” โš™๏ธ `Path` & `Query`, โžก๏ธ ๐Ÿ‘€ ๐ŸŒ… ๐Ÿง โš™๏ธ ๐Ÿ“จ ๐Ÿ’ช ๐Ÿ“„. - -## ๐ŸŒ€ `Path`, `Query` & ๐Ÿ’ช ๐Ÿ”ข - -๐Ÿฅ‡, โ†—๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐ŸŒ€ `Path`, `Query` & ๐Ÿ“จ ๐Ÿ’ช ๐Ÿ”ข ๐Ÿ“„ โžก & **FastAPI** ๐Ÿ”œ ๐Ÿ’ญ โšซ๏ธโ”. - -& ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ’ช ๐Ÿ”ข ๐Ÿ“ฆ, โš’ ๐Ÿ”ข `None`: - -{* ../../docs_src/body_multiple_params/tutorial001.py hl[19:21] *} - -/// note - -๐Ÿ‘€ ๐Ÿ‘ˆ, ๐Ÿ‘‰ ๐Ÿ’ผ, `item` ๐Ÿ‘ˆ ๐Ÿ”œ โœŠ โšช๏ธโžก๏ธ ๐Ÿ’ช ๐Ÿ“ฆ. โšซ๏ธ โœ”๏ธ `None` ๐Ÿ”ข ๐Ÿ’ฒ. - -/// - -## ๐Ÿ’— ๐Ÿ’ช ๐Ÿ”ข - -โฎ๏ธ ๐Ÿ–ผ, *โžก ๐Ÿ› ๏ธ* ๐Ÿ”œ โŒ› ๐ŸŽป ๐Ÿ’ช โฎ๏ธ ๐Ÿ”ข `Item`, ๐Ÿ’–: - -```JSON -{ - "name": "Foo", - "description": "The pretender", - "price": 42.0, - "tax": 3.2 -} -``` - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ’— ๐Ÿ’ช ๐Ÿ”ข, โœ… `item` & `user`: - -{* ../../docs_src/body_multiple_params/tutorial002.py hl[22] *} - -๐Ÿ‘‰ ๐Ÿ’ผ, **FastAPI** ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ“ค ๐ŸŒ… ๐ŸŒ˜ 1๏ธโƒฃ ๐Ÿ’ช ๐Ÿ”ข ๐Ÿ”ข (2๏ธโƒฃ ๐Ÿ”ข ๐Ÿ‘ˆ Pydantic ๐Ÿท). - -, โšซ๏ธ ๐Ÿ”œ โคด๏ธ โš™๏ธ ๐Ÿ”ข ๐Ÿ“› ๐Ÿ”‘ (๐Ÿ‘ ๐Ÿ“›) ๐Ÿ’ช, & โŒ› ๐Ÿ’ช ๐Ÿ’–: - -```JSON -{ - "item": { - "name": "Foo", - "description": "The pretender", - "price": 42.0, - "tax": 3.2 - }, - "user": { - "username": "dave", - "full_name": "Dave Grohl" - } -} -``` - -/// note - -๐Ÿ‘€ ๐Ÿ‘ˆ โœ‹๏ธ `item` ๐Ÿ“ฃ ๐ŸŽ ๐ŸŒŒ โญ, โšซ๏ธ ๐Ÿ”œ โŒ› ๐Ÿ”˜ ๐Ÿ’ช โฎ๏ธ ๐Ÿ”‘ `item`. - -/// - -**FastAPI** ๐Ÿ”œ ๐Ÿง ๐Ÿ› ๏ธ โšช๏ธโžก๏ธ ๐Ÿ“จ, ๐Ÿ‘ˆ ๐Ÿ”ข `item` ๐Ÿ“จ โšซ๏ธ ๐ŸŽฏ ๐ŸŽš & ๐ŸŽ `user`. - -โšซ๏ธ ๐Ÿ”œ ๐ŸŽญ ๐Ÿ”ฌ โš— ๐Ÿ’ฝ, & ๐Ÿ”œ ๐Ÿ“„ โšซ๏ธ ๐Ÿ’– ๐Ÿ‘ˆ ๐Ÿ—„ ๐Ÿ”— & ๐Ÿง ๐Ÿฉบ. - -## โญ ๐Ÿ’ฒ ๐Ÿ’ช - -๐ŸŽ ๐ŸŒŒ ๐Ÿ“ค `Query` & `Path` ๐Ÿ”ฌ โž• ๐Ÿ’ฝ ๐Ÿ”ข & โžก ๐Ÿ”ข, **FastAPI** ๐Ÿšš ๐ŸŒ“ `Body`. - -๐Ÿ–ผ, โ†” โฎ๏ธ ๐Ÿท, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š โœ”๏ธ โž•1๏ธโƒฃ ๐Ÿ”‘ `importance` ๐ŸŽ ๐Ÿ’ช, ๐Ÿฅˆ `item` & `user`. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ฃ โšซ๏ธ, โ†ฉ๏ธ โšซ๏ธ โญ ๐Ÿ’ฒ, **FastAPI** ๐Ÿ”œ ๐Ÿค” ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ”ข ๐Ÿ”ข. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ก **FastAPI** ๐Ÿ˜ฅ โšซ๏ธ โž•1๏ธโƒฃ ๐Ÿ’ช ๐Ÿ”‘ โš™๏ธ `Body`: - -{* ../../docs_src/body_multiple_params/tutorial003.py hl[22] *} - -๐Ÿ‘‰ ๐Ÿ’ผ, **FastAPI** ๐Ÿ”œ โŒ› ๐Ÿ’ช ๐Ÿ’–: - -```JSON -{ - "item": { - "name": "Foo", - "description": "The pretender", - "price": 42.0, - "tax": 3.2 - }, - "user": { - "username": "dave", - "full_name": "Dave Grohl" - }, - "importance": 5 -} -``` - -๐Ÿ”„, โšซ๏ธ ๐Ÿ”œ ๐Ÿ—œ ๐Ÿ“Š ๐Ÿ†Ž, โœ”, ๐Ÿ“„, โ™’๏ธ. - -## ๐Ÿ’— ๐Ÿ’ช = & ๐Ÿ”ข - -โ†—๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ– ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’ช, ๐ŸŒ– ๐Ÿ™† ๐Ÿ’ช ๐Ÿ”ข. - -, ๐Ÿ”ข, โญ ๐Ÿ’ฒ ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿ”ข, ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐ŸŽฏ ๐Ÿšฎ `Query`, ๐Ÿ‘† ๐Ÿ’ช: - -```Python -q: Union[str, None] = None -``` - -โš–๏ธ ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ & ๐Ÿ”›: - -```Python -q: str | None = None -``` - -๐Ÿ–ผ: - -{* ../../docs_src/body_multiple_params/tutorial004.py hl[27] *} - -/// info - -`Body` โœ”๏ธ ๐ŸŒ ๐ŸŽ โž• ๐Ÿ”ฌ & ๐Ÿ—ƒ ๐Ÿ”ข `Query`,`Path` & ๐ŸŽ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โช. - -/// - -## โฏ ๐Ÿ‘ ๐Ÿ’ช ๐Ÿ”ข - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿ•ด โœ”๏ธ ๐Ÿ‘ `item` ๐Ÿ’ช ๐Ÿ”ข โšช๏ธโžก๏ธ Pydantic ๐Ÿท `Item`. - -๐Ÿ”ข, **FastAPI** ๐Ÿ”œ โคด๏ธ โŒ› ๐Ÿšฎ ๐Ÿ’ช ๐Ÿ”—. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โšซ๏ธ โŒ› ๐ŸŽป โฎ๏ธ ๐Ÿ”‘ `item` & ๐Ÿ”˜ โšซ๏ธ ๐Ÿท ๐ŸŽš, โšซ๏ธ ๐Ÿ”จ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“ฃ โž• ๐Ÿ’ช ๐Ÿ”ข, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ `Body` ๐Ÿ”ข `embed`: - -```Python -item: Item = Body(embed=True) -``` - -: - -{* ../../docs_src/body_multiple_params/tutorial005.py hl[17] *} - -๐Ÿ‘‰ ๐Ÿ’ผ **FastAPI** ๐Ÿ”œ โŒ› ๐Ÿ’ช ๐Ÿ’–: - -```JSON hl_lines="2" -{ - "item": { - "name": "Foo", - "description": "The pretender", - "price": 42.0, - "tax": 3.2 - } -} -``` - -โ†ฉ๏ธ: - -```JSON -{ - "name": "Foo", - "description": "The pretender", - "price": 42.0, - "tax": 3.2 -} -``` - -## ๐ŸŒƒ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ’— ๐Ÿ’ช ๐Ÿ”ข ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, โœ‹๏ธ ๐Ÿ“จ ๐Ÿ’ช ๐Ÿ•ด โœ”๏ธ ๐Ÿ‘ ๐Ÿ’ช. - -โœ‹๏ธ **FastAPI** ๐Ÿ”œ ๐Ÿต โšซ๏ธ, ๐Ÿค ๐Ÿ‘† โ˜‘ ๐Ÿ“Š ๐Ÿ‘† ๐Ÿ”ข, & โœ” & ๐Ÿ“„ โ˜‘ ๐Ÿ”— *โžก ๐Ÿ› ๏ธ*. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ โญ ๐Ÿ’ฒ ๐Ÿ“จ ๐Ÿ• ๐Ÿ’ช. - -& ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ก **FastAPI** โฏ ๐Ÿ’ช ๐Ÿ”‘ ๐Ÿ•โ” ๐Ÿ“ค ๐Ÿ•ด ๐Ÿ‘ ๐Ÿ”ข ๐Ÿ“ฃ. diff --git a/docs/em/docs/tutorial/body-nested-models.md b/docs/em/docs/tutorial/body-nested-models.md deleted file mode 100644 index 6c8d5a610..000000000 --- a/docs/em/docs/tutorial/body-nested-models.md +++ /dev/null @@ -1,247 +0,0 @@ -# ๐Ÿ’ช - ๐Ÿ” ๐Ÿท - -โฎ๏ธ **FastAPI**, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ, โœ”, ๐Ÿ“„, & โš™๏ธ ๐ŸŽฒ ๐Ÿ™‡ ๐Ÿฆ ๐Ÿท (๐Ÿ‘ Pydantic). - -## ๐Ÿ“‡ ๐Ÿ‘ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿพ. ๐Ÿ–ผ, ๐Ÿ `list`: - -{* ../../docs_src/body_nested_models/tutorial001.py hl[14] *} - -๐Ÿ‘‰ ๐Ÿ”œ โš’ `tags` ๐Ÿ“‡, ๐Ÿ‘ โšซ๏ธ ๐Ÿšซ ๐Ÿ“ฃ ๐Ÿ†Ž ๐Ÿ”ฃ ๐Ÿ“‡. - -## ๐Ÿ“‡ ๐Ÿ‘ โฎ๏ธ ๐Ÿ†Ž ๐Ÿ”ข - -โœ‹๏ธ ๐Ÿ โœ”๏ธ ๐ŸŽฏ ๐ŸŒŒ ๐Ÿ“ฃ ๐Ÿ“‡ โฎ๏ธ ๐Ÿ”— ๐Ÿ†Ž, โš–๏ธ "๐Ÿ†Ž ๐Ÿ”ข": - -### ๐Ÿ—„ โŒจ `List` - -๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”› ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿฉ `list` ๐Ÿ“ฃ ๐Ÿ‘ซ ๐Ÿ†Ž โœ ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ”›. ๐Ÿ‘ถ - -โœ‹๏ธ ๐Ÿ โฌ โญ 3๏ธโƒฃ.9๏ธโƒฃ (3๏ธโƒฃ.6๏ธโƒฃ & ๐Ÿ”›), ๐Ÿ‘† ๐Ÿฅ‡ ๐Ÿ’ช ๐Ÿ—„ `List` โšช๏ธโžก๏ธ ๐Ÿฉ ๐Ÿ `typing` ๐Ÿ•น: - -{* ../../docs_src/body_nested_models/tutorial002.py hl[1] *} - -### ๐Ÿ“ฃ `list` โฎ๏ธ ๐Ÿ†Ž ๐Ÿ”ข - -๐Ÿ“ฃ ๐Ÿ†Ž ๐Ÿ‘ˆ โœ”๏ธ ๐Ÿ†Ž ๐Ÿ”ข (๐Ÿ”— ๐Ÿ†Ž), ๐Ÿ’– `list`, `dict`, `tuple`: - -* ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ โฌ ๐Ÿ”… ๐ŸŒ˜ 3๏ธโƒฃ.9๏ธโƒฃ, ๐Ÿ—„ ๐Ÿ‘ซ ๐ŸŒ“ โฌ โšช๏ธโžก๏ธ `typing` ๐Ÿ•น -* ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”— ๐Ÿ†Ž(โ“‚) "๐Ÿ†Ž ๐Ÿ”ข" โš™๏ธ โฌœ ๐Ÿ—œ: `[` & `]` - -๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ โšซ๏ธ ๐Ÿ”œ: - -```Python -my_list: list[str] -``` - -โฌ ๐Ÿ โญ 3๏ธโƒฃ.9๏ธโƒฃ, โšซ๏ธ ๐Ÿ”œ: - -```Python -from typing import List - -my_list: List[str] -``` - -๐Ÿ‘ˆ ๐ŸŒ ๐Ÿฉ ๐Ÿ โ• ๐Ÿ†Ž ๐Ÿ“„. - -โš™๏ธ ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿฉ โ• ๐Ÿท ๐Ÿ”ข โฎ๏ธ ๐Ÿ”— ๐Ÿ†Ž. - -, ๐Ÿ‘† ๐Ÿ–ผ, ๐Ÿ‘ฅ ๐Ÿ’ช โš’ `tags` ๐ŸŽฏ "๐Ÿ“‡ ๐ŸŽป": - -{* ../../docs_src/body_nested_models/tutorial002.py hl[14] *} - -## โš’ ๐Ÿ†Ž - -โœ‹๏ธ โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ญ ๐Ÿ”ƒ โšซ๏ธ, & ๐Ÿค” ๐Ÿ‘ˆ ๐Ÿ”– ๐Ÿšซ๐Ÿ”œ ๐Ÿšซ ๐Ÿ”, ๐Ÿ‘ซ ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ˜ ๐ŸŽป. - -& ๐Ÿ โœ”๏ธ ๐ŸŽ ๐Ÿ’ฝ ๐Ÿ†Ž โš’ ๐Ÿ˜ ๐Ÿฌ, `set`. - -โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ“ฃ `tags` โš’ ๐ŸŽป: - -{* ../../docs_src/body_nested_models/tutorial003.py hl[1,14] *} - -โฎ๏ธ ๐Ÿ‘‰, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ“จ โฎ๏ธ โŽ ๐Ÿ“Š, โšซ๏ธ ๐Ÿ”œ ๐Ÿ—œ โš’ ๐Ÿ˜ ๐Ÿฌ. - -& ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“Š, ๐Ÿšฅ โ„น โœ”๏ธ โŽ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ”ข โš’ ๐Ÿ˜ ๐Ÿฌ. - -& โšซ๏ธ ๐Ÿ”œ โœ / ๐Ÿ“„ โžก๏ธ ๐Ÿ’โ€โ™‚๏ธ. - -## ๐Ÿฆ ๐Ÿท - -๐Ÿ”  ๐Ÿ”ข Pydantic ๐Ÿท โœ”๏ธ ๐Ÿ†Ž. - -โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿ†Ž ๐Ÿ’ช โšซ๏ธ โž•1๏ธโƒฃ Pydantic ๐Ÿท. - -, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ™‡ ๐Ÿฆ ๐ŸŽป "๐ŸŽš" โฎ๏ธ ๐ŸŽฏ ๐Ÿ”ข ๐Ÿ“›, ๐Ÿ†Ž & ๐Ÿ”ฌ. - -๐ŸŒ ๐Ÿ‘ˆ, ๐ŸŽฒ ๐Ÿฆ. - -### ๐Ÿ”ฌ ๐Ÿ“Š - -๐Ÿ–ผ, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ”ฌ `Image` ๐Ÿท: - -{* ../../docs_src/body_nested_models/tutorial004.py hl[9:11] *} - -### โš™๏ธ ๐Ÿ“Š ๐Ÿ†Ž - -& โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ โšซ๏ธ ๐Ÿ†Ž ๐Ÿ”ข: - -{* ../../docs_src/body_nested_models/tutorial004.py hl[20] *} - -๐Ÿ‘‰ ๐Ÿ”œ โ›“ ๐Ÿ‘ˆ **FastAPI** ๐Ÿ”œ โŒ› ๐Ÿ’ช ๐ŸŽ: - -```JSON -{ - "name": "Foo", - "description": "The pretender", - "price": 42.0, - "tax": 3.2, - "tags": ["rock", "metal", "bar"], - "image": { - "url": "http://example.com/baz.jpg", - "name": "The Foo live" - } -} -``` - -๐Ÿ”„, ๐Ÿคธ ๐Ÿ‘ˆ ๐Ÿ“„, โฎ๏ธ **FastAPI** ๐Ÿ‘† ๐Ÿคš: - -* ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ (๐Ÿ› ๏ธ, โ™’๏ธ), ๐Ÿฆ ๐Ÿท -* ๐Ÿ’ฝ ๐Ÿ› ๏ธ -* ๐Ÿ’ฝ ๐Ÿ”ฌ -* ๐Ÿง ๐Ÿงพ - -## ๐ŸŽ ๐Ÿ†Ž & ๐Ÿ”ฌ - -โ†–๏ธ โšช๏ธโžก๏ธ ๐Ÿ˜ โญ ๐Ÿ†Ž ๐Ÿ’– `str`, `int`, `float`, โ™’๏ธ. ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŒ… ๐Ÿ— โญ ๐Ÿ†Ž ๐Ÿ‘ˆ ๐Ÿ˜– โšช๏ธโžก๏ธ `str`. - -๐Ÿ‘€ ๐ŸŒ ๐ŸŽ› ๐Ÿ‘† โœ”๏ธ, ๐Ÿ›’ ๐Ÿฉบ Pydantic ๐Ÿ˜ ๐Ÿ†Ž. ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ–ผ โญ ๐Ÿ“ƒ. - -๐Ÿ–ผ, `Image` ๐Ÿท ๐Ÿ‘ฅ โœ”๏ธ `url` ๐Ÿ‘, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ“ฃ โšซ๏ธ โ†ฉ๏ธ `str`, Pydantic `HttpUrl`: - -{* ../../docs_src/body_nested_models/tutorial005.py hl[4,10] *} - -๐ŸŽป ๐Ÿ”œ โœ… โ˜‘ ๐Ÿ“›, & ๐Ÿ“„ ๐ŸŽป ๐Ÿ”— / ๐Ÿ—„ โœ…. - -## ๐Ÿ”ข โฎ๏ธ ๐Ÿ“‡ ๐Ÿ“Š - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ Pydantic ๐Ÿท ๐Ÿพ `list`, `set`, โ™’๏ธ: - -{* ../../docs_src/body_nested_models/tutorial006.py hl[20] *} - -๐Ÿ‘‰ ๐Ÿ”œ โŒ› (๐Ÿ—œ, โœ”, ๐Ÿ“„, โ™’๏ธ) ๐ŸŽป ๐Ÿ’ช ๐Ÿ’–: - -```JSON hl_lines="11" -{ - "name": "Foo", - "description": "The pretender", - "price": 42.0, - "tax": 3.2, - "tags": [ - "rock", - "metal", - "bar" - ], - "images": [ - { - "url": "http://example.com/baz.jpg", - "name": "The Foo live" - }, - { - "url": "http://example.com/dave.jpg", - "name": "The Baz" - } - ] -} -``` - -/// info - -๐Ÿ‘€ โ” `images` ๐Ÿ”‘ ๐Ÿ”œ โœ”๏ธ ๐Ÿ“‡ ๐Ÿ–ผ ๐ŸŽš. - -/// - -## ๐Ÿ™‡ ๐Ÿฆ ๐Ÿท - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐ŸŽฒ ๐Ÿ™‡ ๐Ÿฆ ๐Ÿท: - -{* ../../docs_src/body_nested_models/tutorial007.py hl[9,14,20,23,27] *} - -/// info - -๐Ÿ‘€ โ” `Offer` โœ”๏ธ ๐Ÿ“‡ `Item`โ“‚, โ” ๐Ÿ”„ โœ”๏ธ ๐Ÿ“ฆ ๐Ÿ“‡ `Image`โ“‚ - -/// - -## ๐Ÿ’ช ๐Ÿ˜ ๐Ÿ“‡ - -๐Ÿšฅ ๐Ÿ” ๐ŸŽš ๐Ÿ’ฒ ๐ŸŽป ๐Ÿ’ช ๐Ÿ‘† โŒ› ๐ŸŽป `array` (๐Ÿ `list`), ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ†Ž ๐Ÿ”ข ๐Ÿ”ข, ๐ŸŽ Pydantic ๐Ÿท: - -```Python -images: List[Image] -``` - -โš–๏ธ ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”›: - -```Python -images: list[Image] -``` - -: - -{* ../../docs_src/body_nested_models/tutorial008.py hl[15] *} - -## ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ ๐ŸŒ - -& ๐Ÿ‘† ๐Ÿคš ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ ๐ŸŒ. - -๐Ÿฌ ๐Ÿ”˜ ๐Ÿ“‡: - - - -๐Ÿ‘† ๐Ÿšซ ๐Ÿšซ ๐Ÿคš ๐Ÿ‘‰ ๐Ÿ˜‡ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘ท ๐Ÿ”— โฎ๏ธ `dict` โ†ฉ๏ธ Pydantic ๐Ÿท. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿ˜Ÿ ๐Ÿ”ƒ ๐Ÿ‘ซ ๐Ÿ‘ฏโ€โ™‚๏ธ, ๐Ÿ“จ #๏ธโƒฃ ๐Ÿ—œ ๐Ÿ” & ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ—œ ๐Ÿ” ๐ŸŽป ๐Ÿ’โ€โ™‚๏ธ. - -## ๐Ÿ’ช โŒ `dict`โ“‚ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ’ช `dict` โฎ๏ธ ๐Ÿ”‘ ๐Ÿ†Ž & ๐Ÿ’ฒ ๐ŸŽ ๐Ÿ†Ž. - -๐Ÿต โœ”๏ธ ๐Ÿ’ญ โช โšซ๏ธโ” โ˜‘ ๐Ÿ‘/๐Ÿ”ข ๐Ÿ“› (๐Ÿ”œ ๐Ÿ’ผ โฎ๏ธ Pydantic ๐Ÿท). - -๐Ÿ‘‰ ๐Ÿ”œ โš  ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ“จ ๐Ÿ”‘ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿšซ โช ๐Ÿ’ญ. - ---- - -๐ŸŽ โš  ๐Ÿ’ผ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’š โœ”๏ธ ๐Ÿ”‘ ๐ŸŽ ๐Ÿ†Ž, โœ… `int`. - -๐Ÿ‘ˆ โšซ๏ธโ” ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ“ฅ. - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿšซ ๐Ÿ™† `dict` ๐Ÿ“ โšซ๏ธ โœ”๏ธ `int` ๐Ÿ”‘ โฎ๏ธ `float` ๐Ÿ’ฒ: - -{* ../../docs_src/body_nested_models/tutorial009.py hl[9] *} - -/// tip - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐ŸŽป ๐Ÿ•ด ๐Ÿ•โ€๐Ÿฆบ `str` ๐Ÿ”‘. - -โœ‹๏ธ Pydantic โœ”๏ธ ๐Ÿง ๐Ÿ’ฝ ๐Ÿ› ๏ธ. - -๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ช ๐Ÿ•ด ๐Ÿ“จ ๐ŸŽป ๐Ÿ”‘, ๐Ÿ“ ๐Ÿ‘ˆ ๐ŸŽป ๐Ÿ”Œ ๐Ÿ˜ ๐Ÿ”ข, Pydantic ๐Ÿ”œ ๐Ÿ—œ ๐Ÿ‘ซ & โœ” ๐Ÿ‘ซ. - - & `dict` ๐Ÿ‘† ๐Ÿ“จ `weights` ๐Ÿ”œ ๐Ÿค™ โœ”๏ธ `int` ๐Ÿ”‘ & `float` ๐Ÿ’ฒ. - -/// - -## ๐ŸŒƒ - -โฎ๏ธ **FastAPI** ๐Ÿ‘† โœ”๏ธ ๐Ÿ”† ๐Ÿ’ช ๐Ÿšš Pydantic ๐Ÿท, โช ๐Ÿšง ๐Ÿ‘† ๐Ÿ“Ÿ ๐Ÿ™…, ๐Ÿ“ & ๐Ÿ˜. - -โœ‹๏ธ โฎ๏ธ ๐ŸŒ ๐Ÿ’ฐ: - -* ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ (๐Ÿ› ๏ธ ๐ŸŒ โ—) -* ๐Ÿ’ฝ ๐Ÿ› ๏ธ (.โ“‚.. โœ / ๐Ÿ› ๏ธ) -* ๐Ÿ’ฝ ๐Ÿ”ฌ -* ๐Ÿ”— ๐Ÿงพ -* ๐Ÿง ๐Ÿฉบ diff --git a/docs/em/docs/tutorial/body-updates.md b/docs/em/docs/tutorial/body-updates.md deleted file mode 100644 index 7e2fbfaf7..000000000 --- a/docs/em/docs/tutorial/body-updates.md +++ /dev/null @@ -1,100 +0,0 @@ -# ๐Ÿ’ช - โ„น - -## โ„น โŽ โฎ๏ธ `PUT` - -โ„น ๐Ÿฌ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” `PUT` ๐Ÿ› ๏ธ. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `jsonable_encoder` ๐Ÿ—œ ๐Ÿ”ข ๐Ÿ’ฝ ๐Ÿ“Š ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿช ๐ŸŽป (โœ… โฎ๏ธ โ˜ ๐Ÿ’ฝ). ๐Ÿ–ผ, ๐Ÿญ `datetime` `str`. - -{* ../../docs_src/body_updates/tutorial001.py hl[30:35] *} - -`PUT` โš™๏ธ ๐Ÿ“จ ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿ”œ โŽ โ™ป ๐Ÿ’ฝ. - -### โš  ๐Ÿ”ƒ โŽ - -๐Ÿ‘ˆ โ›“ ๐Ÿ‘ˆ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โ„น ๐Ÿฌ `bar` โš™๏ธ `PUT` โฎ๏ธ ๐Ÿ’ช โš—: - -```Python -{ - "name": "Barz", - "price": 3, - "description": None, -} -``` - -โ†ฉ๏ธ โšซ๏ธ ๐Ÿšซ ๐Ÿ”Œ โช ๐Ÿช ๐Ÿ”ข `"tax": 20.2`, ๐Ÿ”ข ๐Ÿท ๐Ÿ”œ โœŠ ๐Ÿ”ข ๐Ÿ’ฒ `"tax": 10.5`. - -& ๐Ÿ“Š ๐Ÿ”œ ๐Ÿ–Š โฎ๏ธ ๐Ÿ‘ˆ "๐Ÿ†•" `tax` `10.5`. - -## ๐Ÿ• โ„น โฎ๏ธ `PATCH` - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” `PATCH` ๐Ÿ› ๏ธ *๐Ÿ•* โ„น ๐Ÿ’ฝ. - -๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ•ด ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š โ„น, ๐Ÿ‚ ๐ŸŽ‚ ๐Ÿฃ. - -/// note - -`PATCH` ๐ŸŒ˜ ๐Ÿ›Ž โš™๏ธ & ๐Ÿ’ญ ๐ŸŒ˜ `PUT`. - - & ๐Ÿ“š ๐Ÿ‰ โš™๏ธ ๐Ÿ•ด `PUT`, ๐Ÿ• โ„น. - -๐Ÿ‘† **๐Ÿ†“** โš™๏ธ ๐Ÿ‘ซ ๐Ÿ‘ ๐Ÿ‘† ๐Ÿ’š, **FastAPI** ๐Ÿšซ ๐Ÿšซ ๐Ÿ™† ๐Ÿšซ. - -โœ‹๏ธ ๐Ÿ‘‰ ๐Ÿฆฎ ๐ŸŽฆ ๐Ÿ‘†, ๐ŸŒ– โš–๏ธ ๐ŸŒ˜, โ” ๐Ÿ‘ซ ๐ŸŽฏ โš™๏ธ. - -/// - -### โš™๏ธ Pydantic `exclude_unset` ๐Ÿ”ข - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ“จ ๐Ÿ• โ„น, โšซ๏ธ ๐Ÿ“ถ โš  โš™๏ธ ๐Ÿ”ข `exclude_unset` Pydantic ๐Ÿท `.dict()`. - -๐Ÿ’– `item.dict(exclude_unset=True)`. - -๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ— `dict` โฎ๏ธ ๐Ÿ•ด ๐Ÿ’ฝ ๐Ÿ‘ˆ โš’ ๐Ÿ•โ” ๐Ÿ— `item` ๐Ÿท, ๐Ÿšซ ๐Ÿ”ข ๐Ÿ’ฒ. - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘‰ ๐Ÿ— `dict` โฎ๏ธ ๐Ÿ•ด ๐Ÿ’ฝ ๐Ÿ‘ˆ โš’ (๐Ÿ“จ ๐Ÿ“จ), ๐Ÿšซ ๐Ÿ”ข ๐Ÿ’ฒ: - -{* ../../docs_src/body_updates/tutorial002.py hl[34] *} - -### โš™๏ธ Pydantic `update` ๐Ÿ”ข - -๐Ÿ”œ, ๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿ“ โ™ป ๐Ÿท โš™๏ธ `.copy()`, & ๐Ÿšถโ€โ™€๏ธ `update` ๐Ÿ”ข โฎ๏ธ `dict` โš— ๐Ÿ’ฝ โ„น. - -๐Ÿ’– `stored_item_model.copy(update=update_data)`: - -{* ../../docs_src/body_updates/tutorial002.py hl[35] *} - -### ๐Ÿ• โ„น ๐ŸŒƒ - -๐Ÿ“„, โœ” ๐Ÿ• โ„น ๐Ÿ‘† ๐Ÿ”œ: - -* (โš—) โš™๏ธ `PATCH` โ†ฉ๏ธ `PUT`. -* ๐Ÿ—ƒ ๐Ÿช ๐Ÿ’ฝ. -* ๐Ÿšฎ ๐Ÿ‘ˆ ๐Ÿ’ฝ Pydantic ๐Ÿท. -* ๐Ÿ— `dict` ๐Ÿต ๐Ÿ”ข ๐Ÿ’ฒ โšช๏ธโžก๏ธ ๐Ÿ”ข ๐Ÿท (โš™๏ธ `exclude_unset`). - * ๐Ÿ‘‰ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ช โ„น ๐Ÿ•ด ๐Ÿ’ฒ ๐Ÿค™ โš’ ๐Ÿ‘ฉโ€๐Ÿ’ป, โ†ฉ๏ธ ๐Ÿ” ๐Ÿ’ฒ โช ๐Ÿช โฎ๏ธ ๐Ÿ”ข ๐Ÿ’ฒ ๐Ÿ‘† ๐Ÿท. -* โœ ๐Ÿ“ ๐Ÿช ๐Ÿท, ๐Ÿ› ๏ธ โšซ๏ธ ๐Ÿ”ข โฎ๏ธ ๐Ÿ“จ ๐Ÿ• โ„น (โš™๏ธ `update` ๐Ÿ”ข). -* ๐Ÿ—œ ๐Ÿ“ ๐Ÿท ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿช ๐Ÿ‘† ๐Ÿ’ฝ (๐Ÿ–ผ, โš™๏ธ `jsonable_encoder`). - * ๐Ÿ‘‰ โญ โš™๏ธ ๐Ÿท `.dict()` ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ”„, โœ‹๏ธ โšซ๏ธ โš’ ๐Ÿ’ญ (& ๐Ÿ—œ) ๐Ÿ’ฒ ๐Ÿ’ฝ ๐Ÿ†Ž ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ—œ ๐ŸŽป, ๐Ÿ–ผ, `datetime` `str`. -* ๐Ÿ–Š ๐Ÿ’ฝ ๐Ÿ‘† ๐Ÿ’ฝ. -* ๐Ÿ“จ โ„น ๐Ÿท. - -{* ../../docs_src/body_updates/tutorial002.py hl[30:37] *} - -/// tip - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿค™ โš™๏ธ ๐Ÿ‘‰ ๐ŸŽ โš’ โฎ๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” `PUT` ๐Ÿ› ๏ธ. - -โœ‹๏ธ ๐Ÿ–ผ ๐Ÿ“ฅ โš™๏ธ `PATCH` โ†ฉ๏ธ โšซ๏ธ โœ ๐Ÿ‘ซ โš™๏ธ ๐Ÿ’ผ. - -/// - -/// note - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿท โœ”. - -, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ“จ ๐Ÿ• โ„น ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿšซ ๐ŸŒ ๐Ÿ”ข, ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿท โฎ๏ธ ๐ŸŒ ๐Ÿ”ข โ„ข ๐Ÿ“ฆ (โฎ๏ธ ๐Ÿ”ข ๐Ÿ’ฒ โš–๏ธ `None`). - -๐Ÿ”ฌ โšช๏ธโžก๏ธ ๐Ÿท โฎ๏ธ ๐ŸŒ ๐Ÿ“ฆ ๐Ÿ’ฒ **โ„น** & ๐Ÿท โฎ๏ธ โœ” ๐Ÿ’ฒ **๐Ÿ—**, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ’ญ ๐Ÿ”ฌ [โž• ๐Ÿท](extra-models.md){.internal-link target=_blank}. - -/// diff --git a/docs/em/docs/tutorial/body.md b/docs/em/docs/tutorial/body.md deleted file mode 100644 index 09e1d7cca..000000000 --- a/docs/em/docs/tutorial/body.md +++ /dev/null @@ -1,162 +0,0 @@ -# ๐Ÿ“จ ๐Ÿ’ช - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ“Š โšช๏ธโžก๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป (โžก๏ธ ๐Ÿ’ฌ, ๐Ÿ–ฅ) ๐Ÿ‘† ๐Ÿ› ๏ธ, ๐Ÿ‘† ๐Ÿ“จ โšซ๏ธ **๐Ÿ“จ ๐Ÿ’ช**. - -**๐Ÿ“จ** ๐Ÿ’ช ๐Ÿ“Š ๐Ÿ“จ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘† ๐Ÿ› ๏ธ. **๐Ÿ“จ** ๐Ÿ’ช ๐Ÿ’ฝ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ“จ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -๐Ÿ‘† ๐Ÿ› ๏ธ ๐ŸŒ– ๐Ÿ•ง โœ”๏ธ ๐Ÿ“จ **๐Ÿ“จ** ๐Ÿ’ช. โœ‹๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿšซ ๐ŸŽฏ ๐Ÿ’ช ๐Ÿ“จ **๐Ÿ“จ** ๐Ÿ’ช ๐ŸŒ ๐Ÿ•ฐ. - -๐Ÿ“ฃ **๐Ÿ“จ** ๐Ÿ’ช, ๐Ÿ‘† โš™๏ธ Pydantic ๐Ÿท โฎ๏ธ ๐ŸŒ ๐Ÿ‘ซ ๐Ÿ‹๏ธ & ๐Ÿ’ฐ. - -/// info - -๐Ÿ“จ ๐Ÿ’ฝ, ๐Ÿ‘† ๐Ÿ”œ โš™๏ธ 1๏ธโƒฃ: `POST` (๐ŸŒ… โš ), `PUT`, `DELETE` โš–๏ธ `PATCH`. - -๐Ÿ“จ ๐Ÿ’ช โฎ๏ธ `GET` ๐Ÿ“จ โœ”๏ธ โš  ๐ŸŽญ ๐Ÿ”ง, ๐Ÿ‘, โšซ๏ธ ๐Ÿ•โ€๐Ÿฆบ FastAPI, ๐Ÿ•ด ๐Ÿ“ถ ๐Ÿ—/๐Ÿ˜• โš™๏ธ ๐Ÿ’ผ. - -โšซ๏ธ ๐Ÿšซ, ๐ŸŽ“ ๐Ÿฉบ โฎ๏ธ ๐Ÿฆ ๐ŸŽš ๐Ÿ† ๐Ÿšซ ๐ŸŽฆ ๐Ÿงพ ๐Ÿ’ช ๐Ÿ•โ” โš™๏ธ `GET`, & ๐Ÿ—ณ ๐Ÿ–• ๐Ÿ’ช ๐Ÿšซ ๐Ÿ•โ€๐Ÿฆบ โšซ๏ธ. - -/// - -## ๐Ÿ—„ Pydantic `BaseModel` - -๐Ÿฅ‡, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ—„ `BaseModel` โšช๏ธโžก๏ธ `pydantic`: - -{* ../../docs_src/body/tutorial001.py hl[4] *} - -## โœ ๐Ÿ‘† ๐Ÿ’ฝ ๐Ÿท - -โคด๏ธ ๐Ÿ‘† ๐Ÿ“ฃ ๐Ÿ‘† ๐Ÿ’ฝ ๐Ÿท ๐ŸŽ“ ๐Ÿ‘ˆ ๐Ÿ˜– โšช๏ธโžก๏ธ `BaseModel`. - -โš™๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž ๐ŸŒ ๐Ÿ”ข: - -{* ../../docs_src/body/tutorial001.py hl[7:11] *} - -๐ŸŽ ๐Ÿ•โ” ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ”ข, ๐Ÿ•โ” ๐Ÿท ๐Ÿ”ข โœ”๏ธ ๐Ÿ”ข ๐Ÿ’ฒ, โšซ๏ธ ๐Ÿšซ โœ”. โช, โšซ๏ธ โœ”. โš™๏ธ `None` โš’ โšซ๏ธ ๐Ÿ“ฆ. - -๐Ÿ–ผ, ๐Ÿ‘‰ ๐Ÿท ๐Ÿ”› ๐Ÿ“ฃ ๐ŸŽป "`object`" (โš–๏ธ ๐Ÿ `dict`) ๐Ÿ’–: - -```JSON -{ - "name": "Foo", - "description": "An optional description", - "price": 45.2, - "tax": 3.5 -} -``` - -... `description` & `tax` ๐Ÿ“ฆ (โฎ๏ธ ๐Ÿ”ข ๐Ÿ’ฒ `None`), ๐Ÿ‘‰ ๐ŸŽป "`object`" ๐Ÿ”œ โ˜‘: - -```JSON -{ - "name": "Foo", - "price": 45.2 -} -``` - -## ๐Ÿ“ฃ โšซ๏ธ ๐Ÿ”ข - -๐Ÿšฎ โšซ๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*, ๐Ÿ“ฃ โšซ๏ธ ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ“ฃ โžก & ๐Ÿ”ข ๐Ÿ”ข: - -{* ../../docs_src/body/tutorial001.py hl[18] *} - -...& ๐Ÿ“ฃ ๐Ÿšฎ ๐Ÿ†Ž ๐Ÿท ๐Ÿ‘† โœ, `Item`. - -## ๐Ÿ - -โฎ๏ธ ๐Ÿ‘ˆ ๐Ÿ ๐Ÿ†Ž ๐Ÿ“„, **FastAPI** ๐Ÿ”œ: - -* โœ ๐Ÿ’ช ๐Ÿ“จ ๐ŸŽป. -* ๐Ÿ—œ ๐Ÿ”— ๐Ÿ†Ž (๐Ÿšฅ ๐Ÿ’ช). -* โœ” ๐Ÿ’ฝ. - * ๐Ÿšฅ ๐Ÿ’ฝ โŒ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ‘Œ & ๐Ÿ†‘ โŒ, โ˜ ๏ธ โšซ๏ธโ” ๐ŸŒโ” & โšซ๏ธโ” โŒ ๐Ÿ“Š. -* ๐Ÿค ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ“Š ๐Ÿ”ข `item`. - * ๐Ÿ‘† ๐Ÿ“ฃ โšซ๏ธ ๐Ÿ”ข ๐Ÿ†Ž `Item`, ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐ŸŒ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ (๐Ÿ› ๏ธ, โ™’๏ธ) ๐ŸŒ ๐Ÿ”ข & ๐Ÿ‘ซ ๐Ÿ†Ž. -* ๐Ÿ— ๐ŸŽป ๐Ÿ”— ๐Ÿ”‘ ๐Ÿ‘† ๐Ÿท, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ซ ๐Ÿ™† ๐Ÿ™† ๐Ÿ‘† ๐Ÿ’– ๐Ÿšฅ โšซ๏ธ โš’ ๐Ÿ”‘ ๐Ÿ‘† ๐Ÿ—. -* ๐Ÿ‘ˆ ๐Ÿ”— ๐Ÿ”œ ๐Ÿ• ๐Ÿ— ๐Ÿ—„ ๐Ÿ”—, & โš™๏ธ ๐Ÿง ๐Ÿงพ โšœ. - -## ๐Ÿง ๐Ÿฉบ - -๐ŸŽป ๐Ÿ”— ๐Ÿ‘† ๐Ÿท ๐Ÿ”œ ๐Ÿ• ๐Ÿ‘† ๐Ÿ—„ ๐Ÿ— ๐Ÿ”—, & ๐Ÿ”œ ๐ŸŽฆ ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿฉบ: - - - -& ๐Ÿ”œ โš™๏ธ ๐Ÿ› ๏ธ ๐Ÿฉบ ๐Ÿ”˜ ๐Ÿ”  *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ‘ซ: - - - -## ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ - -๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ, ๐Ÿ”˜ ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš ๐Ÿ†Ž ๐Ÿ”‘ & ๐Ÿ› ๏ธ ๐ŸŒ (๐Ÿ‘‰ ๐Ÿšซ๐Ÿ”œ ๐Ÿ”จ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“จ `dict` โ†ฉ๏ธ Pydantic ๐Ÿท): - - - -๐Ÿ‘† ๐Ÿคš โŒ โœ… โŒ ๐Ÿ†Ž ๐Ÿ› ๏ธ: - - - -๐Ÿ‘‰ ๐Ÿšซ ๐Ÿคž, ๐ŸŽ‚ ๐Ÿ› ๏ธ ๐Ÿ— ๐Ÿคญ ๐Ÿ‘ˆ ๐Ÿ”ง. - -& โšซ๏ธ ๐Ÿ™‡ ๐Ÿ’ฏ ๐Ÿ”ง ๐ŸŒ“, โญ ๐Ÿ™† ๐Ÿ› ๏ธ, ๐Ÿšš โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘ท โฎ๏ธ ๐ŸŒ ๐Ÿ‘จโ€๐ŸŽจ. - -๐Ÿ“ค ๐Ÿ”€ Pydantic โšซ๏ธ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘‰. - -โฎ๏ธ ๐Ÿ–ผ โœŠ โฎ๏ธ ๐ŸŽ™ ๐ŸŽ™ ๐Ÿ“Ÿ. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš ๐ŸŽ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ โฎ๏ธ ๐Ÿ—’ & ๐ŸŒ… ๐ŸŽ ๐Ÿ ๐Ÿ‘จโ€๐ŸŽจ: - - - -/// tip - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿ—’ ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ Pydantic ๐Ÿ—’ ๐Ÿ“. - -โšซ๏ธ ๐Ÿ“‰ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ Pydantic ๐Ÿท, โฎ๏ธ: - -* ๐Ÿš˜-๐Ÿ› ๏ธ -* ๐Ÿ†Ž โœ… -* ๐Ÿ› ๏ธ -* ๐Ÿ”Ž -* ๐Ÿ”ฌ - -/// - -## โš™๏ธ ๐Ÿท - -๐Ÿ”˜ ๐Ÿ”ข, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” ๐ŸŒ ๐Ÿ”ข ๐Ÿท ๐ŸŽš ๐Ÿ”—: - -{* ../../docs_src/body/tutorial002.py hl[21] *} - -## ๐Ÿ“จ ๐Ÿ’ช โž• โžก ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ โžก ๐Ÿ”ข & ๐Ÿ“จ ๐Ÿ’ช ๐ŸŽ ๐Ÿ•ฐ. - -**FastAPI** ๐Ÿ”œ ๐Ÿค” ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ โžก ๐Ÿ”ข ๐Ÿ”œ **โœŠ โšช๏ธโžก๏ธ โžก**, & ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“ฃ Pydantic ๐Ÿท ๐Ÿ”œ **โœŠ โšช๏ธโžก๏ธ ๐Ÿ“จ ๐Ÿ’ช**. - -{* ../../docs_src/body/tutorial003.py hl[17:18] *} - -## ๐Ÿ“จ ๐Ÿ’ช โž• โžก โž• ๐Ÿ”ข ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ **๐Ÿ’ช**, **โžก** & **๐Ÿ”ข** ๐Ÿ”ข, ๐ŸŒ ๐ŸŽ ๐Ÿ•ฐ. - -**FastAPI** ๐Ÿ”œ ๐Ÿค” ๐Ÿ”  ๐Ÿ‘ซ & โœŠ ๐Ÿ“Š โšช๏ธโžก๏ธ โ˜‘ ๐Ÿฅ‰. - -{* ../../docs_src/body/tutorial004.py hl[18] *} - -๐Ÿ”ข ๐Ÿ”ข ๐Ÿ”œ ๐Ÿค” โฉ: - -* ๐Ÿšฅ ๐Ÿ”ข ๐Ÿ“ฃ **โžก**, โšซ๏ธ ๐Ÿ”œ โš™๏ธ โžก ๐Ÿ”ข. -* ๐Ÿšฅ ๐Ÿ”ข **โญ ๐Ÿ†Ž** (๐Ÿ’– `int`, `float`, `str`, `bool`, โ™’๏ธ) โšซ๏ธ ๐Ÿ”œ ๐Ÿ”ฌ **๐Ÿ”ข** ๐Ÿ”ข. -* ๐Ÿšฅ ๐Ÿ”ข ๐Ÿ“ฃ ๐Ÿ†Ž **Pydantic ๐Ÿท**, โšซ๏ธ ๐Ÿ”œ ๐Ÿ”ฌ ๐Ÿ“จ **๐Ÿ’ช**. - -/// note - -FastAPI ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ’ฒ `q` ๐Ÿšซ โœ” โ†ฉ๏ธ ๐Ÿ”ข ๐Ÿ’ฒ `= None`. - - `Union` `Union[str, None]` ๐Ÿšซ โš™๏ธ FastAPI, โœ‹๏ธ ๐Ÿ”œ โœ” ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿค ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ•โ€๐Ÿฆบ & ๐Ÿ” โŒ. - -/// - -## ๐Ÿต Pydantic - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’š โš™๏ธ Pydantic ๐Ÿท, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ **๐Ÿ’ช** ๐Ÿ”ข. ๐Ÿ‘€ ๐Ÿฉบ [๐Ÿ’ช - ๐Ÿ’— ๐Ÿ”ข: โญ ๐Ÿ’ฒ ๐Ÿ’ช](body-multiple-params.md#_2){.internal-link target=_blank}. diff --git a/docs/em/docs/tutorial/cookie-params.md b/docs/em/docs/tutorial/cookie-params.md deleted file mode 100644 index 4699fe2a5..000000000 --- a/docs/em/docs/tutorial/cookie-params.md +++ /dev/null @@ -1,35 +0,0 @@ -# ๐Ÿช ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿช ๐Ÿ”ข ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”ฌ `Query` & `Path` ๐Ÿ”ข. - -## ๐Ÿ—„ `Cookie` - -๐Ÿฅ‡ ๐Ÿ—„ `Cookie`: - -{* ../../docs_src/cookie_params/tutorial001.py hl[3] *} - -## ๐Ÿ“ฃ `Cookie` ๐Ÿ”ข - -โคด๏ธ ๐Ÿ“ฃ ๐Ÿช ๐Ÿ”ข โš™๏ธ ๐ŸŽ ๐Ÿ“Š โฎ๏ธ `Path` & `Query`. - -๐Ÿฅ‡ ๐Ÿ’ฒ ๐Ÿ”ข ๐Ÿ’ฒ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐ŸŒ โž• ๐Ÿ”ฌ โš–๏ธ โœ ๐Ÿ”ข: - -{* ../../docs_src/cookie_params/tutorial001.py hl[9] *} - -/// note | ๐Ÿ“ก โ„น - -`Cookie` "๐Ÿ‘ญ" ๐ŸŽ“ `Path` & `Query`. โšซ๏ธ ๐Ÿ˜– โšช๏ธโžก๏ธ ๐ŸŽ โš  `Param` ๐ŸŽ“. - -โœ‹๏ธ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ—„ `Query`, `Path`, `Cookie` & ๐ŸŽ โšช๏ธโžก๏ธ `fastapi`, ๐Ÿ‘ˆ ๐Ÿค™ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“จ ๐ŸŽ ๐ŸŽ“. - -/// - -/// info - -๐Ÿ“ฃ ๐Ÿช, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Cookie`, โ†ฉ๏ธ โช ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿ”ข. - -/// - -## ๐ŸŒƒ - -๐Ÿ“ฃ ๐Ÿช โฎ๏ธ `Cookie`, โš™๏ธ ๐ŸŽ โš  โš“ `Query` & `Path`. diff --git a/docs/em/docs/tutorial/cors.md b/docs/em/docs/tutorial/cors.md deleted file mode 100644 index 44ab4adc5..000000000 --- a/docs/em/docs/tutorial/cors.md +++ /dev/null @@ -1,85 +0,0 @@ -# โšœ (โœ–๏ธ-๐Ÿ‡จ๐Ÿ‡ณ โ„น ๐Ÿค) - -โšœ โš–๏ธ "โœ–๏ธ-๐Ÿ‡จ๐Ÿ‡ณ โ„น ๐Ÿค" ๐Ÿ”— โš  ๐Ÿ•โ” ๐Ÿ•ธ ๐Ÿƒโ€โ™‚ ๐Ÿ–ฅ โœ”๏ธ ๐Ÿ•ธ ๐Ÿ“Ÿ ๐Ÿ‘ˆ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป, & ๐Ÿ‘ฉโ€๐Ÿ’ป ๐ŸŽ "๐Ÿ‡จ๐Ÿ‡ณ" ๐ŸŒ˜ ๐Ÿ•ธ. - -## ๐Ÿ‡จ๐Ÿ‡ณ - -๐Ÿ‡จ๐Ÿ‡ณ ๐ŸŒ€ ๐Ÿ› ๏ธ (`http`, `https`), ๐Ÿ†” (`myapp.com`, `localhost`, `localhost.tiangolo.com`), & โ›ด (`80`, `443`, `8080`). - -, ๐ŸŒ ๐Ÿ‘ซ ๐ŸŽ ๐Ÿ‡จ๐Ÿ‡ณ: - -* `http://localhost` -* `https://localhost` -* `http://localhost:8080` - -๐Ÿšฅ ๐Ÿ‘ซ ๐ŸŒ `localhost`, ๐Ÿ‘ซ โš™๏ธ ๐ŸŽ ๐Ÿ› ๏ธ โš–๏ธ โ›ด,, ๐Ÿ‘ซ ๐ŸŽ "๐Ÿ‡จ๐Ÿ‡ณ". - -## ๐Ÿ” - -, โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† โœ”๏ธ ๐Ÿ•ธ ๐Ÿƒ ๐Ÿ‘† ๐Ÿ–ฅ `http://localhost:8080`, & ๐Ÿšฎ ๐Ÿ•ธ ๐Ÿ”„ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿƒ `http://localhost` (โ†ฉ๏ธ ๐Ÿ‘ฅ ๐Ÿšซ โœ” โ›ด, ๐Ÿ–ฅ ๐Ÿ”œ ๐Ÿค” ๐Ÿ”ข โ›ด `80`). - -โคด๏ธ, ๐Ÿ–ฅ ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” `OPTIONS` ๐Ÿ“จ ๐Ÿ‘ฉโ€๐Ÿ’ป, & ๐Ÿšฅ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“จ โ˜‘ ๐ŸŽš โœ” ๐Ÿ“ป โšช๏ธโžก๏ธ ๐Ÿ‘‰ ๐ŸŽ ๐Ÿ‡จ๐Ÿ‡ณ (`http://localhost:8080`) โคด๏ธ ๐Ÿ–ฅ ๐Ÿ”œ โžก๏ธ ๐Ÿ•ธ ๐Ÿ•ธ ๐Ÿ“จ ๐Ÿšฎ ๐Ÿ“จ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -๐Ÿ† ๐Ÿ‘‰, ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ โœ”๏ธ ๐Ÿ“‡ "โœ” ๐Ÿ‡จ๐Ÿ‡ณ". - -๐Ÿ‘‰ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ”œ โœ”๏ธ ๐Ÿ”Œ `http://localhost:8080` ๐Ÿ•ธ ๐Ÿ‘ท โ˜‘. - -## ๐Ÿƒ - -โšซ๏ธ ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“‡ `"*"` ("๐Ÿƒ") ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐ŸŒ โœ”. - -โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ•ด โœ” ๐ŸŽฏ ๐Ÿ†Ž ๐Ÿ“ป, ๐Ÿšซ ๐ŸŒ ๐Ÿ‘ˆ ๐Ÿ”Œ ๐ŸŽ“: ๐Ÿช, โœ” ๐ŸŽš ๐Ÿ’– ๐Ÿ“š โš™๏ธ โฎ๏ธ ๐Ÿ“จ ๐Ÿค, โ™’๏ธ. - -, ๐ŸŒ ๐Ÿ‘ท โ˜‘, โšซ๏ธ ๐Ÿ‘ป โœ” ๐ŸŽฏ โœ” ๐Ÿ‡จ๐Ÿ‡ณ. - -## โš™๏ธ `CORSMiddleware` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— โšซ๏ธ ๐Ÿ‘† **FastAPI** ๐Ÿˆธ โš™๏ธ `CORSMiddleware`. - -* ๐Ÿ—„ `CORSMiddleware`. -* โœ ๐Ÿ“‡ โœ” ๐Ÿ‡จ๐Ÿ‡ณ (๐ŸŽป). -* ๐Ÿšฎ โšซ๏ธ "๐Ÿ› ๏ธ" ๐Ÿ‘† **FastAPI** ๐Ÿˆธ. - -๐Ÿ‘† ๐Ÿ’ช โœ” ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป โœ”: - -* ๐ŸŽ“ (โœ” ๐ŸŽš, ๐Ÿช, โ™’๏ธ). -* ๐ŸŽฏ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ”ฌ (`POST`, `PUT`) โš–๏ธ ๐ŸŒ ๐Ÿ‘ซ โฎ๏ธ ๐Ÿƒ `"*"`. -* ๐ŸŽฏ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐ŸŽš โš–๏ธ ๐ŸŒ ๐Ÿ‘ซ โฎ๏ธ ๐Ÿƒ `"*"`. - -{* ../../docs_src/cors/tutorial001.py hl[2,6:11,13:19] *} - -๐Ÿ”ข ๐Ÿ”ข โš™๏ธ `CORSMiddleware` ๐Ÿ› ๏ธ ๐Ÿšซ ๐Ÿ”ข, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐ŸŽฏ ๐Ÿ› ๏ธ ๐ŸŽฏ ๐Ÿ‡จ๐Ÿ‡ณ, ๐Ÿ‘ฉโ€๐Ÿ”ฌ, โš–๏ธ ๐ŸŽš, โœ” ๐Ÿ–ฅ โœ” โš™๏ธ ๐Ÿ‘ซ โœ–๏ธ-๐Ÿ†” ๐Ÿ”‘. - -๐Ÿ“„ โŒ ๐Ÿ•โ€๐Ÿฆบ: - -* `allow_origins` - ๐Ÿ“‡ ๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ‘ˆ ๐Ÿ”œ โœ” โš’ โœ–๏ธ-๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ“จ. ๐Ÿคถ โ“‚. `['https://example.org', 'https://www.example.org']`. ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `['*']` โœ” ๐Ÿ™† ๐Ÿ‡จ๐Ÿ‡ณ. -* `allow_origin_regex` - ๐ŸŽป ๐ŸŽป ๐Ÿ ๐Ÿ›ก ๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ‘ˆ ๐Ÿ”œ โœ” โš’ โœ–๏ธ-๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ“จ. โœ… `'https://.*\.example\.org'`. -* `allow_methods` - ๐Ÿ“‡ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ‘ˆ ๐Ÿ”œ โœ” โœ–๏ธ-๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ“จ. ๐Ÿ”ข `['GET']`. ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `['*']` โœ” ๐ŸŒ ๐Ÿฉ ๐Ÿ‘ฉโ€๐Ÿ”ฌ. -* `allow_headers` - ๐Ÿ“‡ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ•โ€๐Ÿฆบ โœ–๏ธ-๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ“จ. ๐Ÿ”ข `[]`. ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `['*']` โœ” ๐ŸŒ ๐ŸŽš. `Accept`, `Accept-Language`, `Content-Language` & `Content-Type` ๐ŸŽš ๐Ÿ•ง โœ” ๐Ÿ™… โšœ ๐Ÿ“จ. -* `allow_credentials` - ๐ŸŽฆ ๐Ÿ‘ˆ ๐Ÿช ๐Ÿ”œ ๐Ÿ•โ€๐Ÿฆบ โœ–๏ธ-๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ“จ. ๐Ÿ”ข `False`. , `allow_origins` ๐Ÿšซ๐Ÿ”œ โš’ `['*']` ๐ŸŽ“ โœ”, ๐Ÿ‡จ๐Ÿ‡ณ ๐Ÿ”œ โœ”. -* `expose_headers` - ๐ŸŽฆ ๐Ÿ™† ๐Ÿ“จ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ”œ โš’ โ™ฟ ๐Ÿ–ฅ. ๐Ÿ”ข `[]`. -* `max_age` - โš’ ๐Ÿ”† ๐Ÿ•ฐ ๐Ÿฅˆ ๐Ÿ–ฅ ๐Ÿ’พ โšœ ๐Ÿ“จ. ๐Ÿ”ข `600`. - -๐Ÿ› ๏ธ ๐Ÿ“จ 2๏ธโƒฃ ๐ŸŽฏ ๐Ÿ†Ž ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ... - -### โšœ ๐Ÿ›ซ ๐Ÿ“จ - -๐Ÿ‘‰ ๐Ÿ™† `OPTIONS` ๐Ÿ“จ โฎ๏ธ `Origin` & `Access-Control-Request-Method` ๐ŸŽš. - -๐Ÿ‘‰ ๐Ÿ’ผ ๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿ†˜ ๐Ÿ“จ ๐Ÿ“จ & ๐Ÿ“จ โฎ๏ธ โ˜‘ โšœ ๐ŸŽš, & ๐Ÿ‘ฏโ€โ™‚๏ธ `200` โš–๏ธ `400` ๐Ÿ“จ ๐ŸŽ“ ๐ŸŽฏ. - -### ๐Ÿ™… ๐Ÿ“จ - -๐Ÿ™† ๐Ÿ“จ โฎ๏ธ `Origin` ๐ŸŽš. ๐Ÿ‘‰ ๐Ÿ’ผ ๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ“จ ๐Ÿ”˜ ๐Ÿ˜, โœ‹๏ธ ๐Ÿ”œ ๐Ÿ”Œ โ˜‘ โšœ ๐ŸŽš ๐Ÿ”› ๐Ÿ“จ. - -## ๐ŸŒ… โ„น - -๐ŸŒ– โ„น ๐Ÿ”ƒ โšœ, โœ… ๐ŸฆŽ โšœ ๐Ÿงพ. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.middleware.cors import CORSMiddleware`. - -**FastAPI** ๐Ÿšš ๐Ÿ“š ๐Ÿ› ๏ธ `fastapi.middleware` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ› ๏ธ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// diff --git a/docs/em/docs/tutorial/debugging.md b/docs/em/docs/tutorial/debugging.md deleted file mode 100644 index 97e61a763..000000000 --- a/docs/em/docs/tutorial/debugging.md +++ /dev/null @@ -1,113 +0,0 @@ -# ๐Ÿ› ๏ธ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— ๐Ÿ•น ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ, ๐Ÿ–ผ โฎ๏ธ ๐ŸŽ™ ๐ŸŽ™ ๐Ÿ“Ÿ โš–๏ธ ๐Ÿ—’. - -## ๐Ÿค™ `uvicorn` - -๐Ÿ‘† FastAPI ๐Ÿˆธ, ๐Ÿ—„ & ๐Ÿƒ `uvicorn` ๐Ÿ”—: - -{* ../../docs_src/debugging/tutorial001.py hl[1,15] *} - -### ๐Ÿ”ƒ `__name__ == "__main__"` - -๐Ÿ‘‘ ๐ŸŽฏ `__name__ == "__main__"` โœ”๏ธ ๐Ÿ“Ÿ ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“ ๐Ÿค™ โฎ๏ธ: - -
- -```console -$ python myapp.py -``` - -
- -โœ‹๏ธ ๐Ÿšซ ๐Ÿค™ ๐Ÿ•โ” โž•1๏ธโƒฃ ๐Ÿ“ ๐Ÿ—„ โšซ๏ธ, ๐Ÿ’–: - -```Python -from myapp import app -``` - -#### ๐ŸŒ… โ„น - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿ“ ๐ŸŒŸ `myapp.py`. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒ โšซ๏ธ โฎ๏ธ: - -
- -```console -$ python myapp.py -``` - -
- -โคด๏ธ ๐Ÿ”— ๐Ÿ”ข `__name__` ๐Ÿ‘† ๐Ÿ“, โœ ๐Ÿ” ๐Ÿ, ๐Ÿ”œ โœ”๏ธ ๐Ÿ’ฒ ๐ŸŽป `"__main__"`. - -, ๐Ÿ“„: - -```Python - uvicorn.run(app, host="0.0.0.0", port=8000) -``` - -๐Ÿ”œ ๐Ÿƒ. - ---- - -๐Ÿ‘‰ ๐Ÿ† ๐Ÿšซ ๐Ÿ”จ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ—„ ๐Ÿ‘ˆ ๐Ÿ•น (๐Ÿ“). - -, ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ โž•1๏ธโƒฃ ๐Ÿ“ `importer.py` โฎ๏ธ: - -```Python -from myapp import app - -# Some more code -``` - -๐Ÿ‘ˆ ๐Ÿ’ผ, ๐Ÿง ๐Ÿ”ข ๐Ÿ”˜ `myapp.py` ๐Ÿ”œ ๐Ÿšซ โœ”๏ธ ๐Ÿ”ข `__name__` โฎ๏ธ ๐Ÿ’ฒ `"__main__"`. - -, โธ: - -```Python - uvicorn.run(app, host="0.0.0.0", port=8000) -``` - -๐Ÿ”œ ๐Ÿšซ ๐Ÿ› ๏ธ. - -/// info - -๐ŸŒ… โ„น, โœ… ๐Ÿ›‚ ๐Ÿ ๐Ÿฉบ. - -/// - -## ๐Ÿƒ ๐Ÿ‘† ๐Ÿ“Ÿ โฎ๏ธ ๐Ÿ‘† ๐Ÿ•น - -โ†ฉ๏ธ ๐Ÿ‘† ๐Ÿƒ Uvicorn ๐Ÿ’ฝ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ‘† ๐Ÿ“Ÿ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค™ ๐Ÿ‘† ๐Ÿ ๐Ÿ“‹ (๐Ÿ‘† FastAPI ๐Ÿˆธ) ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ•น. - ---- - -๐Ÿ–ผ, ๐ŸŽ™ ๐ŸŽ™ ๐Ÿ“Ÿ, ๐Ÿ‘† ๐Ÿ’ช: - -* ๐Ÿšถ "โ„น" ๐ŸŽ›. -* "๐Ÿšฎ ๐Ÿ“ณ...". -* ๐Ÿ–Š "๐Ÿ" -* ๐Ÿƒ ๐Ÿ•น โฎ๏ธ ๐ŸŽ› "`Python: Current File (Integrated Terminal)`". - -โšซ๏ธ ๐Ÿ”œ โคด๏ธ โ–ถ๏ธ ๐Ÿ’ฝ โฎ๏ธ ๐Ÿ‘† **FastAPI** ๐Ÿ“Ÿ, โ›”๏ธ ๐Ÿ‘† 0๏ธโƒฃ, โ™’๏ธ. - -๐Ÿ“ฅ โ” โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘€: - - - ---- - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ ๐Ÿ—’, ๐Ÿ‘† ๐Ÿ’ช: - -* ๐Ÿ“‚ "๐Ÿƒ" ๐Ÿฃ. -* ๐Ÿ–Š ๐ŸŽ› "โ„น...". -* โคด๏ธ ๐Ÿ”‘ ๐Ÿฃ ๐ŸŽฆ ๐Ÿ†™. -* ๐Ÿ–Š ๐Ÿ“ โ„น (๐Ÿ‘‰ ๐Ÿ’ผ, `main.py`). - -โšซ๏ธ ๐Ÿ”œ โคด๏ธ โ–ถ๏ธ ๐Ÿ’ฝ โฎ๏ธ ๐Ÿ‘† **FastAPI** ๐Ÿ“Ÿ, โ›”๏ธ ๐Ÿ‘† 0๏ธโƒฃ, โ™’๏ธ. - -๐Ÿ“ฅ โ” โšซ๏ธ ๐Ÿ’ช ๐Ÿ‘€: - - diff --git a/docs/em/docs/tutorial/dependencies/classes-as-dependencies.md b/docs/em/docs/tutorial/dependencies/classes-as-dependencies.md deleted file mode 100644 index 41938bc7b..000000000 --- a/docs/em/docs/tutorial/dependencies/classes-as-dependencies.md +++ /dev/null @@ -1,180 +0,0 @@ -# ๐ŸŽ“ ๐Ÿ”— - -โญ ๐Ÿคฟ โฌ ๐Ÿ”˜ **๐Ÿ”— ๐Ÿ’‰** โš™๏ธ, โžก๏ธ โ™ป โฎ๏ธ ๐Ÿ–ผ. - -## `dict` โšช๏ธโžก๏ธ โฎ๏ธ ๐Ÿ–ผ - -โฎ๏ธ ๐Ÿ–ผ, ๐Ÿ‘ฅ ๐Ÿ›ฌ `dict` โšช๏ธโžก๏ธ ๐Ÿ‘† ๐Ÿ”— ("โ˜‘"): - -{* ../../docs_src/dependencies/tutorial001.py hl[9] *} - -โœ‹๏ธ โคด๏ธ ๐Ÿ‘ฅ ๐Ÿคš `dict` ๐Ÿ”ข `commons` *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -& ๐Ÿ‘ฅ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ’ช ๐Ÿšซ ๐Ÿšš ๐Ÿ“š ๐Ÿ•โ€๐Ÿฆบ (๐Ÿ’– ๐Ÿ› ๏ธ) `dict`โ“‚, โ†ฉ๏ธ ๐Ÿ‘ซ ๐Ÿ’ช ๐Ÿšซ ๐Ÿ’ญ ๐Ÿ‘ซ ๐Ÿ”‘ & ๐Ÿ’ฒ ๐Ÿ†Ž. - -๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ‘... - -## โšซ๏ธโ” โš’ ๐Ÿ”— - -๐Ÿ†™ ๐Ÿ”œ ๐Ÿ‘† โœ”๏ธ ๐Ÿ‘€ ๐Ÿ”— ๐Ÿ“ฃ ๐Ÿ”ข. - -โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ•ด ๐ŸŒŒ ๐Ÿ“ฃ ๐Ÿ”— (๐Ÿ‘ โšซ๏ธ ๐Ÿ”œ ๐ŸŽฒ ๐ŸŒ– โš ). - -๐Ÿ”‘ โš– ๐Ÿ‘ˆ ๐Ÿ”— ๐Ÿ”œ "๐Ÿ‡ง๐Ÿ‡ฒ". - -"**๐Ÿ‡ง๐Ÿ‡ฒ**" ๐Ÿ ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ ๐Ÿ’ช "๐Ÿค™" ๐Ÿ’– ๐Ÿ”ข. - -, ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐ŸŽš `something` (๐Ÿ‘ˆ ๐Ÿ’ช _๐Ÿšซ_ ๐Ÿ”ข) & ๐Ÿ‘† ๐Ÿ’ช "๐Ÿค™" โšซ๏ธ (๐Ÿ› ๏ธ โšซ๏ธ) ๐Ÿ’–: - -```Python -something() -``` - -โš–๏ธ - -```Python -something(some_argument, some_keyword_argument="foo") -``` - -โคด๏ธ โšซ๏ธ "๐Ÿ‡ง๐Ÿ‡ฒ". - -## ๐ŸŽ“ ๐Ÿ”— - -๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿ‘€ ๐Ÿ‘ˆ โœ ๐Ÿ‘ ๐Ÿ ๐ŸŽ“, ๐Ÿ‘† โš™๏ธ ๐Ÿ‘ˆ ๐ŸŽ โ•. - -๐Ÿ–ผ: - -```Python -class Cat: - def __init__(self, name: str): - self.name = name - - -fluffy = Cat(name="Mr Fluffy") -``` - -๐Ÿ‘‰ ๐Ÿ’ผ, `fluffy` ๐Ÿ‘ ๐ŸŽ“ `Cat`. - -& โœ `fluffy`, ๐Ÿ‘† "๐Ÿค™" `Cat`. - -, ๐Ÿ ๐ŸŽ“ **๐Ÿ‡ง๐Ÿ‡ฒ**. - -โคด๏ธ, **FastAPI**, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ ๐ŸŽ“ ๐Ÿ”—. - -โšซ๏ธโ” FastAPI ๐Ÿค™ โœ… ๐Ÿ‘ˆ โšซ๏ธ "๐Ÿ‡ง๐Ÿ‡ฒ" (๐Ÿ”ข, ๐ŸŽ“ โš–๏ธ ๐Ÿ•ณ ๐Ÿ™†) & ๐Ÿ”ข ๐Ÿ”ฌ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถโ€โ™€๏ธ "๐Ÿ‡ง๐Ÿ‡ฒ" ๐Ÿ”— **FastAPI**, โšซ๏ธ ๐Ÿ”œ ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿ‘ˆ "๐Ÿ‡ง๐Ÿ‡ฒ", & ๐Ÿ› ๏ธ ๐Ÿ‘ซ ๐ŸŽ ๐ŸŒŒ ๐Ÿ”ข *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. โœ… ๐ŸŽง-๐Ÿ”—. - -๐Ÿ‘ˆ โœ” ๐Ÿ‡ง๐Ÿ‡ฒ โฎ๏ธ ๐Ÿ™…โ€โ™‚ ๐Ÿ”ข ๐ŸŒ. ๐ŸŽ โšซ๏ธ ๐Ÿ”œ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* โฎ๏ธ ๐Ÿ™…โ€โ™‚ ๐Ÿ”ข. - -โคด๏ธ, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ”€ ๐Ÿ”— "โ˜‘" `common_parameters` โšช๏ธโžก๏ธ ๐Ÿ”› ๐ŸŽ“ `CommonQueryParams`: - -{* ../../docs_src/dependencies/tutorial002.py hl[11:15] *} - -๐Ÿ’ธ ๐Ÿ™‹ `__init__` ๐Ÿ‘ฉโ€๐Ÿ”ฌ โš™๏ธ โœ ๐Ÿ‘ ๐ŸŽ“: - -{* ../../docs_src/dependencies/tutorial002.py hl[12] *} - -...โšซ๏ธ โœ”๏ธ ๐ŸŽ ๐Ÿ”ข ๐Ÿ‘† โฎ๏ธ `common_parameters`: - -{* ../../docs_src/dependencies/tutorial001.py hl[9] *} - -๐Ÿ“š ๐Ÿ”ข โšซ๏ธโ” **FastAPI** ๐Ÿ”œ โš™๏ธ "โŽ" ๐Ÿ”—. - -๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ”œ โœ”๏ธ: - -* ๐Ÿ“ฆ `q` ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ‘ˆ `str`. -* `skip` ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ‘ˆ `int`, โฎ๏ธ ๐Ÿ”ข `0`. -* `limit` ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ‘ˆ `int`, โฎ๏ธ ๐Ÿ”ข `100`. - -๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ’ผ ๐Ÿ’ฝ ๐Ÿ”œ ๐Ÿ—œ, โœ”, ๐Ÿ“„ ๐Ÿ”› ๐Ÿ—„ ๐Ÿ”—, โ™’๏ธ. - -## โš™๏ธ โšซ๏ธ - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ‘† ๐Ÿ”— โš™๏ธ ๐Ÿ‘‰ ๐ŸŽ“. - -{* ../../docs_src/dependencies/tutorial002.py hl[19] *} - -**FastAPI** ๐Ÿค™ `CommonQueryParams` ๐ŸŽ“. ๐Ÿ‘‰ โœ "๐Ÿ‘" ๐Ÿ‘ˆ ๐ŸŽ“ & ๐Ÿ‘ ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”ข `commons` ๐Ÿ‘† ๐Ÿ”ข. - -## ๐Ÿ†Ž โœ ๐Ÿ†š `Depends` - -๐Ÿ‘€ โ” ๐Ÿ‘ฅ โœ `CommonQueryParams` ๐Ÿ• ๐Ÿ”› ๐Ÿ“Ÿ: - -```Python -commons: CommonQueryParams = Depends(CommonQueryParams) -``` - -๐Ÿ `CommonQueryParams`,: - -```Python -... = Depends(CommonQueryParams) -``` - -...โšซ๏ธโ” **FastAPI** ๐Ÿ”œ ๐Ÿค™ โš™๏ธ ๐Ÿ’ญ โšซ๏ธโ” ๐Ÿ”—. - -โšช๏ธโžก๏ธ โšซ๏ธ ๐Ÿ‘ˆ FastAPI ๐Ÿ”œ โš— ๐Ÿ“ฃ ๐Ÿ”ข & ๐Ÿ‘ˆ โšซ๏ธโ” FastAPI ๐Ÿ”œ ๐Ÿค™ ๐Ÿค™. - ---- - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿฅ‡ `CommonQueryParams`,: - -```Python -commons: CommonQueryParams ... -``` - -...๐Ÿšซ โœ”๏ธ ๐Ÿ™† ๐ŸŽ ๐Ÿ”‘ **FastAPI**. FastAPI ๐Ÿ† ๐Ÿšซ โš™๏ธ โšซ๏ธ ๐Ÿ’ฝ ๐Ÿ› ๏ธ, ๐Ÿ”ฌ, โ™’๏ธ. (โšซ๏ธ โš™๏ธ `= Depends(CommonQueryParams)` ๐Ÿ‘ˆ). - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿค™ โœ: - -```Python -commons = Depends(CommonQueryParams) -``` - -...: - -{* ../../docs_src/dependencies/tutorial003.py hl[19] *} - -โœ‹๏ธ ๐Ÿ“ฃ ๐Ÿ†Ž ๐Ÿ’ก ๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ”œ ๐Ÿ’ญ โšซ๏ธโ” ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”ข `commons`, & โคด๏ธ โšซ๏ธ ๐Ÿ’ช โ„น ๐Ÿ‘† โฎ๏ธ ๐Ÿ“Ÿ ๐Ÿ› ๏ธ, ๐Ÿ†Ž โœ…, โ™’๏ธ: - - - -## โŒจ - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ“Ÿ ๐Ÿ” ๐Ÿ“ฅ, โœ `CommonQueryParams` ๐Ÿ•: - -```Python -commons: CommonQueryParams = Depends(CommonQueryParams) -``` - -**FastAPI** ๐Ÿšš โŒจ ๐Ÿ‘ซ ๐Ÿ’ผ, ๐ŸŒโ” ๐Ÿ”— *๐ŸŽฏ* ๐ŸŽ“ ๐Ÿ‘ˆ **FastAPI** ๐Ÿ”œ "๐Ÿค™" โœ ๐Ÿ‘ ๐ŸŽ“ โšซ๏ธ. - -๐Ÿ“š ๐ŸŽฏ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“„: - -โ†ฉ๏ธ โœ: - -```Python -commons: CommonQueryParams = Depends(CommonQueryParams) -``` - -...๐Ÿ‘† โœ: - -```Python -commons: CommonQueryParams = Depends() -``` - -๐Ÿ‘† ๐Ÿ“ฃ ๐Ÿ”— ๐Ÿ†Ž ๐Ÿ”ข, & ๐Ÿ‘† โš™๏ธ `Depends()` ๐Ÿšฎ "๐Ÿ”ข" ๐Ÿ’ฒ (๐Ÿ‘ˆ โฎ๏ธ `=`) ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ”ข, ๐Ÿต ๐Ÿ™† ๐Ÿ”ข `Depends()`, โ†ฉ๏ธ โœ”๏ธ โœ ๐ŸŒ• ๐ŸŽ“ *๐Ÿ”„* ๐Ÿ”˜ `Depends(CommonQueryParams)`. - -๐ŸŽ ๐Ÿ–ผ ๐Ÿ”œ โคด๏ธ ๐Ÿ‘€ ๐Ÿ’–: - -{* ../../docs_src/dependencies/tutorial004.py hl[19] *} - -...& **FastAPI** ๐Ÿ”œ ๐Ÿ’ญ โšซ๏ธโ”. - -/// tip - -๐Ÿšฅ ๐Ÿ‘ˆ ๐Ÿ˜‘ ๐ŸŒ… ๐Ÿ˜จ ๐ŸŒ˜ ๐Ÿ‘, ๐Ÿคทโ€โ™‚ โšซ๏ธ, ๐Ÿ‘† ๐Ÿšซ *๐Ÿ’ช* โšซ๏ธ. - -โšซ๏ธ โŒจ. โ†ฉ๏ธ **FastAPI** ๐Ÿ’… ๐Ÿ”ƒ ๐Ÿค ๐Ÿ‘† ๐Ÿ“‰ ๐Ÿ“Ÿ ๐Ÿ”. - -/// diff --git a/docs/em/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/em/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md deleted file mode 100644 index ab144a497..000000000 --- a/docs/em/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md +++ /dev/null @@ -1,69 +0,0 @@ -# ๐Ÿ”— โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ - -๐Ÿ’ผ ๐Ÿ‘† ๐Ÿšซ ๐Ÿค™ ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ’ฒ ๐Ÿ”— ๐Ÿ”˜ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -โš–๏ธ ๐Ÿ”— ๐Ÿšซ ๐Ÿ“จ ๐Ÿ’ฒ. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช โšซ๏ธ ๐Ÿ› ๏ธ/โŽ. - -๐Ÿ“š ๐Ÿ’ผ, โ†ฉ๏ธ ๐Ÿ“ฃ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”ข โฎ๏ธ `Depends`, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ `list` `dependencies` *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*. - -## ๐Ÿšฎ `dependencies` *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* - -*โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* ๐Ÿ“จ ๐Ÿ“ฆ โŒ `dependencies`. - -โšซ๏ธ ๐Ÿ”œ `list` `Depends()`: - -{* ../../docs_src/dependencies/tutorial006.py hl[17] *} - -๐Ÿ‘‰ ๐Ÿ”— ๐Ÿ”œ ๐Ÿ› ๏ธ/โŽ ๐ŸŽ ๐ŸŒŒ ๐Ÿ˜ ๐Ÿ”—. โœ‹๏ธ ๐Ÿ‘ซ ๐Ÿ’ฒ (๐Ÿšฅ ๐Ÿ‘ซ ๐Ÿ“จ ๐Ÿ™†) ๐Ÿ† ๐Ÿšซ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -/// tip - -๐Ÿ‘จโ€๐ŸŽจ โœ… โ™ป ๐Ÿ”ข ๐Ÿ”ข, & ๐ŸŽฆ ๐Ÿ‘ซ โŒ. - -โš™๏ธ ๐Ÿ‘‰ `dependencies` *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ’ญ ๐Ÿ‘ซ ๐Ÿ› ๏ธ โช โŽ ๐Ÿ‘จโ€๐ŸŽจ/๐Ÿญ โŒ. - -โšซ๏ธ ๐Ÿ’ช โ„น โŽ ๐Ÿ˜จ ๐Ÿ†• ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ˆ ๐Ÿ‘€ โ™ป ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ“Ÿ & ๐Ÿ’ช ๐Ÿ’ญ โšซ๏ธ ๐Ÿ™ƒ. - -/// - -/// info - -๐Ÿ‘‰ ๐Ÿ–ผ ๐Ÿ‘ฅ โš™๏ธ ๐Ÿ’ญ ๐Ÿ›ƒ ๐ŸŽš `X-Key` & `X-Token`. - -โœ‹๏ธ ๐ŸŽฐ ๐Ÿ’ผ, ๐Ÿ•โ” ๐Ÿ› ๏ธ ๐Ÿ’‚โ€โ™‚, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš ๐ŸŒ– ๐Ÿ’ฐ โšช๏ธโžก๏ธ โš™๏ธ ๐Ÿ› ๏ธ [๐Ÿ’‚โ€โ™‚ ๐Ÿš™ (โญ ๐Ÿ“ƒ)](../security/index.md){.internal-link target=_blank}. - -/// - -## ๐Ÿ”— โŒ & ๐Ÿ“จ ๐Ÿ’ฒ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ ๐Ÿ”— *๐Ÿ”ข* ๐Ÿ‘† โš™๏ธ ๐Ÿ›Ž. - -### ๐Ÿ”— ๐Ÿ“„ - -๐Ÿ‘ซ ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“จ ๐Ÿ“„ (๐Ÿ’– ๐ŸŽš) โš–๏ธ ๐ŸŽ ๐ŸŽง-๐Ÿ”—: - -{* ../../docs_src/dependencies/tutorial006.py hl[6,11] *} - -### ๐Ÿคš โš  - -๐Ÿ‘ซ ๐Ÿ”— ๐Ÿ’ช `raise` โš , ๐ŸŽ ๐Ÿ˜ ๐Ÿ”—: - -{* ../../docs_src/dependencies/tutorial006.py hl[8,13] *} - -### ๐Ÿ“จ ๐Ÿ’ฒ - -& ๐Ÿ‘ซ ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ’ฒ โš–๏ธ ๐Ÿšซ, ๐Ÿ’ฒ ๐Ÿ† ๐Ÿšซ โš™๏ธ. - -, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค-โš™๏ธ ๐Ÿ˜ ๐Ÿ”— (๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ’ฒ) ๐Ÿ‘† โช โš™๏ธ ๐Ÿ‘ฑ ๐Ÿ™†, & โœ‹๏ธ ๐Ÿ’ฒ ๐Ÿ† ๐Ÿšซ โš™๏ธ, ๐Ÿ”— ๐Ÿ”œ ๐Ÿ› ๏ธ: - -{* ../../docs_src/dependencies/tutorial006.py hl[9,14] *} - -## ๐Ÿ”— ๐Ÿ‘ช *โžก ๐Ÿ› ๏ธ* - -โช, ๐Ÿ•โ” ๐Ÿ‘‚ ๐Ÿ”ƒ โ” ๐Ÿ“Š ๐Ÿฆ ๐Ÿˆธ ([๐Ÿฆ ๐Ÿˆธ - ๐Ÿ’— ๐Ÿ“](../../tutorial/bigger-applications.md){.internal-link target=_blank}), ๐ŸŽฒ โฎ๏ธ ๐Ÿ’— ๐Ÿ“, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ก โ” ๐Ÿ“ฃ ๐Ÿ‘ `dependencies` ๐Ÿ”ข ๐Ÿ‘ช *โžก ๐Ÿ› ๏ธ*. - -## ๐ŸŒ ๐Ÿ”— - -โญ ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘€ โ” ๐Ÿšฎ ๐Ÿ”— ๐ŸŽ‚ `FastAPI` ๐Ÿˆธ, ๐Ÿ‘ˆ ๐Ÿ‘ซ โœ” ๐Ÿ”  *โžก ๐Ÿ› ๏ธ*. diff --git a/docs/em/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/em/docs/tutorial/dependencies/dependencies-with-yield.md deleted file mode 100644 index 1b37b1cf2..000000000 --- a/docs/em/docs/tutorial/dependencies/dependencies-with-yield.md +++ /dev/null @@ -1,232 +0,0 @@ -# ๐Ÿ”— โฎ๏ธ ๐ŸŒพ - -FastAPI ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”— ๐Ÿ‘ˆ โž• ๐Ÿ” โฎ๏ธ ๐Ÿ. - -๐Ÿ‘‰, โš™๏ธ `yield` โ†ฉ๏ธ `return`, & โœ โž• ๐Ÿ” โฎ๏ธ. - -/// tip - -โš’ ๐Ÿ’ญ โš™๏ธ `yield` 1๏ธโƒฃ ๐Ÿ‘ ๐Ÿ•ฐ. - -/// - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ™† ๐Ÿ”ข ๐Ÿ‘ˆ โ˜‘ โš™๏ธ โฎ๏ธ: - -* `@contextlib.contextmanager` โš–๏ธ -* `@contextlib.asynccontextmanager` - -๐Ÿ”œ โ˜‘ โš™๏ธ **FastAPI** ๐Ÿ”—. - -๐Ÿ‘, FastAPI โš™๏ธ ๐Ÿ“š 2๏ธโƒฃ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ”˜. - -/// - -## ๐Ÿ’ฝ ๐Ÿ”— โฎ๏ธ `yield` - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘‰ โœ ๐Ÿ’ฝ ๐ŸŽ‰ & ๐Ÿ” โšซ๏ธ โฎ๏ธ ๐Ÿ. - -๐Ÿ•ด ๐Ÿ“Ÿ โญ & ๐Ÿ”Œ `yield` ๐Ÿ“„ ๐Ÿ› ๏ธ โญ ๐Ÿ“จ ๐Ÿ“จ: - -{* ../../docs_src/dependencies/tutorial007.py hl[2:4] *} - -๐ŸŒพ ๐Ÿ’ฒ โšซ๏ธโ” ๐Ÿ’‰ ๐Ÿ”˜ *โžก ๐Ÿ› ๏ธ* & ๐ŸŽ ๐Ÿ”—: - -{* ../../docs_src/dependencies/tutorial007.py hl[4] *} - -๐Ÿ“Ÿ ๐Ÿ“„ `yield` ๐Ÿ“„ ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ“จ โœ”๏ธ ๐Ÿšš: - -{* ../../docs_src/dependencies/tutorial007.py hl[5:6] *} - -/// tip - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `async` โš–๏ธ ๐Ÿ˜ ๐Ÿ”ข. - -**FastAPI** ๐Ÿ”œ โ–ถ๏ธ๏ธ ๐Ÿ‘œ โฎ๏ธ ๐Ÿ” , ๐ŸŽ โฎ๏ธ ๐Ÿ˜ ๐Ÿ”—. - -/// - -## ๐Ÿ”— โฎ๏ธ `yield` & `try` - -๐Ÿšฅ ๐Ÿ‘† โš™๏ธ `try` ๐Ÿซ ๐Ÿ”— โฎ๏ธ `yield`, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ™† โš  ๐Ÿ‘ˆ ๐Ÿšฎ ๐Ÿ•โ” โš™๏ธ ๐Ÿ”—. - -๐Ÿ–ผ, ๐Ÿšฅ ๐Ÿ“Ÿ โ˜ ๐Ÿ–•, โž•1๏ธโƒฃ ๐Ÿ”— โš–๏ธ *โžก ๐Ÿ› ๏ธ*, โš’ ๐Ÿ’ฝ ๐Ÿ’ต "๐Ÿ’พ" โš–๏ธ โœ ๐Ÿ™† ๐ŸŽ โŒ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ โš  ๐Ÿ‘† ๐Ÿ”—. - -, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ‘ˆ ๐ŸŽฏ โš  ๐Ÿ”˜ ๐Ÿ”— โฎ๏ธ `except SomeException`. - -๐ŸŽ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `finally` โš’ ๐Ÿ’ญ ๐Ÿšช ๐Ÿ“ถ ๐Ÿ› ๏ธ, ๐Ÿ™…โ€โ™‚ ๐Ÿค” ๐Ÿšฅ ๐Ÿ“ค โš  โš–๏ธ ๐Ÿšซ. - -{* ../../docs_src/dependencies/tutorial007.py hl[3,5] *} - -## ๐ŸŽง-๐Ÿ”— โฎ๏ธ `yield` - -๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐ŸŽง-๐Ÿ”— & "๐ŸŒฒ" ๐ŸŽง-๐Ÿ”— ๐Ÿ™† ๐Ÿ“ & ๐Ÿ’ , & ๐Ÿ™† โš–๏ธ ๐ŸŒ ๐Ÿ‘ซ ๐Ÿ’ช โš™๏ธ `yield`. - -**FastAPI** ๐Ÿ”œ โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ "๐Ÿšช ๐Ÿ“Ÿ" ๐Ÿ”  ๐Ÿ”— โฎ๏ธ `yield` ๐Ÿƒ โ˜‘ โœ”. - -๐Ÿ–ผ, `dependency_c` ๐Ÿ’ช โœ”๏ธ ๐Ÿ”— ๐Ÿ”› `dependency_b`, & `dependency_b` ๐Ÿ”› `dependency_a`: - -{* ../../docs_src/dependencies/tutorial008.py hl[4,12,20] *} - -& ๐ŸŒ ๐Ÿ‘ซ ๐Ÿ’ช โš™๏ธ `yield`. - -๐Ÿ‘‰ ๐Ÿ’ผ `dependency_c`, ๐Ÿ› ๏ธ ๐Ÿšฎ ๐Ÿšช ๐Ÿ“Ÿ, ๐Ÿ’ช ๐Ÿ’ฒ โšช๏ธโžก๏ธ `dependency_b` (๐Ÿ“ฅ ๐Ÿ“› `dep_b`) ๐Ÿ’ช. - -& , ๐Ÿ”„, `dependency_b` ๐Ÿ’ช ๐Ÿ’ฒ โšช๏ธโžก๏ธ `dependency_a` (๐Ÿ“ฅ ๐Ÿ“› `dep_a`) ๐Ÿ’ช ๐Ÿšฎ ๐Ÿšช ๐Ÿ“Ÿ. - -{* ../../docs_src/dependencies/tutorial008.py hl[16:17,24:25] *} - -๐ŸŽ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ”— โฎ๏ธ `yield` & `return` ๐ŸŒ€. - -& ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ‘ ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿšš ๐Ÿ“š ๐ŸŽ ๐Ÿ”— โฎ๏ธ `yield`, โ™’๏ธ. - -๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ™† ๐ŸŒ€ ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š. - -**FastAPI** ๐Ÿ”œ โš’ ๐Ÿ’ญ ๐ŸŒ ๐Ÿƒ โ˜‘ โœ”. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘‰ ๐Ÿ‘ท ๐Ÿ‘ ๐Ÿ ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ. - -**FastAPI** โš™๏ธ ๐Ÿ‘ซ ๐Ÿ”˜ ๐Ÿ† ๐Ÿ‘‰. - -/// - -## ๐Ÿ”— โฎ๏ธ `yield` & `HTTPException` - -๐Ÿ‘† ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ”— โฎ๏ธ `yield` & โœ”๏ธ `try` ๐Ÿซ ๐Ÿ‘ˆ โœŠ โš . - -โšซ๏ธ 5๏ธโƒฃ๐Ÿ“† ๐Ÿ˜‹ ๐Ÿคš `HTTPException` โš–๏ธ ๐ŸŽ ๐Ÿšช ๐Ÿ“Ÿ, โฎ๏ธ `yield`. โœ‹๏ธ **โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐Ÿ‘ท**. - -๐Ÿšช ๐Ÿ“Ÿ ๐Ÿ”— โฎ๏ธ `yield` ๐Ÿ› ๏ธ *โฎ๏ธ* ๐Ÿ“จ ๐Ÿ“จ, [โš  ๐Ÿ•โ€๐Ÿฆบ](../handling-errors.md#_4){.internal-link target=_blank} ๐Ÿ”œ โœ”๏ธ โช ๐Ÿƒ. ๐Ÿ“ค ๐Ÿ•ณ ๐Ÿ˜ฝ โš  ๐Ÿšฎ ๐Ÿ‘† ๐Ÿ”— ๐Ÿšช ๐Ÿ“Ÿ (โฎ๏ธ `yield`). - -, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿคš `HTTPException` โฎ๏ธ `yield`, ๐Ÿ”ข (โš–๏ธ ๐Ÿ™† ๐Ÿ›ƒ) โš  ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ˆ โœŠ `HTTPException`โ“‚ & ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” 4๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ“จ ๐Ÿ† ๐Ÿšซ ๐Ÿ“ค โœŠ ๐Ÿ‘ˆ โš  ๐Ÿšซ๐Ÿ”œ. - -๐Ÿ‘‰ โšซ๏ธโ” โœ” ๐Ÿ•ณ โš’ ๐Ÿ”— (โœ… ๐Ÿ’ฝ ๐ŸŽ‰), ๐Ÿ–ผ, โš™๏ธ ๐Ÿ–ฅ ๐Ÿ“‹. - -๐Ÿ–ฅ ๐Ÿ“‹ ๐Ÿƒ *โฎ๏ธ* ๐Ÿ“จ โœ”๏ธ ๐Ÿ“จ. ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ ๐ŸŒŒ ๐Ÿคš `HTTPException` โ†ฉ๏ธ ๐Ÿ“ค ๐Ÿšซ ๐ŸŒŒ ๐Ÿ”€ ๐Ÿ“จ ๐Ÿ‘ˆ *โช ๐Ÿ“จ*. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ–ฅ ๐Ÿ“‹ โœ ๐Ÿ’ฝ โŒ, ๐ŸŒ˜ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’พ โš–๏ธ ๐Ÿ˜ฌ ๐Ÿ” ๐ŸŽ‰ ๐Ÿ”— โฎ๏ธ `yield`, & ๐ŸŽฒ ๐Ÿ•น โŒ โš–๏ธ ๐Ÿ“„ โšซ๏ธ ๐Ÿ›ฐ ๐Ÿ•ต โš™๏ธ. - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ“Ÿ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ’ช ๐Ÿคš โš , ๐Ÿ† ๐Ÿ˜/"๐Ÿ™ƒ" ๐Ÿ‘œ & ๐Ÿšฎ `try` ๐Ÿซ ๐Ÿ‘ˆ ๐Ÿ“„ ๐Ÿ“Ÿ. - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ›ƒ โš  ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’– ๐Ÿต *โญ* ๐Ÿ›ฌ ๐Ÿ“จ & ๐ŸŽฒ โŽ ๐Ÿ“จ, ๐ŸŽฒ ๐Ÿ™‹โ€โ™€ `HTTPException`, โœ [๐Ÿ›ƒ โš  ๐Ÿ•โ€๐Ÿฆบ](../handling-errors.md#_4){.internal-link target=_blank}. - -/// tip - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿคš โš  ๐Ÿ”Œ `HTTPException` *โญ* `yield`. โœ‹๏ธ ๐Ÿšซ โฎ๏ธ. - -/// - -๐Ÿ” ๐Ÿ› ๏ธ ๐ŸŒ… โš–๏ธ ๐ŸŒ˜ ๐Ÿ’– ๐Ÿ‘‰ ๐Ÿ“Š. ๐Ÿ•ฐ ๐Ÿ’ง โšช๏ธโžก๏ธ ๐Ÿ” ๐Ÿ”. & ๐Ÿ”  ๐Ÿ“ 1๏ธโƒฃ ๐Ÿ• ๐Ÿ”— โš–๏ธ ๐Ÿ› ๏ธ ๐Ÿ“Ÿ. - -```mermaid -sequenceDiagram - -participant client as Client -participant handler as Exception handler -participant dep as Dep with yield -participant operation as Path Operation -participant tasks as Background tasks - - Note over client,tasks: Can raise exception for dependency, handled after response is sent - Note over client,operation: Can raise HTTPException and can change the response - client ->> dep: Start request - Note over dep: Run code up to yield - opt raise - dep -->> handler: Raise HTTPException - handler -->> client: HTTP error response - dep -->> dep: Raise other exception - end - dep ->> operation: Run dependency, e.g. DB session - opt raise - operation -->> dep: Raise HTTPException - dep -->> handler: Auto forward exception - handler -->> client: HTTP error response - operation -->> dep: Raise other exception - dep -->> handler: Auto forward exception - end - operation ->> client: Return response to client - Note over client,operation: Response is already sent, can't change it anymore - opt Tasks - operation -->> tasks: Send background tasks - end - opt Raise other exception - tasks -->> dep: Raise other exception - end - Note over dep: After yield - opt Handle other exception - dep -->> dep: Handle exception, can't change response. E.g. close DB session. - end -``` - -/// info - -๐Ÿ•ด **1๏ธโƒฃ ๐Ÿ“จ** ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ‘ฉโ€๐Ÿ’ป. โšซ๏ธ ๐Ÿ’ช 1๏ธโƒฃ โŒ ๐Ÿ“จ โš–๏ธ โšซ๏ธ ๐Ÿ”œ ๐Ÿ“จ โšช๏ธโžก๏ธ *โžก ๐Ÿ› ๏ธ*. - -โฎ๏ธ 1๏ธโƒฃ ๐Ÿ“š ๐Ÿ“จ ๐Ÿ“จ, ๐Ÿ™…โ€โ™‚ ๐ŸŽ ๐Ÿ“จ ๐Ÿ’ช ๐Ÿ“จ. - -/// - -/// tip - -๐Ÿ‘‰ ๐Ÿ“Š ๐ŸŽฆ `HTTPException`, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿคš ๐Ÿ™† ๐ŸŽ โš  โ” ๐Ÿ‘† โœ [๐Ÿ›ƒ โš  ๐Ÿ•โ€๐Ÿฆบ](../handling-errors.md#_4){.internal-link target=_blank}. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿคš ๐Ÿ™† โš , โšซ๏ธ ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”— โฎ๏ธ ๐ŸŒพ, ๐Ÿ”Œ `HTTPException`, & โคด๏ธ **๐Ÿ”„** โš  ๐Ÿ•โ€๐Ÿฆบ. ๐Ÿšฅ ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ โš  ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ˆ โš , โšซ๏ธ ๐Ÿ”œ โคด๏ธ ๐Ÿต ๐Ÿ”ข ๐Ÿ”— `ServerErrorMiddleware`, ๐Ÿ›ฌ 5๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ, โžก๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ“ค โŒ ๐Ÿ’ฝ. - -/// - -## ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ - -### โšซ๏ธโ” "๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ" - -"๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ" ๐Ÿ™† ๐Ÿ‘ˆ ๐Ÿ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `with` ๐Ÿ“„. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `with` โœ ๐Ÿ“: - -```Python -with open("./somefile.txt") as f: - contents = f.read() - print(contents) -``` - -๐Ÿ”˜, `open("./somefile.txt")` โœ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿค™ "๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ". - -๐Ÿ•โ” `with` ๐Ÿซ ๐Ÿ, โšซ๏ธ โš’ ๐Ÿ’ญ ๐Ÿ” ๐Ÿ“, ๐Ÿšฅ ๐Ÿ“ค โš . - -๐Ÿ•โ” ๐Ÿ‘† โœ ๐Ÿ”— โฎ๏ธ `yield`, **FastAPI** ๐Ÿ”œ ๐Ÿ”˜ ๐Ÿ—œ โšซ๏ธ ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ, & ๐ŸŒ€ โšซ๏ธ โฎ๏ธ ๐ŸŽ ๐Ÿ”— ๐Ÿงฐ. - -### โš™๏ธ ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ”— โฎ๏ธ `yield` - -/// warning - -๐Ÿ‘‰, ๐ŸŒ… โš–๏ธ ๐ŸŒ˜, "๐Ÿง" ๐Ÿ’ญ. - -๐Ÿšฅ ๐Ÿ‘† โ–ถ๏ธ โฎ๏ธ **FastAPI** ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿšถ โšซ๏ธ ๐Ÿ”œ. - -/// - -๐Ÿ, ๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ— ๐ŸŽ“ โฎ๏ธ 2๏ธโƒฃ ๐Ÿ‘ฉโ€๐Ÿ”ฌ: `__enter__()` & `__exit__()`. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ซ ๐Ÿ”˜ **FastAPI** ๐Ÿ”— โฎ๏ธ `yield` โš™๏ธ -`with` โš–๏ธ `async with` ๐Ÿ“„ ๐Ÿ”˜ ๐Ÿ”— ๐Ÿ”ข: - -{* ../../docs_src/dependencies/tutorial010.py hl[1:9,13] *} - -/// tip - -โž•1๏ธโƒฃ ๐ŸŒŒ โœ ๐Ÿ”‘ ๐Ÿ‘จโ€๐Ÿ’ผ โฎ๏ธ: - -* `@contextlib.contextmanager` โš–๏ธ -* `@contextlib.asynccontextmanager` - -โš™๏ธ ๐Ÿ‘ซ ๐ŸŽ€ ๐Ÿ”ข โฎ๏ธ ๐Ÿ‘ `yield`. - -๐Ÿ‘ˆ โšซ๏ธโ” **FastAPI** โš™๏ธ ๐Ÿ”˜ ๐Ÿ”— โฎ๏ธ `yield`. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ โš™๏ธ ๐Ÿ‘จโ€๐ŸŽจ FastAPI ๐Ÿ”— (& ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ ๐Ÿšซ). - -FastAPI ๐Ÿ”œ โšซ๏ธ ๐Ÿ‘† ๐Ÿ”˜. - -/// diff --git a/docs/em/docs/tutorial/dependencies/global-dependencies.md b/docs/em/docs/tutorial/dependencies/global-dependencies.md deleted file mode 100644 index 5a22e5f1c..000000000 --- a/docs/em/docs/tutorial/dependencies/global-dependencies.md +++ /dev/null @@ -1,15 +0,0 @@ -# ๐ŸŒ ๐Ÿ”— - -๐Ÿ†Ž ๐Ÿˆธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿšฎ ๐Ÿ”— ๐ŸŽ‚ ๐Ÿˆธ. - -๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ช [๐Ÿšฎ `dependencies` *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*](dependencies-in-path-operation-decorators.md){.internal-link target=_blank}, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ‘ซ `FastAPI` ๐Ÿˆธ. - -๐Ÿ‘ˆ ๐Ÿ’ผ, ๐Ÿ‘ซ ๐Ÿ”œ โœ” ๐ŸŒ *โžก ๐Ÿ› ๏ธ* ๐Ÿˆธ: - -{* ../../docs_src/dependencies/tutorial012.py hl[15] *} - -& ๐ŸŒ ๐Ÿ’ญ ๐Ÿ“„ ๐Ÿ”ƒ [โŽ `dependencies` *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} โœ”, โœ‹๏ธ ๐Ÿ‘‰ ๐Ÿ’ผ, ๐ŸŒ *โžก ๐Ÿ› ๏ธ* ๐Ÿ“ฑ. - -## ๐Ÿ”— ๐Ÿ‘ช *โžก ๐Ÿ› ๏ธ* - -โช, ๐Ÿ•โ” ๐Ÿ‘‚ ๐Ÿ”ƒ โ” ๐Ÿ“Š ๐Ÿฆ ๐Ÿˆธ ([๐Ÿฆ ๐Ÿˆธ - ๐Ÿ’— ๐Ÿ“](../../tutorial/bigger-applications.md){.internal-link target=_blank}), ๐ŸŽฒ โฎ๏ธ ๐Ÿ’— ๐Ÿ“, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ก โ” ๐Ÿ“ฃ ๐Ÿ‘ `dependencies` ๐Ÿ”ข ๐Ÿ‘ช *โžก ๐Ÿ› ๏ธ*. diff --git a/docs/em/docs/tutorial/dependencies/index.md b/docs/em/docs/tutorial/dependencies/index.md deleted file mode 100644 index ce87d9ee4..000000000 --- a/docs/em/docs/tutorial/dependencies/index.md +++ /dev/null @@ -1,212 +0,0 @@ -# ๐Ÿ”— - -**FastAPI** โœ”๏ธ ๐Ÿ“ถ ๐Ÿ‹๏ธ โœ‹๏ธ ๐Ÿ‹๏ธ **๐Ÿ”— ๐Ÿ’‰** โš™๏ธ. - -โšซ๏ธ ๐Ÿ— ๐Ÿ“ถ ๐Ÿ™… โš™๏ธ, & โš’ โšซ๏ธ ๐Ÿ“ถ โฉ ๐Ÿ™† ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ› ๏ธ ๐ŸŽ ๐Ÿฆฒ โฎ๏ธ **FastAPI**. - -## โšซ๏ธโ” "๐Ÿ”— ๐Ÿ’‰" - -**"๐Ÿ”— ๐Ÿ’‰"** โ›“, ๐Ÿ“‹, ๐Ÿ‘ˆ ๐Ÿ“ค ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ“Ÿ (๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*) ๐Ÿ“ฃ ๐Ÿ‘œ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿšš ๐Ÿ‘ท & โš™๏ธ: "๐Ÿ”—". - -& โคด๏ธ, ๐Ÿ‘ˆ โš™๏ธ (๐Ÿ‘‰ ๐Ÿ’ผ **FastAPI**) ๐Ÿ”œ โœŠ ๐Ÿ’… ๐Ÿ”จ โšซ๏ธโ” ๐Ÿ’ช ๐Ÿšš ๐Ÿ‘† ๐Ÿ“Ÿ โฎ๏ธ ๐Ÿ“š ๐Ÿ’ช ๐Ÿ”— ("๐Ÿ’‰" ๐Ÿ”—). - -๐Ÿ‘‰ ๐Ÿ“ถ โš  ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’ช: - -* โœ”๏ธ ๐Ÿ’ฐ โš› (๐ŸŽ ๐Ÿ“Ÿ โš› ๐Ÿ”„ & ๐Ÿ”„). -* ๐Ÿ’ฐ ๐Ÿ’ฝ ๐Ÿ”—. -* ๐Ÿ› ๏ธ ๐Ÿ’‚โ€โ™‚, ๐Ÿค, ๐Ÿ”‘ ๐Ÿ“„, โ™’๏ธ. -* & ๐Ÿ“š ๐ŸŽ ๐Ÿ‘œ... - -๐ŸŒ ๐Ÿ‘ซ, โช ๐Ÿ“‰ ๐Ÿ“Ÿ ๐Ÿ”. - -## ๐Ÿฅ‡ ๐Ÿ” - -โžก๏ธ ๐Ÿ‘€ ๐Ÿ“ถ ๐Ÿ™… ๐Ÿ–ผ. โšซ๏ธ ๐Ÿ”œ ๐Ÿ™… ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿšซ ๐Ÿ“ถ โš , ๐Ÿ”œ. - -โœ‹๏ธ ๐Ÿ‘‰ ๐ŸŒŒ ๐Ÿ‘ฅ ๐Ÿ’ช ๐ŸŽฏ ๐Ÿ”› โ” **๐Ÿ”— ๐Ÿ’‰** โš™๏ธ ๐Ÿ‘ท. - -### โœ ๐Ÿ”—, โš–๏ธ "โ˜‘" - -โžก๏ธ ๐Ÿฅ‡ ๐ŸŽฏ ๐Ÿ”› ๐Ÿ”—. - -โšซ๏ธ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ’ช โœŠ ๐ŸŒ ๐ŸŽ ๐Ÿ”ข ๐Ÿ‘ˆ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ’ช โœŠ: - -{* ../../docs_src/dependencies/tutorial001.py hl[8:11] *} - -๐Ÿ‘ˆ โšซ๏ธ. - -**2๏ธโƒฃ โธ**. - -& โšซ๏ธ โœ”๏ธ ๐ŸŽ ๐Ÿ’  & ๐Ÿ“Š ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* โœ”๏ธ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ญ โšซ๏ธ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿต "๐Ÿ‘จโ€๐ŸŽจ" (๐Ÿต `@app.get("/some-path")`). - -& โšซ๏ธ ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ•ณ ๐Ÿ‘† ๐Ÿ’š. - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘‰ ๐Ÿ”— โŒ›: - -* ๐Ÿ“ฆ ๐Ÿ”ข ๐Ÿ”ข `q` ๐Ÿ‘ˆ `str`. -* ๐Ÿ“ฆ ๐Ÿ”ข ๐Ÿ”ข `skip` ๐Ÿ‘ˆ `int`, & ๐Ÿ”ข `0`. -* ๐Ÿ“ฆ ๐Ÿ”ข ๐Ÿ”ข `limit` ๐Ÿ‘ˆ `int`, & ๐Ÿ”ข `100`. - -& โคด๏ธ โšซ๏ธ ๐Ÿ“จ `dict` โš— ๐Ÿ“š ๐Ÿ’ฒ. - -### ๐Ÿ—„ `Depends` - -{* ../../docs_src/dependencies/tutorial001.py hl[3] *} - -### ๐Ÿ“ฃ ๐Ÿ”—, "โš“๏ธ" - -๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† โš™๏ธ `Body`, `Query`, โ™’๏ธ. โฎ๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”ข, โš™๏ธ `Depends` โฎ๏ธ ๐Ÿ†• ๐Ÿ”ข: - -{* ../../docs_src/dependencies/tutorial001.py hl[15,20] *} - -๐Ÿ‘ ๐Ÿ‘† โš™๏ธ `Depends` ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ”ข ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† โš™๏ธ `Body`, `Query`, โ™’๏ธ, `Depends` ๐Ÿ‘ท ๐Ÿ‘„ ๐ŸŽ. - -๐Ÿ‘† ๐Ÿ•ด ๐Ÿค `Depends` ๐Ÿ‘ ๐Ÿ”ข. - -๐Ÿ‘‰ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ•ณ ๐Ÿ’– ๐Ÿ”ข. - -& ๐Ÿ‘ˆ ๐Ÿ”ข โœŠ ๐Ÿ”ข ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘ˆ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* . - -/// tip - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โšซ๏ธโ” ๐ŸŽ "๐Ÿ‘œ", โ†–๏ธ โšช๏ธโžก๏ธ ๐Ÿ”ข, ๐Ÿ’ช โš™๏ธ ๐Ÿ”— โญ ๐Ÿ“ƒ. - -/// - -๐Ÿ•โ” ๐Ÿ†• ๐Ÿ“จ ๐Ÿ›ฌ, **FastAPI** ๐Ÿ”œ โœŠ ๐Ÿ’…: - -* ๐Ÿค™ ๐Ÿ‘† ๐Ÿ”— ("โ˜‘") ๐Ÿ”ข โฎ๏ธ โ˜‘ ๐Ÿ”ข. -* ๐Ÿคš ๐Ÿ โšช๏ธโžก๏ธ ๐Ÿ‘† ๐Ÿ”ข. -* ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ ๐Ÿ”ข ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -```mermaid -graph TB - -common_parameters(["common_parameters"]) -read_items["/items/"] -read_users["/users/"] - -common_parameters --> read_items -common_parameters --> read_users -``` - -๐Ÿ‘‰ ๐ŸŒŒ ๐Ÿ‘† โœ ๐Ÿ”— ๐Ÿ“Ÿ ๐Ÿ• & **FastAPI** โœŠ ๐Ÿ’… ๐Ÿค™ โšซ๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. - -/// check - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ โœ ๐ŸŽ ๐ŸŽ“ & ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐Ÿ‘ฑ **FastAPI** "ยฎ" โšซ๏ธ โš–๏ธ ๐Ÿ•ณ ๐ŸŽ. - -๐Ÿ‘† ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ `Depends` & **FastAPI** ๐Ÿ’ญ โ” ๐ŸŽ‚. - -/// - -## `async` โš–๏ธ ๐Ÿšซ `async` - -๐Ÿ”— ๐Ÿ”œ ๐Ÿค™ **FastAPI** (๐ŸŽ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*), ๐ŸŽ ๐Ÿšซ โœ” โช ๐Ÿ”ฌ ๐Ÿ‘† ๐Ÿ”ข. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `async def` โš–๏ธ ๐Ÿ˜ `def`. - -& ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”— โฎ๏ธ `async def` ๐Ÿ”˜ ๐Ÿ˜ `def` *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, โš–๏ธ `def` ๐Ÿ”— ๐Ÿ”˜ `async def` *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, โ™’๏ธ. - -โšซ๏ธ ๐Ÿšซ ๐Ÿค”. **FastAPI** ๐Ÿ”œ ๐Ÿ’ญ โšซ๏ธโ”. - -/// note - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ญ, โœ… [๐Ÿ”: *"๐Ÿƒ โ“" *](../../async.md){.internal-link target=_blank} ๐Ÿ“„ ๐Ÿ”ƒ `async` & `await` ๐Ÿฉบ. - -/// - -## ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ—„ - -๐ŸŒ ๐Ÿ“จ ๐Ÿ“„, ๐Ÿ”ฌ & ๐Ÿ“„ ๐Ÿ‘† ๐Ÿ”— (& ๐ŸŽง-๐Ÿ”—) ๐Ÿ”œ ๐Ÿ› ๏ธ ๐ŸŽ ๐Ÿ—„ ๐Ÿ”—. - -, ๐ŸŽ“ ๐Ÿฉบ ๐Ÿ”œ โœ”๏ธ ๐ŸŒ โ„น โšช๏ธโžก๏ธ ๐Ÿ‘ซ ๐Ÿ”— ๐Ÿ’โ€โ™‚๏ธ: - - - -## ๐Ÿ™… โš™๏ธ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ‘€ โšซ๏ธ, *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ“ฃ โš™๏ธ ๐Ÿ•โ” *โžก* & *๐Ÿ› ๏ธ* ๐Ÿ, & โคด๏ธ **FastAPI** โœŠ ๐Ÿ’… ๐Ÿค™ ๐Ÿ”ข โฎ๏ธ โ˜‘ ๐Ÿ”ข, โŽ ๐Ÿ“Š โšช๏ธโžก๏ธ ๐Ÿ“จ. - -๐Ÿค™, ๐ŸŒ (โš–๏ธ ๐Ÿ†) ๐Ÿ•ธ ๐Ÿ› ๏ธ ๐Ÿ‘ท ๐Ÿ‘‰ ๐ŸŽ ๐ŸŒŒ. - -๐Ÿ‘† ๐Ÿ™… ๐Ÿค™ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ”—. ๐Ÿ‘ซ ๐Ÿค™ ๐Ÿ‘† ๐Ÿ› ๏ธ (๐Ÿ‘‰ ๐Ÿ’ผ, **FastAPI**). - -โฎ๏ธ ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ฌ **FastAPI** ๐Ÿ‘ˆ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* "๐Ÿช€" ๐Ÿ”› ๐Ÿ•ณ ๐Ÿ™† ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ› ๏ธ โญ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, & **FastAPI** ๐Ÿ”œ โœŠ ๐Ÿ’… ๐Ÿ› ๏ธ โšซ๏ธ & "๐Ÿ’‰" ๐Ÿ. - -๐ŸŽ โš  โš– ๐Ÿ‘‰ ๐ŸŽ ๐Ÿ’ญ "๐Ÿ”— ๐Ÿ’‰": - -* โ„น -* ๐Ÿ•โ€๐Ÿฆบ -* ๐Ÿ•โ€๐Ÿฆบ -* ๐Ÿ’‰ -* ๐Ÿฆฒ - -## **FastAPI** ๐Ÿ”Œ-๐Ÿ”Œ - -๐Ÿ› ๏ธ & "๐Ÿ”Œ-"โ“‚ ๐Ÿ’ช ๐Ÿ— โš™๏ธ **๐Ÿ”— ๐Ÿ’‰** โš™๏ธ. โœ‹๏ธ ๐Ÿ‘, ๐Ÿ“ค ๐Ÿค™ **๐Ÿ™…โ€โ™‚ ๐Ÿ’ช โœ "๐Ÿ”Œ-๐Ÿ”Œ"**, โš™๏ธ ๐Ÿ”— โšซ๏ธ ๐Ÿ’ช ๐Ÿ“ฃ โ™พ ๐Ÿ”ข ๐Ÿ› ๏ธ & ๐Ÿ”— ๐Ÿ‘ˆ โ–ถ๏ธ๏ธ ๐Ÿ’ช ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -& ๐Ÿ”— ๐Ÿ’ช โœ ๐Ÿ“ถ ๐Ÿ™… & ๐Ÿ‹๏ธ ๐ŸŒŒ ๐Ÿ‘ˆ โœ” ๐Ÿ‘† ๐Ÿ—„ ๐Ÿ ๐Ÿ“ฆ ๐Ÿ‘† ๐Ÿ’ช, & ๐Ÿ› ๏ธ ๐Ÿ‘ซ โฎ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ”ข ๐Ÿ‘ฉโ€โคโ€๐Ÿ‘จ โธ ๐Ÿ“Ÿ, *๐ŸŒ–*. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ–ผ ๐Ÿ‘‰ โญ ๐Ÿ“ƒ, ๐Ÿ”ƒ ๐Ÿ”— & โ˜ ๐Ÿ’ฝ, ๐Ÿ’‚โ€โ™‚, โ™’๏ธ. - -## **FastAPI** ๐Ÿ”— - -๐Ÿฆ ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ โš’ **FastAPI** ๐Ÿ”— โฎ๏ธ: - -* ๐ŸŒ ๐Ÿ”— ๐Ÿ’ฝ -* โ˜ ๐Ÿ’ฝ -* ๐Ÿ”ข ๐Ÿ“ฆ -* ๐Ÿ”ข ๐Ÿ”— -* ๐Ÿค & โœ” โš™๏ธ -* ๐Ÿ› ๏ธ โš™๏ธ โš– โš™๏ธ -* ๐Ÿ“จ ๐Ÿ’ฝ ๐Ÿ’‰ โš™๏ธ -* โ™’๏ธ. - -## ๐Ÿ™… & ๐Ÿ‹๏ธ - -๐Ÿ‘ ๐Ÿ”— ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ ๐Ÿ“ถ ๐Ÿ™… ๐Ÿ”ฌ & โš™๏ธ, โšซ๏ธ ๐Ÿ“ถ ๐Ÿ‹๏ธ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ”„ ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ”— ๐Ÿ‘ซ. - -๐Ÿ”š, ๐Ÿ”— ๐ŸŒฒ ๐Ÿ”— ๐Ÿ—, & **๐Ÿ”— ๐Ÿ’‰** โš™๏ธ โœŠ ๐Ÿ’… ๐Ÿ”ฌ ๐ŸŒ ๐Ÿ‘‰ ๐Ÿ”— ๐Ÿ‘† (& ๐Ÿ‘ซ ๐ŸŽง-๐Ÿ”—) & ๐Ÿšš (๐Ÿ’‰) ๐Ÿ ๐Ÿ”  ๐Ÿ”. - -๐Ÿ–ผ, โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† โœ”๏ธ 4๏ธโƒฃ ๐Ÿ› ๏ธ ๐Ÿ”— (*โžก ๐Ÿ› ๏ธ*): - -* `/items/public/` -* `/items/private/` -* `/users/{user_id}/activate` -* `/items/pro/` - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐ŸŽ โœ” ๐Ÿ“„ ๐Ÿ”  ๐Ÿ‘ซ โฎ๏ธ ๐Ÿ”— & ๐ŸŽง-๐Ÿ”—: - -```mermaid -graph TB - -current_user(["current_user"]) -active_user(["active_user"]) -admin_user(["admin_user"]) -paying_user(["paying_user"]) - -public["/items/public/"] -private["/items/private/"] -activate_user["/users/{user_id}/activate"] -pro_items["/items/pro/"] - -current_user --> active_user -active_user --> admin_user -active_user --> paying_user - -current_user --> public -active_user --> private -admin_user --> activate_user -paying_user --> pro_items -``` - -## ๐Ÿ› ๏ธ โฎ๏ธ **๐Ÿ—„** - -๐ŸŒ ๐Ÿ‘ซ ๐Ÿ”—, โช ๐Ÿ“ฃ ๐Ÿ‘ซ ๐Ÿ“„, ๐Ÿšฎ ๐Ÿ”ข, ๐Ÿ”ฌ, โ™’๏ธ. ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. - -**FastAPI** ๐Ÿ”œ โœŠ ๐Ÿ’… ๐Ÿšฎ โšซ๏ธ ๐ŸŒ ๐Ÿ—„ ๐Ÿ”—, ๐Ÿ‘ˆ โšซ๏ธ ๐ŸŽฆ ๐ŸŽ“ ๐Ÿงพ โš™๏ธ. diff --git a/docs/em/docs/tutorial/dependencies/sub-dependencies.md b/docs/em/docs/tutorial/dependencies/sub-dependencies.md deleted file mode 100644 index 6d622e952..000000000 --- a/docs/em/docs/tutorial/dependencies/sub-dependencies.md +++ /dev/null @@ -1,86 +0,0 @@ -# ๐ŸŽง-๐Ÿ”— - -๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿ”— ๐Ÿ‘ˆ โœ”๏ธ **๐ŸŽง-๐Ÿ”—**. - -๐Ÿ‘ซ ๐Ÿ’ช **โฌ** ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘ซ. - -**FastAPI** ๐Ÿ”œ โœŠ ๐Ÿ’… ๐Ÿ”ฌ ๐Ÿ‘ซ. - -## ๐Ÿฅ‡ ๐Ÿ”— "โ˜‘" - -๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿฅ‡ ๐Ÿ”— ("โ˜‘") ๐Ÿ’–: - -{* ../../docs_src/dependencies/tutorial005.py hl[8:9] *} - -โšซ๏ธ ๐Ÿ“ฃ ๐Ÿ“ฆ ๐Ÿ”ข ๐Ÿ”ข `q` `str`, & โคด๏ธ โšซ๏ธ ๐Ÿ“จ โšซ๏ธ. - -๐Ÿ‘‰ ๐Ÿ™… (๐Ÿšซ ๐Ÿ“ถ โš ), โœ‹๏ธ ๐Ÿ”œ โ„น ๐Ÿ‘ฅ ๐ŸŽฏ ๐Ÿ”› โ” ๐ŸŽง-๐Ÿ”— ๐Ÿ‘ท. - -## ๐Ÿฅˆ ๐Ÿ”—, "โ˜‘" & "โš“๏ธ" - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โœ โž•1๏ธโƒฃ ๐Ÿ”— ๐Ÿ”ข ("โ˜‘") ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿ•ฐ ๐Ÿ“ฃ ๐Ÿ”— ๐Ÿšฎ ๐Ÿ‘ (โšซ๏ธ "โš“๏ธ" ๐Ÿ’โ€โ™‚๏ธ): - -{* ../../docs_src/dependencies/tutorial005.py hl[13] *} - -โžก๏ธ ๐ŸŽฏ ๐Ÿ”› ๐Ÿ”ข ๐Ÿ“ฃ: - -* โœ‹๏ธ ๐Ÿ‘‰ ๐Ÿ”ข ๐Ÿ”— ("โ˜‘") โšซ๏ธ, โšซ๏ธ ๐Ÿ“ฃ โž•1๏ธโƒฃ ๐Ÿ”— (โšซ๏ธ "๐Ÿช€" ๐Ÿ”› ๐Ÿ•ณ ๐Ÿ™†). - * โšซ๏ธ ๐Ÿช€ ๐Ÿ”› `query_extractor`, & ๐Ÿ› ๏ธ ๐Ÿ’ฒ ๐Ÿ“จ โšซ๏ธ ๐Ÿ”ข `q`. -* โšซ๏ธ ๐Ÿ“ฃ ๐Ÿ“ฆ `last_query` ๐Ÿช, `str`. - * ๐Ÿšฅ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿšซ ๐Ÿšš ๐Ÿ™† ๐Ÿ”ข `q`, ๐Ÿ‘ฅ โš™๏ธ ๐Ÿ ๐Ÿ”ข โš™๏ธ, โ” ๐Ÿ‘ฅ ๐Ÿ–Š ๐Ÿช โญ. - -## โš™๏ธ ๐Ÿ”— - -โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ ๐Ÿ”— โฎ๏ธ: - -{* ../../docs_src/dependencies/tutorial005.py hl[22] *} - -/// info - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ•ด ๐Ÿ“ฃ 1๏ธโƒฃ ๐Ÿ”— *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, `query_or_cookie_extractor`. - -โœ‹๏ธ **FastAPI** ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ โšซ๏ธ โœ”๏ธ โŽ `query_extractor` ๐Ÿฅ‡, ๐Ÿšถโ€โ™€๏ธ ๐Ÿ ๐Ÿ‘ˆ `query_or_cookie_extractor` โช ๐Ÿค™ โšซ๏ธ. - -/// - -```mermaid -graph TB - -query_extractor(["query_extractor"]) -query_or_cookie_extractor(["query_or_cookie_extractor"]) - -read_query["/items/"] - -query_extractor --> query_or_cookie_extractor --> read_query -``` - -## โš™๏ธ ๐ŸŽ ๐Ÿ”— ๐Ÿ’— ๐Ÿ•ฐ - -๐Ÿšฅ 1๏ธโƒฃ ๐Ÿ‘† ๐Ÿ”— ๐Ÿ“ฃ ๐Ÿ’— ๐Ÿ•ฐ ๐ŸŽ *โžก ๐Ÿ› ๏ธ*, ๐Ÿ–ผ, ๐Ÿ’— ๐Ÿ”— โœ”๏ธ โš  ๐ŸŽง-๐Ÿ”—, **FastAPI** ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿค™ ๐Ÿ‘ˆ ๐ŸŽง-๐Ÿ”— ๐Ÿ•ด ๐Ÿ• ๐Ÿ“ ๐Ÿ“จ. - -& โšซ๏ธ ๐Ÿ”œ ๐Ÿ–Š ๐Ÿ“จ ๐Ÿ’ฒ "๐Ÿ’พ" & ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐ŸŒ "โš“๏ธ" ๐Ÿ‘ˆ ๐Ÿ’ช โšซ๏ธ ๐Ÿ‘ˆ ๐ŸŽฏ ๐Ÿ“จ, โ†ฉ๏ธ ๐Ÿค™ ๐Ÿ”— ๐Ÿ’— ๐Ÿ•ฐ ๐ŸŽ ๐Ÿ“จ. - -๐Ÿง ๐Ÿ˜ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— ๐Ÿค™ ๐Ÿ”  ๐Ÿ” (๐ŸŽฒ ๐Ÿ’— ๐Ÿ•ฐ) ๐ŸŽ ๐Ÿ“จ โ†ฉ๏ธ โš™๏ธ "๐Ÿ’พ" ๐Ÿ’ฒ, ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ”ข `use_cache=False` ๐Ÿ•โ” โš™๏ธ `Depends`: - -```Python hl_lines="1" -async def needy_dependency(fresh_value: str = Depends(get_value, use_cache=False)): - return {"fresh_value": fresh_value} -``` - -## ๐ŸŒƒ - -โ†–๏ธ โšช๏ธโžก๏ธ ๐ŸŒ ๐ŸŽ€ ๐Ÿ”ค โš™๏ธ ๐Ÿ“ฅ, **๐Ÿ”— ๐Ÿ’‰** โš™๏ธ ๐Ÿ™…. - -๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ‘€ ๐ŸŽ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -โœ‹๏ธ, โšซ๏ธ ๐Ÿ“ถ ๐Ÿ‹๏ธ, & โœ” ๐Ÿ‘† ๐Ÿ“ฃ ๐ŸŽฒ ๐Ÿ™‡ ๐Ÿฆ ๐Ÿ”— "๐Ÿ“Š" (๐ŸŒฒ). - -/// tip - -๐ŸŒ ๐Ÿ‘‰ ๐Ÿ’ช ๐Ÿšซ ๐Ÿ˜‘ โš  โฎ๏ธ ๐Ÿ‘ซ ๐Ÿ™… ๐Ÿ–ผ. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โ” โš  โšซ๏ธ ๐Ÿ“ƒ ๐Ÿ”ƒ **๐Ÿ’‚โ€โ™‚**. - - & ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’ธ ๐Ÿ“Ÿ โšซ๏ธ ๐Ÿ”œ ๐Ÿ–Š ๐Ÿ‘†. - -/// diff --git a/docs/em/docs/tutorial/encoder.md b/docs/em/docs/tutorial/encoder.md deleted file mode 100644 index ad05f701e..000000000 --- a/docs/em/docs/tutorial/encoder.md +++ /dev/null @@ -1,35 +0,0 @@ -# ๐ŸŽป ๐Ÿ”— ๐Ÿ”ข - -๐Ÿ“ค ๐Ÿ’ผ ๐ŸŒโ” ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿ’ช ๐Ÿ—œ ๐Ÿ’ฝ ๐Ÿ†Ž (๐Ÿ’– Pydantic ๐Ÿท) ๐Ÿ•ณ ๐Ÿ”— โฎ๏ธ ๐ŸŽป (๐Ÿ’– `dict`, `list`, โ™’๏ธ). - -๐Ÿ–ผ, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿช โšซ๏ธ ๐Ÿ’ฝ. - -๐Ÿ‘ˆ, **FastAPI** ๐Ÿšš `jsonable_encoder()` ๐Ÿ”ข. - -## โš™๏ธ `jsonable_encoder` - -โžก๏ธ ๐ŸŒˆ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿ’ฝ `fake_db` ๐Ÿ‘ˆ ๐Ÿ•ด ๐Ÿ“จ ๐ŸŽป ๐Ÿ”— ๐Ÿ’ฝ. - -๐Ÿ–ผ, โšซ๏ธ ๐Ÿšซ ๐Ÿ“จ `datetime` ๐ŸŽš, ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ”— โฎ๏ธ ๐ŸŽป. - -, `datetime` ๐ŸŽš ๐Ÿ”œ โœ”๏ธ ๐Ÿ—œ `str` โš— ๐Ÿ’ฝ ๐Ÿ’พ ๐Ÿ“. - -๐ŸŽ ๐ŸŒŒ, ๐Ÿ‘‰ ๐Ÿ’ฝ ๐Ÿšซ๐Ÿ”œ ๐Ÿ“จ Pydantic ๐Ÿท (๐ŸŽš โฎ๏ธ ๐Ÿ”ข), ๐Ÿ•ด `dict`. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `jsonable_encoder` ๐Ÿ‘ˆ. - -โšซ๏ธ ๐Ÿ“จ ๐ŸŽš, ๐Ÿ’– Pydantic ๐Ÿท, & ๐Ÿ“จ ๐ŸŽป ๐Ÿ”— โฌ: - -{* ../../docs_src/encoder/tutorial001.py hl[5,22] *} - -๐Ÿ‘‰ ๐Ÿ–ผ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ—œ Pydantic ๐Ÿท `dict`, & `datetime` `str`. - -๐Ÿ ๐Ÿค™ โšซ๏ธ ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ—œ โฎ๏ธ ๐Ÿ ๐Ÿฉ `json.dumps()`. - -โšซ๏ธ ๐Ÿšซ ๐Ÿ“จ โญ• `str` โš— ๐Ÿ’ฝ ๐ŸŽป ๐Ÿ“ (๐ŸŽป). โšซ๏ธ ๐Ÿ“จ ๐Ÿ ๐Ÿฉ ๐Ÿ’ฝ ๐Ÿ“Š (โœ… `dict`) โฎ๏ธ ๐Ÿ’ฒ & ๐ŸŽง-๐Ÿ’ฒ ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿ”— โฎ๏ธ ๐ŸŽป. - -/// note - -`jsonable_encoder` ๐Ÿค™ โš™๏ธ **FastAPI** ๐Ÿ”˜ ๐Ÿ—œ ๐Ÿ’ฝ. โœ‹๏ธ โšซ๏ธ โš  ๐Ÿ“š ๐ŸŽ ๐Ÿ˜. - -/// diff --git a/docs/em/docs/tutorial/extra-data-types.md b/docs/em/docs/tutorial/extra-data-types.md deleted file mode 100644 index f15a74b4a..000000000 --- a/docs/em/docs/tutorial/extra-data-types.md +++ /dev/null @@ -1,62 +0,0 @@ -# โž• ๐Ÿ’ฝ ๐Ÿ†Ž - -๐Ÿ†™ ๐Ÿ”œ, ๐Ÿ‘† โœ”๏ธ โš™๏ธ โš  ๐Ÿ“Š ๐Ÿ†Ž, ๐Ÿ’–: - -* `int` -* `float` -* `str` -* `bool` - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŒ… ๐Ÿ— ๐Ÿ“Š ๐Ÿ†Ž. - -& ๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐ŸŽ โš’ ๐Ÿ‘€ ๐Ÿ†™ ๐Ÿ”œ: - -* ๐Ÿ‘‘ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ. -* ๐Ÿ’ฝ ๐Ÿ› ๏ธ โšช๏ธโžก๏ธ ๐Ÿ“จ ๐Ÿ“จ. -* ๐Ÿ’ฝ ๐Ÿ› ๏ธ ๐Ÿ“จ ๐Ÿ’ฝ. -* ๐Ÿ’ฝ ๐Ÿ”ฌ. -* ๐Ÿง โœ & ๐Ÿงพ. - -## ๐ŸŽ ๐Ÿ’ฝ ๐Ÿ†Ž - -๐Ÿ“ฅ ๐ŸŒ– ๐Ÿ“Š ๐Ÿ†Ž ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ: - -* `UUID`: - * ๐Ÿฉ "โญ ๐Ÿ˜ ๐Ÿ†”", โš  ๐Ÿ†” ๐Ÿ“š ๐Ÿ’ฝ & โš™๏ธ. - * ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ”œ ๐ŸŽจ `str`. -* `datetime.datetime`: - * ๐Ÿ `datetime.datetime`. - * ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ”œ ๐ŸŽจ `str` ๐Ÿ’พ 8๏ธโƒฃ6๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ ๐Ÿ“, ๐Ÿ’–: `2008-09-15T15:53:00+05:00`. -* `datetime.date`: - * ๐Ÿ `datetime.date`. - * ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ”œ ๐ŸŽจ `str` ๐Ÿ’พ 8๏ธโƒฃ6๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ ๐Ÿ“, ๐Ÿ’–: `2008-09-15`. -* `datetime.time`: - * ๐Ÿ `datetime.time`. - * ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ”œ ๐ŸŽจ `str` ๐Ÿ’พ 8๏ธโƒฃ6๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ ๐Ÿ“, ๐Ÿ’–: `14:23:55.003`. -* `datetime.timedelta`: - * ๐Ÿ `datetime.timedelta`. - * ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ”œ ๐ŸŽจ `float` ๐ŸŒ ๐Ÿฅˆ. - * Pydantic โœ” ๐ŸŽฆ โšซ๏ธ "๐Ÿ’พ 8๏ธโƒฃ6๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ ๐Ÿ•ฐ โž• ๐Ÿ”ข", ๐Ÿ‘€ ๐Ÿฉบ ๐ŸŒ… โ„น. -* `frozenset`: - * ๐Ÿ“จ & ๐Ÿ“จ, ๐Ÿ˜ฅ ๐ŸŽ `set`: - * ๐Ÿ“จ, ๐Ÿ“‡ ๐Ÿ”œ โœ, โŽ โŽ & ๐Ÿญ โšซ๏ธ `set`. - * ๐Ÿ“จ, `set` ๐Ÿ”œ ๐Ÿ—œ `list`. - * ๐Ÿ— ๐Ÿ”— ๐Ÿ”œ โœ” ๐Ÿ‘ˆ `set` ๐Ÿ’ฒ ๐Ÿ˜ (โš™๏ธ ๐ŸŽป ๐Ÿ”— `uniqueItems`). -* `bytes`: - * ๐Ÿฉ ๐Ÿ `bytes`. - * ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ”œ ๐Ÿ˜ฅ `str`. - * ๐Ÿ— ๐Ÿ”— ๐Ÿ”œ โœ” ๐Ÿ‘ˆ โšซ๏ธ `str` โฎ๏ธ `binary` "๐Ÿ“". -* `Decimal`: - * ๐Ÿฉ ๐Ÿ `Decimal`. - * ๐Ÿ“จ & ๐Ÿ“จ, ๐Ÿต ๐ŸŽ `float`. -* ๐Ÿ‘† ๐Ÿ’ช โœ… ๐ŸŒ โ˜‘ Pydantic ๐Ÿ“Š ๐Ÿ†Ž ๐Ÿ“ฅ: Pydantic ๐Ÿ“Š ๐Ÿ†Ž. - -## ๐Ÿ–ผ - -๐Ÿ“ฅ ๐Ÿ–ผ *โžก ๐Ÿ› ๏ธ* โฎ๏ธ ๐Ÿ”ข โš™๏ธ ๐Ÿ”› ๐Ÿ†Ž. - -{* ../../docs_src/extra_data_types/tutorial001.py hl[1,3,12:16] *} - -๐Ÿ—’ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ”˜ ๐Ÿ”ข โœ”๏ธ ๐Ÿ‘ซ ๐Ÿ  ๐Ÿ’ฝ ๐Ÿ†Ž, & ๐Ÿ‘† ๐Ÿ’ช, ๐Ÿ–ผ, ๐ŸŽญ ๐Ÿ˜ ๐Ÿ“… ๐ŸŽญ, ๐Ÿ’–: - -{* ../../docs_src/extra_data_types/tutorial001.py hl[18:19] *} diff --git a/docs/em/docs/tutorial/extra-models.md b/docs/em/docs/tutorial/extra-models.md deleted file mode 100644 index 19ab5b798..000000000 --- a/docs/em/docs/tutorial/extra-models.md +++ /dev/null @@ -1,211 +0,0 @@ -# โž• ๐Ÿท - -โ–ถ๏ธ โฎ๏ธ โฎ๏ธ ๐Ÿ–ผ, โšซ๏ธ ๐Ÿ”œ โš  โœ”๏ธ ๐ŸŒ… ๐ŸŒ˜ 1๏ธโƒฃ ๐Ÿ”— ๐Ÿท. - -๐Ÿ‘‰ โœด๏ธ ๐Ÿ’ผ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿท, โ†ฉ๏ธ: - -* **๐Ÿ”ข ๐Ÿท** ๐Ÿ’ช ๐Ÿ’ช โœ”๏ธ ๐Ÿ”. -* **๐Ÿ”ข ๐Ÿท** ๐Ÿ”œ ๐Ÿšซ โœ”๏ธ ๐Ÿ”. -* **๐Ÿ’ฝ ๐Ÿท** ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ’ช โœ”๏ธ #๏ธโƒฃ ๐Ÿ”. - -/// danger - -๐Ÿ™… ๐Ÿช ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿ”. ๐Ÿ•ง ๐Ÿช "๐Ÿ” #๏ธโƒฃ" ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โคด๏ธ โœ”. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ญ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ก โšซ๏ธโ” "๐Ÿ”#๏ธโƒฃ" [๐Ÿ’‚โ€โ™‚ ๐Ÿ“ƒ](security/simple-oauth2.md#_4){.internal-link target=_blank}. - -/// - -## ๐Ÿ’— ๐Ÿท - -๐Ÿ“ฅ ๐Ÿข ๐Ÿ’ญ โ” ๐Ÿท ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’– โฎ๏ธ ๐Ÿ‘ซ ๐Ÿ” ๐Ÿ‘ & ๐Ÿฅ‰ ๐ŸŒโ” ๐Ÿ‘ซ โš™๏ธ: - -{* ../../docs_src/extra_models/tutorial001.py hl[9,11,16,22,24,29:30,33:35,40:41] *} - -### ๐Ÿ”ƒ `**user_in.dict()` - -#### Pydantic `.dict()` - -`user_in` Pydantic ๐Ÿท ๐ŸŽ“ `UserIn`. - -Pydantic ๐Ÿท โœ”๏ธ `.dict()` ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ‘ˆ ๐Ÿ“จ `dict` โฎ๏ธ ๐Ÿท ๐Ÿ’ฝ. - -, ๐Ÿšฅ ๐Ÿ‘ฅ โœ Pydantic ๐ŸŽš `user_in` ๐Ÿ’–: - -```Python -user_in = UserIn(username="john", password="secret", email="john.doe@example.com") -``` - -& โคด๏ธ ๐Ÿ‘ฅ ๐Ÿค™: - -```Python -user_dict = user_in.dict() -``` - -๐Ÿ‘ฅ ๐Ÿ”œ โœ”๏ธ `dict` โฎ๏ธ ๐Ÿ’ฝ ๐Ÿ”ข `user_dict` (โšซ๏ธ `dict` โ†ฉ๏ธ Pydantic ๐Ÿท ๐ŸŽš). - -& ๐Ÿšฅ ๐Ÿ‘ฅ ๐Ÿค™: - -```Python -print(user_dict) -``` - -๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿคš ๐Ÿ `dict` โฎ๏ธ: - -```Python -{ - 'username': 'john', - 'password': 'secret', - 'email': 'john.doe@example.com', - 'full_name': None, -} -``` - -#### ๐ŸŽ `dict` - -๐Ÿšฅ ๐Ÿ‘ฅ โœŠ `dict` ๐Ÿ’– `user_dict` & ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ ๐Ÿ”ข (โš–๏ธ ๐ŸŽ“) โฎ๏ธ `**user_dict`, ๐Ÿ ๐Ÿ”œ "๐ŸŽ" โšซ๏ธ. โšซ๏ธ ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”‘ & ๐Ÿ’ฒ `user_dict` ๐Ÿ”— ๐Ÿ”‘-๐Ÿ’ฒ โŒ. - -, โ–ถ๏ธ โฎ๏ธ `user_dict` โšช๏ธโžก๏ธ ๐Ÿ”›, โœ: - -```Python -UserInDB(**user_dict) -``` - -๐Ÿ”œ ๐Ÿ ๐Ÿ•ณ ๐ŸŒ“: - -```Python -UserInDB( - username="john", - password="secret", - email="john.doe@example.com", - full_name=None, -) -``` - -โš–๏ธ ๐ŸŒ… โšซ๏ธโ”, โš™๏ธ `user_dict` ๐Ÿ”—, โฎ๏ธ โšซ๏ธโ” ๐ŸŽš โšซ๏ธ ๐Ÿ’ช โœ”๏ธ ๐Ÿ”ฎ: - -```Python -UserInDB( - username = user_dict["username"], - password = user_dict["password"], - email = user_dict["email"], - full_name = user_dict["full_name"], -) -``` - -#### Pydantic ๐Ÿท โšช๏ธโžก๏ธ ๐ŸŽš โž•1๏ธโƒฃ - -๐Ÿ–ผ ๐Ÿ”› ๐Ÿ‘ฅ ๐Ÿคš `user_dict` โšช๏ธโžก๏ธ `user_in.dict()`, ๐Ÿ‘‰ ๐Ÿ“Ÿ: - -```Python -user_dict = user_in.dict() -UserInDB(**user_dict) -``` - -๐Ÿ”œ ๐ŸŒ“: - -```Python -UserInDB(**user_in.dict()) -``` - -...โ†ฉ๏ธ `user_in.dict()` `dict`, & โคด๏ธ ๐Ÿ‘ฅ โš’ ๐Ÿ "๐ŸŽ" โšซ๏ธ ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ `UserInDB` ๐Ÿ”  โฎ๏ธ `**`. - -, ๐Ÿ‘ฅ ๐Ÿคš Pydantic ๐Ÿท โšช๏ธโžก๏ธ ๐Ÿ’ฝ โž•1๏ธโƒฃ Pydantic ๐Ÿท. - -#### ๐ŸŽ `dict` & โž• ๐Ÿ‡จ๐Ÿ‡ป - -& โคด๏ธ โŽ โž• ๐Ÿ‡จ๐Ÿ‡ป โŒ `hashed_password=hashed_password`, ๐Ÿ’–: - -```Python -UserInDB(**user_in.dict(), hashed_password=hashed_password) -``` - -...๐Ÿ”š ๐Ÿ†™ ๐Ÿ’†โ€โ™‚ ๐Ÿ’–: - -```Python -UserInDB( - username = user_dict["username"], - password = user_dict["password"], - email = user_dict["email"], - full_name = user_dict["full_name"], - hashed_password = hashed_password, -) -``` - -/// warning - -๐Ÿ”— ๐ŸŒ– ๐Ÿ”ข ๐Ÿค– ๐Ÿ’ช ๐Ÿ’ง ๐Ÿ’ฝ, โœ‹๏ธ ๐Ÿ‘ซ โ†—๏ธ ๐Ÿšซ ๐Ÿšš ๐Ÿ™† ๐ŸŽฐ ๐Ÿ’‚โ€โ™‚. - -/// - -## ๐Ÿ“‰ โŽ - -๐Ÿ“‰ ๐Ÿ“Ÿ โŽ 1๏ธโƒฃ ๐Ÿš ๐Ÿ’ญ **FastAPI**. - -๐Ÿ“Ÿ โŽ ๐Ÿ“ˆ ๐Ÿคž ๐Ÿ›, ๐Ÿ’‚โ€โ™‚ โ”, ๐Ÿ“Ÿ ๐Ÿ” โ” (๐Ÿ•โ” ๐Ÿ‘† โ„น 1๏ธโƒฃ ๐Ÿฅ‰ โœ‹๏ธ ๐Ÿšซ ๐ŸŽ), โ™’๏ธ. - -& ๐Ÿ‘‰ ๐Ÿท ๐ŸŒ ๐Ÿค ๐Ÿ“š ๐Ÿ’ฝ & โŽ ๐Ÿ”ข ๐Ÿ“› & ๐Ÿ†Ž. - -๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ‘ป. - -๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ“ฃ `UserBase` ๐Ÿท ๐Ÿ‘ˆ ๐Ÿฆ ๐Ÿงข ๐Ÿ‘† ๐ŸŽ ๐Ÿท. & โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ’ช โš’ ๐Ÿฟ ๐Ÿ‘ˆ ๐Ÿท ๐Ÿ‘ˆ ๐Ÿ˜– ๐Ÿšฎ ๐Ÿ”ข (๐Ÿ†Ž ๐Ÿ“„, ๐Ÿ”ฌ, โ™’๏ธ). - -๐ŸŒ ๐Ÿ’ฝ ๐Ÿ› ๏ธ, ๐Ÿ”ฌ, ๐Ÿงพ, โ™’๏ธ. ๐Ÿ”œ ๐Ÿ‘ท ๐Ÿ›Ž. - -๐Ÿ‘ˆ ๐ŸŒŒ, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”บ ๐Ÿ–– ๐Ÿท (โฎ๏ธ ๐Ÿ”ข `password`, โฎ๏ธ `hashed_password` & ๐Ÿต ๐Ÿ”): - -{* ../../docs_src/extra_models/tutorial002.py hl[9,15:16,19:20,23:24] *} - -## `Union` โš–๏ธ `anyOf` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“จ `Union` 2๏ธโƒฃ ๐Ÿ†Ž, ๐Ÿ‘ˆ โ›“, ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ”œ ๐Ÿ™† 2๏ธโƒฃ. - -โšซ๏ธ ๐Ÿ”œ ๐Ÿ”ฌ ๐Ÿ—„ โฎ๏ธ `anyOf`. - -๐Ÿ‘ˆ, โš™๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž ๐Ÿ”‘ `typing.Union`: - -/// note - -๐Ÿ•โ” โš– `Union`, ๐Ÿ”Œ ๐Ÿ† ๐ŸŽฏ ๐Ÿ†Ž ๐Ÿฅ‡, โฉ ๐ŸŒ˜ ๐ŸŽฏ ๐Ÿ†Ž. ๐Ÿ–ผ ๐Ÿ”›, ๐ŸŒ– ๐ŸŽฏ `PlaneItem` ๐Ÿ‘Ÿ โญ `CarItem` `Union[PlaneItem, CarItem]`. - -/// - -{* ../../docs_src/extra_models/tutorial003.py hl[1,14:15,18:20,33] *} - -### `Union` ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ - -๐Ÿ‘‰ ๐Ÿ–ผ ๐Ÿ‘ฅ ๐Ÿšถโ€โ™€๏ธ `Union[PlaneItem, CarItem]` ๐Ÿ’ฒ โŒ `response_model`. - -โ†ฉ๏ธ ๐Ÿ‘ฅ ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ **๐Ÿ’ฒ โŒ** โ†ฉ๏ธ ๐Ÿšฎ โšซ๏ธ **๐Ÿ†Ž โœ**, ๐Ÿ‘ฅ โœ”๏ธ โš™๏ธ `Union` ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ. - -๐Ÿšฅ โšซ๏ธ ๐Ÿ†Ž โœ ๐Ÿ‘ฅ ๐Ÿ’ช โœ”๏ธ โš™๏ธ โธ โธ,: - -```Python -some_variable: PlaneItem | CarItem -``` - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘ฅ ๐Ÿšฎ ๐Ÿ‘ˆ `response_model=PlaneItem | CarItem` ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿคš โŒ, โ†ฉ๏ธ ๐Ÿ ๐Ÿ”œ ๐Ÿ”„ ๐ŸŽญ **โŒ ๐Ÿ› ๏ธ** ๐Ÿ–– `PlaneItem` & `CarItem` โ†ฉ๏ธ ๐Ÿ”ฌ ๐Ÿ‘ˆ ๐Ÿ†Ž โœ. - -## ๐Ÿ“‡ ๐Ÿท - -๐ŸŽ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“จ ๐Ÿ“‡ ๐ŸŽš. - -๐Ÿ‘ˆ, โš™๏ธ ๐Ÿฉ ๐Ÿ `typing.List` (โš–๏ธ `list` ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”›): - -{* ../../docs_src/extra_models/tutorial004.py hl[1,20] *} - -## ๐Ÿ“จ โฎ๏ธ โŒ `dict` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“จ โš™๏ธ โœ… โŒ `dict`, ๐Ÿ“ฃ ๐Ÿ†Ž ๐Ÿ”‘ & ๐Ÿ’ฒ, ๐Ÿต โš™๏ธ Pydantic ๐Ÿท. - -๐Ÿ‘‰ โš  ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ญ โ˜‘ ๐Ÿ‘/๐Ÿ”ข ๐Ÿ“› (๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ’ช Pydantic ๐Ÿท) โช. - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `typing.Dict` (โš–๏ธ `dict` ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ & ๐Ÿ”›): - -{* ../../docs_src/extra_models/tutorial005.py hl[1,8] *} - -## ๐ŸŒƒ - -โš™๏ธ ๐Ÿ’— Pydantic ๐Ÿท & ๐Ÿ˜– โžก ๐Ÿ”  ๐Ÿ’ผ. - -๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ช โœ”๏ธ ๐Ÿ‘ ๐Ÿ’ฝ ๐Ÿท ๐Ÿ“ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿšฅ ๐Ÿ‘ˆ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ”œ ๐Ÿ’ช โœ”๏ธ ๐ŸŽ "๐Ÿ‡ต๐Ÿ‡ธ". ๐Ÿ’ผ โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป "๐Ÿ‘จโ€๐Ÿ’ผ" โฎ๏ธ ๐Ÿ‡ต๐Ÿ‡ธ โœ… `password`, `password_hash` & ๐Ÿ™…โ€โ™‚ ๐Ÿ”. diff --git a/docs/em/docs/tutorial/first-steps.md b/docs/em/docs/tutorial/first-steps.md deleted file mode 100644 index f9bb3fb75..000000000 --- a/docs/em/docs/tutorial/first-steps.md +++ /dev/null @@ -1,335 +0,0 @@ -# ๐Ÿฅ‡ ๐Ÿ” - -๐Ÿ™… FastAPI ๐Ÿ“ ๐Ÿ’ช ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ‘‰: - -{* ../../docs_src/first_steps/tutorial001.py *} - -๐Ÿ“ ๐Ÿ‘ˆ ๐Ÿ“ `main.py`. - -๐Ÿƒ ๐Ÿ–– ๐Ÿ’ฝ: - -
- -```console -$ uvicorn main:app --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -INFO: Started reloader process [28720] -INFO: Started server process [28722] -INFO: Waiting for application startup. -INFO: Application startup complete. -``` - -
- -/// note - -๐Ÿ“‹ `uvicorn main:app` ๐Ÿ”—: - -* `main`: ๐Ÿ“ `main.py` (๐Ÿ "๐Ÿ•น"). -* `app`: ๐ŸŽš โœ ๐Ÿ”˜ `main.py` โฎ๏ธ โธ `app = FastAPI()`. -* `--reload`: โš’ ๐Ÿ’ฝ โ โฎ๏ธ ๐Ÿ“Ÿ ๐Ÿ”€. ๐Ÿ•ด โš™๏ธ ๐Ÿ› ๏ธ. - -/// - -๐Ÿ”ข, ๐Ÿ“ค โธ โฎ๏ธ ๐Ÿ•ณ ๐Ÿ’–: - -```hl_lines="4" -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -๐Ÿ‘ˆ โธ ๐ŸŽฆ ๐Ÿ“› ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ“ฑ โž– ๐Ÿฆ, ๐Ÿ‘† ๐Ÿ‡ง๐Ÿ‡ฟ ๐ŸŽฐ. - -### โœ… โšซ๏ธ - -๐Ÿ“‚ ๐Ÿ‘† ๐Ÿ–ฅ http://127.0.0.1:8000. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŽป ๐Ÿ“จ: - -```JSON -{"message": "Hello World"} -``` - -### ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿฉบ - -๐Ÿ”œ ๐Ÿšถ http://127.0.0.1:8000/docs. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿง ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿงพ (๐Ÿšš ๐Ÿฆ ๐ŸŽš): - -![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) - -### ๐ŸŽ› ๐Ÿ› ๏ธ ๐Ÿฉบ - -& ๐Ÿ”œ, ๐Ÿšถ http://127.0.0.1:8000/redoc. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŽ› ๐Ÿง ๐Ÿงพ (๐Ÿšš ๐Ÿ“„): - -![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) - -### ๐Ÿ—„ - -**FastAPI** ๐Ÿ— "๐Ÿ”—" โฎ๏ธ ๐ŸŒ ๐Ÿ‘† ๐Ÿ› ๏ธ โš™๏ธ **๐Ÿ—„** ๐Ÿฉ โš– ๐Ÿ”—. - -#### "๐Ÿ”—" - -"๐Ÿ”—" ๐Ÿ”‘ โš–๏ธ ๐Ÿ“› ๐Ÿ•ณ. ๐Ÿšซ ๐Ÿ“Ÿ ๐Ÿ‘ˆ ๐Ÿ› ๏ธ โšซ๏ธ, โœ‹๏ธ ๐Ÿ“ ๐Ÿ“›. - -#### ๐Ÿ› ๏ธ "๐Ÿ”—" - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ—„ ๐Ÿ”ง ๐Ÿ‘ˆ ๐Ÿค” โ” ๐Ÿ”ฌ ๐Ÿ”— ๐Ÿ‘† ๐Ÿ› ๏ธ. - -๐Ÿ‘‰ ๐Ÿ”— ๐Ÿ”‘ ๐Ÿ”Œ ๐Ÿ‘† ๐Ÿ› ๏ธ โžก, ๐Ÿ’ช ๐Ÿ”ข ๐Ÿ‘ซ โœŠ, โ™’๏ธ. - -#### ๐Ÿ’ฝ "๐Ÿ”—" - -โš– "๐Ÿ”—" ๐Ÿ’ช ๐Ÿ”— ๐Ÿ’  ๐Ÿ’ฝ, ๐Ÿ’– ๐ŸŽป ๐ŸŽš. - -๐Ÿ‘ˆ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ”œ โ›“ ๐ŸŽป ๐Ÿ”ข, & ๐Ÿ“Š ๐Ÿ†Ž ๐Ÿ‘ซ โœ”๏ธ, โ™’๏ธ. - -#### ๐Ÿ—„ & ๐ŸŽป ๐Ÿ”— - -๐Ÿ—„ ๐Ÿ”ฌ ๐Ÿ› ๏ธ ๐Ÿ”— ๐Ÿ‘† ๐Ÿ› ๏ธ. & ๐Ÿ‘ˆ ๐Ÿ”— ๐Ÿ”Œ ๐Ÿ”‘ (โš–๏ธ "๐Ÿ”—") ๐Ÿ“Š ๐Ÿ“จ & ๐Ÿ“จ ๐Ÿ‘† ๐Ÿ› ๏ธ โš™๏ธ **๐ŸŽป ๐Ÿ”—**, ๐Ÿฉ ๐ŸŽป ๐Ÿ“Š ๐Ÿ”—. - -#### โœ… `openapi.json` - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ˜Ÿ ๐Ÿ”ƒ โ” ๐Ÿฃ ๐Ÿ—„ ๐Ÿ”— ๐Ÿ‘€ ๐Ÿ’–, FastAPI ๐Ÿ” ๐Ÿ— ๐ŸŽป (๐Ÿ”—) โฎ๏ธ ๐Ÿ“› ๐ŸŒ ๐Ÿ‘† ๐Ÿ› ๏ธ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘€ โšซ๏ธ ๐Ÿ”—: http://127.0.0.1:8000/openapi.json. - -โšซ๏ธ ๐Ÿ”œ ๐ŸŽฆ ๐ŸŽป โ–ถ๏ธ โฎ๏ธ ๐Ÿ•ณ ๐Ÿ’–: - -```JSON -{ - "openapi": "3.0.2", - "info": { - "title": "FastAPI", - "version": "0.1.0" - }, - "paths": { - "/items/": { - "get": { - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - - - -... -``` - -#### โšซ๏ธโ” ๐Ÿ—„ - -๐Ÿ—„ ๐Ÿ”— โšซ๏ธโ” ๐Ÿ‹๏ธ 2๏ธโƒฃ ๐ŸŽ“ ๐Ÿงพ โš™๏ธ ๐Ÿ”Œ. - -& ๐Ÿ“ค ๐Ÿ’ฏ ๐ŸŽ›, ๐ŸŒ โš“๏ธ ๐Ÿ”› ๐Ÿ—„. ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ™† ๐Ÿ“š ๐ŸŽ› ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ— โฎ๏ธ **FastAPI**. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โšซ๏ธ ๐Ÿ— ๐Ÿ“Ÿ ๐Ÿ”, ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ˆ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ. ๐Ÿ–ผ, ๐Ÿ•ธ, ๐Ÿ“ฑ โš–๏ธ โ˜ ๐Ÿˆธ. - -## ๐ŸŒƒ, ๐Ÿ” ๐Ÿ” - -### ๐Ÿ” 1๏ธโƒฃ: ๐Ÿ—„ `FastAPI` - -{* ../../docs_src/first_steps/tutorial001.py hl[1] *} - -`FastAPI` ๐Ÿ ๐ŸŽ“ ๐Ÿ‘ˆ ๐Ÿšš ๐ŸŒ ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ. - -/// note | ๐Ÿ“ก โ„น - -`FastAPI` ๐ŸŽ“ ๐Ÿ‘ˆ ๐Ÿ˜– ๐Ÿ”— โšช๏ธโžก๏ธ `Starlette`. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŒ ๐Ÿ’ƒ ๐Ÿ› ๏ธ โฎ๏ธ `FastAPI` ๐Ÿ’โ€โ™‚๏ธ. - -/// - -### ๐Ÿ” 2๏ธโƒฃ: โœ `FastAPI` "๐Ÿ‘" - -{* ../../docs_src/first_steps/tutorial001.py hl[3] *} - -๐Ÿ“ฅ `app` ๐Ÿ”ข ๐Ÿ”œ "๐Ÿ‘" ๐ŸŽ“ `FastAPI`. - -๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ‘‘ โ˜ ๐Ÿ”— โœ ๐ŸŒ ๐Ÿ‘† ๐Ÿ› ๏ธ. - -๐Ÿ‘‰ `app` ๐ŸŽ 1๏ธโƒฃ ๐Ÿ”— `uvicorn` ๐Ÿ“‹: - -
- -```console -$ uvicorn main:app --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -๐Ÿšฅ ๐Ÿ‘† โœ ๐Ÿ‘† ๐Ÿ“ฑ ๐Ÿ’–: - -{* ../../docs_src/first_steps/tutorial002.py hl[3] *} - -& ๐Ÿšฎ โšซ๏ธ ๐Ÿ“ `main.py`, โคด๏ธ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿค™ `uvicorn` ๐Ÿ’–: - -
- -```console -$ uvicorn main:my_awesome_api --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -### ๐Ÿ” 3๏ธโƒฃ: โœ *โžก ๐Ÿ› ๏ธ* - -#### โžก - -"โžก" ๐Ÿ“ฅ ๐Ÿ”— ๐Ÿ ๐Ÿ• ๐Ÿ“› โ–ถ๏ธ โšช๏ธโžก๏ธ ๐Ÿฅ‡ `/`. - -, ๐Ÿ“› ๐Ÿ’–: - -``` -https://example.com/items/foo -``` - -...โžก ๐Ÿ”œ: - -``` -/items/foo -``` - -/// info - -"โžก" ๐Ÿ›Ž ๐Ÿค™ "๐Ÿ”—" โš–๏ธ "๐Ÿ›ฃ". - -/// - -โช ๐Ÿ— ๐Ÿ› ๏ธ, "โžก" ๐Ÿ‘‘ ๐ŸŒŒ ๐ŸŽ "โš " & "โ„น". - -#### ๐Ÿ› ๏ธ - -"๐Ÿ› ๏ธ" ๐Ÿ“ฅ ๐Ÿ”— 1๏ธโƒฃ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” "๐Ÿ‘ฉโ€๐Ÿ”ฌ". - -1๏ธโƒฃ: - -* `POST` -* `GET` -* `PUT` -* `DELETE` - -...& ๐ŸŒ… ๐Ÿ˜ ๐Ÿ•: - -* `OPTIONS` -* `HEAD` -* `PATCH` -* `TRACE` - -๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ› ๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— ๐Ÿ”  โžก โš™๏ธ 1๏ธโƒฃ (โš–๏ธ ๐ŸŒ…) ๐Ÿ‘ซ "๐Ÿ‘ฉโ€๐Ÿ”ฌ". - ---- - -๐Ÿ•โ” ๐Ÿ— ๐Ÿ”—, ๐Ÿ‘† ๐Ÿ›Ž โš™๏ธ ๐Ÿ‘ซ ๐ŸŽฏ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐ŸŽญ ๐ŸŽฏ ๐ŸŽฏ. - -๐Ÿ›Ž ๐Ÿ‘† โš™๏ธ: - -* `POST`: โœ ๐Ÿ’ฝ. -* `GET`: โœ ๐Ÿ’ฝ. -* `PUT`: โ„น ๐Ÿ’ฝ. -* `DELETE`: โŽ ๐Ÿ’ฝ. - -, ๐Ÿ—„, ๐Ÿ”  ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿค™ "๐Ÿ› ๏ธ". - -๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿค™ ๐Ÿ‘ซ "**๐Ÿ› ๏ธ**" ๐Ÿ’โ€โ™‚๏ธ. - -#### ๐Ÿ”ฌ *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* - -{* ../../docs_src/first_steps/tutorial001.py hl[6] *} - -`@app.get("/")` ๐Ÿ’ฌ **FastAPI** ๐Ÿ‘ˆ ๐Ÿ”ข โ–ถ๏ธ๏ธ ๐Ÿ”› ๐Ÿˆš ๐Ÿšš ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿšถ: - -* โžก `/` -* โš™๏ธ get ๐Ÿ› ๏ธ - -/// info | `@decorator` โ„น - -๐Ÿ‘ˆ `@something` โ• ๐Ÿ ๐Ÿค™ "๐Ÿ‘จโ€๐ŸŽจ". - -๐Ÿ‘† ๐Ÿšฎ โšซ๏ธ ๐Ÿ”› ๐Ÿ” ๐Ÿ”ข. ๐Ÿ’– ๐Ÿ“ถ ๐Ÿ“” ๐Ÿ‘’ (๐Ÿ‘ค ๐Ÿ’ญ ๐Ÿ‘ˆ ๐ŸŒโ” โš– ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ). - - "๐Ÿ‘จโ€๐ŸŽจ" โœŠ ๐Ÿ”ข ๐Ÿ”› & ๐Ÿ”จ ๐Ÿ•ณ โฎ๏ธ โšซ๏ธ. - -๐Ÿ‘† ๐Ÿ’ผ, ๐Ÿ‘‰ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ’ฌ **FastAPI** ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ”› ๐Ÿ”— **โžก** `/` โฎ๏ธ **๐Ÿ› ๏ธ** `get`. - -โšซ๏ธ "**โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ**". - -/// - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ ๐Ÿ› ๏ธ: - -* `@app.post()` -* `@app.put()` -* `@app.delete()` - -& ๐ŸŒ… ๐Ÿ˜ ๐Ÿ•: - -* `@app.options()` -* `@app.head()` -* `@app.patch()` -* `@app.trace()` - -/// tip - -๐Ÿ‘† ๐Ÿ†“ โš™๏ธ ๐Ÿ”  ๐Ÿ› ๏ธ (๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ”ฌ) ๐Ÿ‘† ๐ŸŽ‹. - -**FastAPI** ๐Ÿšซ ๐Ÿ› ๏ธ ๐Ÿ™† ๐ŸŽฏ ๐Ÿ”‘. - -โ„น ๐Ÿ“ฅ ๐ŸŽ ๐Ÿ“„, ๐Ÿšซ ๐Ÿ“„. - -๐Ÿ–ผ, ๐Ÿ•โ” โš™๏ธ ๐Ÿ•น ๐Ÿ‘† ๐Ÿ›Ž ๐ŸŽญ ๐ŸŒ ๐ŸŽฏ โš™๏ธ ๐Ÿ•ด `POST` ๐Ÿ› ๏ธ. - -/// - -### ๐Ÿ” 4๏ธโƒฃ: ๐Ÿ”ฌ **โžก ๐Ÿ› ๏ธ ๐Ÿ”ข** - -๐Ÿ‘‰ ๐Ÿ‘† "**โžก ๐Ÿ› ๏ธ ๐Ÿ”ข**": - -* **โžก**: `/`. -* **๐Ÿ› ๏ธ**: `get`. -* **๐Ÿ”ข**: ๐Ÿ”ข ๐Ÿ”› "๐Ÿ‘จโ€๐ŸŽจ" (๐Ÿ”› `@app.get("/")`). - -{* ../../docs_src/first_steps/tutorial001.py hl[7] *} - -๐Ÿ‘‰ ๐Ÿ ๐Ÿ”ข. - -โšซ๏ธ ๐Ÿ”œ ๐Ÿค™ **FastAPI** ๐Ÿ•โ” โšซ๏ธ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ“› "`/`" โš™๏ธ `GET` ๐Ÿ› ๏ธ. - -๐Ÿ‘‰ ๐Ÿ’ผ, โšซ๏ธ `async` ๐Ÿ”ข. - ---- - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ โšซ๏ธ ๐Ÿ˜ ๐Ÿ”ข โ†ฉ๏ธ `async def`: - -{* ../../docs_src/first_steps/tutorial003.py hl[7] *} - -/// note - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ญ ๐Ÿ”บ, โœ… [๐Ÿ”: *"๐Ÿƒ โ“"*](../async.md#_2){.internal-link target=_blank}. - -/// - -### ๐Ÿ” 5๏ธโƒฃ: ๐Ÿ“จ ๐ŸŽš - -{* ../../docs_src/first_steps/tutorial001.py hl[8] *} - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ `dict`, `list`, โญ ๐Ÿ’ฒ `str`, `int`, โ™’๏ธ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ Pydantic ๐Ÿท (๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ‘ˆ โช). - -๐Ÿ“ค ๐Ÿ“š ๐ŸŽ ๐ŸŽš & ๐Ÿท ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ” ๐Ÿ—œ ๐ŸŽป (๐Ÿ”Œ ๐Ÿœ, โ™’๏ธ). ๐Ÿ”„ โš™๏ธ ๐Ÿ‘† ๐Ÿ’• ๐Ÿ•, โšซ๏ธ ๐Ÿ† ๐ŸŽฒ ๐Ÿ‘ˆ ๐Ÿ‘ซ โช ๐Ÿ•โ€๐Ÿฆบ. - -## ๐ŸŒƒ - -* ๐Ÿ—„ `FastAPI`. -* โœ `app` ๐Ÿ‘. -* โœ **โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ** (๐Ÿ’– `@app.get("/")`). -* โœ **โžก ๐Ÿ› ๏ธ ๐Ÿ”ข** (๐Ÿ’– `def root(): ...` ๐Ÿ”›). -* ๐Ÿƒ ๐Ÿ› ๏ธ ๐Ÿ’ฝ (๐Ÿ’– `uvicorn main:app --reload`). diff --git a/docs/em/docs/tutorial/handling-errors.md b/docs/em/docs/tutorial/handling-errors.md deleted file mode 100644 index 6d7277597..000000000 --- a/docs/em/docs/tutorial/handling-errors.md +++ /dev/null @@ -1,257 +0,0 @@ -# ๐Ÿšš โŒ - -๐Ÿ“ค ๐Ÿ“š โš  ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšจ โŒ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ˆ โš™๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ. - -๐Ÿ‘‰ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ช ๐Ÿ–ฅ โฎ๏ธ ๐Ÿ•ธ, ๐Ÿ“Ÿ โšช๏ธโžก๏ธ ๐Ÿ‘ฑ ๐Ÿ™†, โ˜ ๐Ÿ“ณ, โ™’๏ธ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช ๐Ÿ’ฌ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ˆ: - -* ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿšซ โœ”๏ธ ๐Ÿฅƒ ๐Ÿ˜Œ ๐Ÿ‘ˆ ๐Ÿ› ๏ธ. -* ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿšซ โœ”๏ธ ๐Ÿ” ๐Ÿ‘ˆ โ„น. -* ๐Ÿฌ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”„ ๐Ÿ” ๐Ÿšซ ๐Ÿ”€. -* โ™’๏ธ. - -๐Ÿ‘ซ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ›Ž ๐Ÿ“จ **๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ** โ†” **4๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ** (โšช๏ธโžก๏ธ 4๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ 4๏ธโƒฃ9๏ธโƒฃ9๏ธโƒฃ). - -๐Ÿ‘‰ ๐ŸŽ 2๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ (โšช๏ธโžก๏ธ 2๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ 2๏ธโƒฃ9๏ธโƒฃ9๏ธโƒฃ). ๐Ÿ‘ˆ "2๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ" ๐Ÿ‘” ๐Ÿ“Ÿ โ›“ ๐Ÿ‘ˆ ๐Ÿ˜ซ ๐Ÿ“ค "๐Ÿ†" ๐Ÿ“จ. - -๐Ÿ‘” ๐Ÿ“Ÿ 4๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ โ†” โ›“ ๐Ÿ‘ˆ ๐Ÿ“ค โŒ โšช๏ธโžก๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -๐Ÿ’ญ ๐ŸŒ ๐Ÿ‘ˆ **"4๏ธโƒฃ0๏ธโƒฃ4๏ธโƒฃ ๐Ÿšซ ๐Ÿ”Ž"** โŒ (& ๐Ÿคฃ) โ“ - -## โš™๏ธ `HTTPException` - -๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“จ โฎ๏ธ โŒ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘† โš™๏ธ `HTTPException`. - -### ๐Ÿ—„ `HTTPException` - -{* ../../docs_src/handling_errors/tutorial001.py hl[1] *} - -### ๐Ÿคš `HTTPException` ๐Ÿ‘† ๐Ÿ“Ÿ - -`HTTPException` ๐Ÿ˜ ๐Ÿ โš  โฎ๏ธ ๐ŸŒ– ๐Ÿ“Š ๐Ÿ”— ๐Ÿ”—. - -โ†ฉ๏ธ โšซ๏ธ ๐Ÿ โš , ๐Ÿ‘† ๐Ÿšซ `return` โšซ๏ธ, ๐Ÿ‘† `raise` โšซ๏ธ. - -๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ”˜ ๐Ÿš™ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿค™ ๐Ÿ”˜ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, & ๐Ÿ‘† ๐Ÿคš `HTTPException` โšช๏ธโžก๏ธ ๐Ÿ”˜ ๐Ÿ‘ˆ ๐Ÿš™ ๐Ÿ”ข, โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐Ÿƒ ๐ŸŽ‚ ๐Ÿ“Ÿ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, โšซ๏ธ ๐Ÿ”œ โŽ ๐Ÿ‘ˆ ๐Ÿ“จ โ–ถ๏ธ๏ธ โ†–๏ธ & ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” โŒ โšช๏ธโžก๏ธ `HTTPException` ๐Ÿ‘ฉโ€๐Ÿ’ป. - -๐Ÿ’ฐ ๐Ÿ™‹โ€โ™€ โš  ๐Ÿคญ `return`๐Ÿ˜… ๐Ÿ’ฒ ๐Ÿ”œ ๐ŸŒ– โญ ๐Ÿ“„ ๐Ÿ”ƒ ๐Ÿ”— & ๐Ÿ’‚โ€โ™‚. - -๐Ÿ‘‰ ๐Ÿ–ผ, ๐Ÿ•โ” ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“จ ๐Ÿฌ ๐Ÿ†” ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ”€, ๐Ÿคš โš  โฎ๏ธ ๐Ÿ‘” ๐Ÿ“Ÿ `404`: - -{* ../../docs_src/handling_errors/tutorial001.py hl[11] *} - -### ๐Ÿ“‰ ๐Ÿ“จ - -๐Ÿšฅ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“จ `http://example.com/items/foo` ( `item_id` `"foo"`), ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ 2๏ธโƒฃ0๏ธโƒฃ0๏ธโƒฃ, & ๐ŸŽป ๐Ÿ“จ: - -```JSON -{ - "item": "The Foo Wrestlers" -} -``` - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“จ `http://example.com/items/bar` (๐Ÿšซ-๐Ÿšซ `item_id` `"bar"`), ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ 4๏ธโƒฃ0๏ธโƒฃ4๏ธโƒฃ ("๐Ÿšซ ๐Ÿ”Ž" โŒ), & ๐ŸŽป ๐Ÿ“จ: - -```JSON -{ - "detail": "Item not found" -} -``` - -/// tip - -๐Ÿ•โ” ๐Ÿ™‹โ€โ™€ `HTTPException`, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ™† ๐Ÿ’ฒ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ—œ ๐ŸŽป ๐Ÿ”ข `detail`, ๐Ÿšซ ๐Ÿ•ด `str`. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ `dict`, `list`, โ™’๏ธ. - -๐Ÿ‘ซ ๐Ÿต ๐Ÿ” **FastAPI** & ๐Ÿ—œ ๐ŸŽป. - -/// - -## ๐Ÿšฎ ๐Ÿ›ƒ ๐ŸŽš - -๐Ÿ“ค โš  ๐ŸŒโ” โšซ๏ธ โš  ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ›ƒ ๐ŸŽš ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” โŒ. ๐Ÿ–ผ, ๐Ÿ†Ž ๐Ÿ’‚โ€โ™‚. - -๐Ÿ‘† ๐ŸŽฒ ๐Ÿ† ๐Ÿšซ ๐Ÿ’ช โš™๏ธ โšซ๏ธ ๐Ÿ”— ๐Ÿ‘† ๐Ÿ“Ÿ. - -โœ‹๏ธ ๐Ÿ’ผ ๐Ÿ‘† ๐Ÿ’ช โšซ๏ธ ๐Ÿง ๐Ÿ˜, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ›ƒ ๐ŸŽš: - -{* ../../docs_src/handling_errors/tutorial002.py hl[14] *} - -## โŽ ๐Ÿ›ƒ โš  ๐Ÿ•โ€๐Ÿฆบ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ›ƒ โš  ๐Ÿ•โ€๐Ÿฆบ โฎ๏ธ ๐ŸŽ โš  ๐Ÿš™ โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† โœ”๏ธ ๐Ÿ›ƒ โš  `UnicornException` ๐Ÿ‘ˆ ๐Ÿ‘† (โš–๏ธ ๐Ÿ—ƒ ๐Ÿ‘† โš™๏ธ) ๐Ÿ’ช `raise`. - -& ๐Ÿ‘† ๐Ÿ’š ๐Ÿต ๐Ÿ‘‰ โš  ๐ŸŒ โฎ๏ธ FastAPI. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ›ƒ โš  ๐Ÿ•โ€๐Ÿฆบ โฎ๏ธ `@app.exception_handler()`: - -{* ../../docs_src/handling_errors/tutorial003.py hl[5:7,13:18,24] *} - -๐Ÿ“ฅ, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“จ `/unicorns/yolo`, *โžก ๐Ÿ› ๏ธ* ๐Ÿ”œ `raise` `UnicornException`. - -โœ‹๏ธ โšซ๏ธ ๐Ÿ”œ ๐Ÿต `unicorn_exception_handler`. - -, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ ๐Ÿงน โŒ, โฎ๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ `418` & ๐ŸŽป ๐ŸŽš: - -```JSON -{"message": "Oops! yolo did something. There goes a rainbow..."} -``` - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.requests import Request` & `from starlette.responses import JSONResponse`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.responses` `fastapi.responses` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. ๐ŸŽ โฎ๏ธ `Request`. - -/// - -## ๐Ÿ” ๐Ÿ”ข โš  ๐Ÿ•โ€๐Ÿฆบ - -**FastAPI** โœ”๏ธ ๐Ÿ”ข โš  ๐Ÿ•โ€๐Ÿฆบ. - -๐Ÿ‘ซ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿˆš ๐Ÿ›ฌ ๐Ÿ”ข ๐ŸŽป ๐Ÿ“จ ๐Ÿ•โ” ๐Ÿ‘† `raise` `HTTPException` & ๐Ÿ•โ” ๐Ÿ“จ โœ”๏ธ โŒ ๐Ÿ’ฝ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” ๐Ÿ‘ซ โš  ๐Ÿ•โ€๐Ÿฆบ โฎ๏ธ ๐Ÿ‘† ๐Ÿ‘. - -### ๐Ÿ” ๐Ÿ“จ ๐Ÿ”ฌ โš  - -๐Ÿ•โ” ๐Ÿ“จ ๐Ÿ”Œ โŒ ๐Ÿ“Š, **FastAPI** ๐Ÿ”˜ ๐Ÿคš `RequestValidationError`. - -& โšซ๏ธ ๐Ÿ”Œ ๐Ÿ”ข โš  ๐Ÿ•โ€๐Ÿฆบ โšซ๏ธ. - -๐Ÿ” โšซ๏ธ, ๐Ÿ—„ `RequestValidationError` & โš™๏ธ โšซ๏ธ โฎ๏ธ `@app.exception_handler(RequestValidationError)` ๐ŸŽ€ โš  ๐Ÿ•โ€๐Ÿฆบ. - -โš  ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”œ ๐Ÿ“จ `Request` & โš . - -{* ../../docs_src/handling_errors/tutorial004.py hl[2,14:16] *} - -๐Ÿ”œ, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถ `/items/foo`, โ†ฉ๏ธ ๐Ÿ’†โ€โ™‚ ๐Ÿ”ข ๐ŸŽป โŒ โฎ๏ธ: - -```JSON -{ - "detail": [ - { - "loc": [ - "path", - "item_id" - ], - "msg": "value is not a valid integer", - "type": "type_error.integer" - } - ] -} -``` - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš โœ โฌ, โฎ๏ธ: - -``` -1 validation error -path -> item_id - value is not a valid integer (type=type_error.integer) -``` - -#### `RequestValidationError` ๐Ÿ†š `ValidationError` - -/// warning - -๐Ÿ‘ซ ๐Ÿ“ก โ„น ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถ ๐Ÿšฅ โšซ๏ธ ๐Ÿšซ โš  ๐Ÿ‘† ๐Ÿ”œ. - -/// - -`RequestValidationError` ๐ŸŽง-๐ŸŽ“ Pydantic `ValidationError`. - -**FastAPI** โš™๏ธ โšซ๏ธ ๐Ÿ‘ˆ, ๐Ÿšฅ ๐Ÿ‘† โš™๏ธ Pydantic ๐Ÿท `response_model`, & ๐Ÿ‘† ๐Ÿ’ฝ โœ”๏ธ โŒ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โŒ ๐Ÿ‘† ๐Ÿ•น. - -โœ‹๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป/๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿšซ ๐Ÿ‘€ โšซ๏ธ. โ†ฉ๏ธ, ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿ“จ "๐Ÿ”— ๐Ÿ’ฝ โŒ" โฎ๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ `500`. - -โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘‰ ๐ŸŒŒ โ†ฉ๏ธ ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ Pydantic `ValidationError` ๐Ÿ‘† *๐Ÿ“จ* โš–๏ธ ๐Ÿ™† ๐Ÿ‘† ๐Ÿ“Ÿ (๐Ÿšซ ๐Ÿ‘ฉโ€๐Ÿ’ป *๐Ÿ“จ*), โšซ๏ธ ๐Ÿค™ ๐Ÿ› ๐Ÿ‘† ๐Ÿ“Ÿ. - -& โช ๐Ÿ‘† ๐Ÿ”ง โšซ๏ธ, ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป/๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿšซ๐Ÿ”œ ๐Ÿšซ โœ”๏ธ ๐Ÿ” ๐Ÿ”— โ„น ๐Ÿ”ƒ โŒ, ๐Ÿ‘ˆ ๐Ÿ’ช ๐ŸŽฆ ๐Ÿ’‚โ€โ™‚ โš . - -### ๐Ÿ” `HTTPException` โŒ ๐Ÿ•โ€๐Ÿฆบ - -๐ŸŽ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” `HTTPException` ๐Ÿ•โ€๐Ÿฆบ. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿ“จ โœ… โœ ๐Ÿ“จ โ†ฉ๏ธ ๐ŸŽป ๐Ÿ‘ซ โŒ: - -{* ../../docs_src/handling_errors/tutorial004.py hl[3:4,9:11,22] *} - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.responses import PlainTextResponse`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.responses` `fastapi.responses` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -### โš™๏ธ `RequestValidationError` ๐Ÿ’ช - -`RequestValidationError` ๐Ÿ”Œ `body` โšซ๏ธ ๐Ÿ“จ โฎ๏ธ โŒ ๐Ÿ’ฝ. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โšซ๏ธ โช ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿ“ฑ ๐Ÿ•น ๐Ÿ’ช & โ„น โšซ๏ธ, ๐Ÿ“จ โšซ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป, โ™’๏ธ. - -{* ../../docs_src/handling_errors/tutorial005.py hl[14] *} - -๐Ÿ”œ ๐Ÿ”„ ๐Ÿ“จ โŒ ๐Ÿฌ ๐Ÿ’–: - -```JSON -{ - "title": "towel", - "size": "XL" -} -``` - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿ‘ˆ ๐Ÿ’ฝ โŒ โš— ๐Ÿ“จ ๐Ÿ’ช: - -```JSON hl_lines="12-15" -{ - "detail": [ - { - "loc": [ - "body", - "size" - ], - "msg": "value is not a valid integer", - "type": "type_error.integer" - } - ], - "body": { - "title": "towel", - "size": "XL" - } -} -``` - -#### FastAPI `HTTPException` ๐Ÿ†š ๐Ÿ’ƒ `HTTPException` - -**FastAPI** โœ”๏ธ ๐Ÿšฎ ๐Ÿ‘ `HTTPException`. - -& **FastAPI**'โ“‚ `HTTPException` โŒ ๐ŸŽ“ ๐Ÿ˜– โšช๏ธโžก๏ธ ๐Ÿ’ƒ `HTTPException` โŒ ๐ŸŽ“. - -๐Ÿ•ด ๐Ÿ”บ, ๐Ÿ‘ˆ **FastAPI**'โ“‚ `HTTPException` โœ” ๐Ÿ‘† ๐Ÿšฎ ๐ŸŽš ๐Ÿ”Œ ๐Ÿ“จ. - -๐Ÿ‘‰ ๐Ÿ’ช/โš™๏ธ ๐Ÿ”˜ โœณ 2๏ธโƒฃ.0๏ธโƒฃ & ๐Ÿ’‚โ€โ™‚ ๐Ÿš™. - -, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšง ๐Ÿ™‹โ€โ™€ **FastAPI**'โ“‚ `HTTPException` ๐Ÿ›Ž ๐Ÿ‘† ๐Ÿ“Ÿ. - -โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ‘† ยฎ โš  ๐Ÿ•โ€๐Ÿฆบ, ๐Ÿ‘† ๐Ÿ”œ ยฎ โšซ๏ธ ๐Ÿ’ƒ `HTTPException`. - -๐Ÿ‘‰ ๐ŸŒŒ, ๐Ÿšฅ ๐Ÿ™† ๐Ÿ• ๐Ÿ’ƒ ๐Ÿ”— ๐Ÿ“Ÿ, โš–๏ธ ๐Ÿ’ƒ โ†” โš–๏ธ ๐Ÿ”Œ -, ๐Ÿคš ๐Ÿ’ƒ `HTTPException`, ๐Ÿ‘† ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”œ ๐Ÿ’ช โœŠ & ๐Ÿต โšซ๏ธ. - -๐Ÿ‘‰ ๐Ÿ–ผ, ๐Ÿ’ช โœ”๏ธ ๐Ÿ‘ฏโ€โ™‚๏ธ `HTTPException`โ“‚ ๐ŸŽ ๐Ÿ“Ÿ, ๐Ÿ’ƒ โš  ๐Ÿ“ `StarletteHTTPException`: - -```Python -from starlette.exceptions import HTTPException as StarletteHTTPException -``` - -### ๐Ÿค-โš™๏ธ **FastAPI**'โ“‚ โš  ๐Ÿ•โ€๐Ÿฆบ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ โš  โคด๏ธ โฎ๏ธ ๐ŸŽ ๐Ÿ”ข โš  ๐Ÿ•โ€๐Ÿฆบ โšช๏ธโžก๏ธ **FastAPI**, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ—„ & ๐Ÿค-โš™๏ธ ๐Ÿ”ข โš  ๐Ÿ•โ€๐Ÿฆบ โšช๏ธโžก๏ธ `fastapi.exception_handlers`: - -{* ../../docs_src/handling_errors/tutorial006.py hl[2:5,15,21] *} - -๐Ÿ‘‰ ๐Ÿ–ผ ๐Ÿ‘† `print`๐Ÿ˜… โŒ โฎ๏ธ ๐Ÿ“ถ ๐ŸŽจ ๐Ÿ“ง, โœ‹๏ธ ๐Ÿ‘† ๐Ÿคš ๐Ÿ’ญ. ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โš  & โคด๏ธ ๐Ÿค-โš™๏ธ ๐Ÿ”ข โš  ๐Ÿ•โ€๐Ÿฆบ. diff --git a/docs/em/docs/tutorial/header-params.md b/docs/em/docs/tutorial/header-params.md deleted file mode 100644 index fa5e3a22b..000000000 --- a/docs/em/docs/tutorial/header-params.md +++ /dev/null @@ -1,91 +0,0 @@ -# ๐ŸŽš ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐ŸŽš ๐Ÿ”ข ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”ฌ `Query`, `Path` & `Cookie` ๐Ÿ”ข. - -## ๐Ÿ—„ `Header` - -๐Ÿฅ‡ ๐Ÿ—„ `Header`: - -{* ../../docs_src/header_params/tutorial001.py hl[3] *} - -## ๐Ÿ“ฃ `Header` ๐Ÿ”ข - -โคด๏ธ ๐Ÿ“ฃ ๐ŸŽš ๐Ÿ”ข โš™๏ธ ๐ŸŽ ๐Ÿ“Š โฎ๏ธ `Path`, `Query` & `Cookie`. - -๐Ÿฅ‡ ๐Ÿ’ฒ ๐Ÿ”ข ๐Ÿ’ฒ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐ŸŒ โž• ๐Ÿ”ฌ โš–๏ธ โœ ๐Ÿ”ข: - -{* ../../docs_src/header_params/tutorial001.py hl[9] *} - -/// note | ๐Ÿ“ก โ„น - -`Header` "๐Ÿ‘ญ" ๐ŸŽ“ `Path`, `Query` & `Cookie`. โšซ๏ธ ๐Ÿ˜– โšช๏ธโžก๏ธ ๐ŸŽ โš  `Param` ๐ŸŽ“. - -โœ‹๏ธ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ—„ `Query`, `Path`, `Header`, & ๐ŸŽ โšช๏ธโžก๏ธ `fastapi`, ๐Ÿ‘ˆ ๐Ÿค™ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“จ ๐ŸŽ ๐ŸŽ“. - -/// - -/// info - -๐Ÿ“ฃ ๐ŸŽš, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Header`, โ†ฉ๏ธ โช ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿ”ข. - -/// - -## ๐Ÿง ๐Ÿ› ๏ธ - -`Header` โœ”๏ธ ๐Ÿฅ โž• ๐Ÿ› ๏ธ ๐Ÿ”› ๐Ÿ” โšซ๏ธโ” `Path`, `Query` & `Cookie` ๐Ÿšš. - -๐ŸŒ… ๐Ÿฉ ๐ŸŽš ๐ŸŽ "๐Ÿ” " ๐Ÿฆน, ๐Ÿ’ญ "โž– ๐Ÿ”ฃ" (`-`). - -โœ‹๏ธ ๐Ÿ”ข ๐Ÿ’– `user-agent` โŒ ๐Ÿ. - -, ๐Ÿ”ข, `Header` ๐Ÿ”œ ๐Ÿ—œ ๐Ÿ”ข ๐Ÿ“› ๐Ÿฆน โšช๏ธโžก๏ธ ๐ŸŽฆ (`_`) ๐Ÿ”  (`-`) โš— & ๐Ÿ“„ ๐ŸŽš. - -, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐ŸŽš ๐Ÿ’ผ-๐Ÿ˜›,, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ‘ซ โฎ๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿ‘— (๐Ÿ’ญ "๐Ÿ”ก"). - -, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `user_agent` ๐Ÿ‘† ๐Ÿ›Ž ๐Ÿ”œ ๐Ÿ ๐Ÿ“Ÿ, โ†ฉ๏ธ ๐Ÿ’†โ€โ™‚ ๐ŸŽฏ ๐Ÿฅ‡ ๐Ÿ”ค `User_Agent` โš–๏ธ ๐Ÿ•ณ ๐ŸŽ. - -๐Ÿšฅ ๐Ÿค” ๐Ÿ‘† ๐Ÿ’ช โŽ ๐Ÿง ๐Ÿ› ๏ธ ๐ŸŽฆ ๐Ÿ” , โš’ ๐Ÿ”ข `convert_underscores` `Header` `False`: - -{* ../../docs_src/header_params/tutorial002.py hl[10] *} - -/// warning - -โญ โš’ `convert_underscores` `False`, ๐Ÿป ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ—ณ & ๐Ÿ’ฝ / โš™๏ธ ๐ŸŽš โฎ๏ธ ๐ŸŽฆ. - -/// - -## โŽ ๐ŸŽš - -โšซ๏ธ ๐Ÿ’ช ๐Ÿ“จ โŽ ๐ŸŽš. ๐Ÿ‘ˆ โ›“, ๐ŸŽ ๐ŸŽš โฎ๏ธ ๐Ÿ’— ๐Ÿ’ฒ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ‘ˆ ๐Ÿ’ผ โš™๏ธ ๐Ÿ“‡ ๐Ÿ†Ž ๐Ÿ“„. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ ๐ŸŒ ๐Ÿ’ฒ โšช๏ธโžก๏ธ โŽ ๐ŸŽš ๐Ÿ `list`. - -๐Ÿ–ผ, ๐Ÿ“ฃ ๐ŸŽš `X-Token` ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ˜‘ ๐ŸŒ… ๐ŸŒ˜ ๐Ÿ•, ๐Ÿ‘† ๐Ÿ’ช โœ: - -{* ../../docs_src/header_params/tutorial003.py hl[9] *} - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ”— โฎ๏ธ ๐Ÿ‘ˆ *โžก ๐Ÿ› ๏ธ* ๐Ÿ“จ 2๏ธโƒฃ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐ŸŽš ๐Ÿ’–: - -``` -X-Token: foo -X-Token: bar -``` - -๐Ÿ“จ ๐Ÿ”œ ๐Ÿ’–: - -```JSON -{ - "X-Token values": [ - "bar", - "foo" - ] -} -``` - -## ๐ŸŒƒ - -๐Ÿ“ฃ ๐ŸŽš โฎ๏ธ `Header`, โš™๏ธ ๐ŸŽ โš  โš“ `Query`, `Path` & `Cookie`. - -& ๐Ÿšซ ๐Ÿ˜Ÿ ๐Ÿ”ƒ ๐ŸŽฆ ๐Ÿ‘† ๐Ÿ”ข, **FastAPI** ๐Ÿ”œ โœŠ ๐Ÿ’… ๐Ÿญ ๐Ÿ‘ซ. diff --git a/docs/em/docs/tutorial/index.md b/docs/em/docs/tutorial/index.md deleted file mode 100644 index 5f7532341..000000000 --- a/docs/em/docs/tutorial/index.md +++ /dev/null @@ -1,83 +0,0 @@ -# ๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ - -๐Ÿ‘‰ ๐Ÿ”ฐ ๐ŸŽฆ ๐Ÿ‘† โ” โš™๏ธ **FastAPI** โฎ๏ธ ๐ŸŒ… ๐Ÿšฎ โš’, ๐Ÿ” ๐Ÿ”. - -๐Ÿ”  ๐Ÿ“„ ๐Ÿ“‰ ๐Ÿ— ๐Ÿ”› โฎ๏ธ ๐Ÿ•, โœ‹๏ธ โšซ๏ธ ๐Ÿ— ๐ŸŽ โ”, ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถ ๐Ÿ”— ๐Ÿ™† ๐ŸŽฏ 1๏ธโƒฃ โŽ ๐Ÿ‘† ๐ŸŽฏ ๐Ÿ› ๏ธ ๐Ÿ’ช. - -โšซ๏ธ ๐Ÿ— ๐Ÿ‘ท ๐Ÿ”ฎ ๐Ÿ”—. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘Ÿ ๐Ÿ”™ & ๐Ÿ‘€ โšซ๏ธโ” โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ’ช. - -## ๐Ÿƒ ๐Ÿ“Ÿ - -๐ŸŒ ๐Ÿ“Ÿ ๐Ÿซ ๐Ÿ’ช ๐Ÿ“ & โš™๏ธ ๐Ÿ”— (๐Ÿ‘ซ ๐Ÿค™ ๐Ÿ’ฏ ๐Ÿ ๐Ÿ“). - -๐Ÿƒ ๐Ÿ™† ๐Ÿ–ผ, ๐Ÿ“ ๐Ÿ“Ÿ ๐Ÿ“ `main.py`, & โ–ถ๏ธ `uvicorn` โฎ๏ธ: - -
- -```console -$ uvicorn main:app --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -INFO: Started reloader process [28720] -INFO: Started server process [28722] -INFO: Waiting for application startup. -INFO: Application startup complete. -``` - -
- -โšซ๏ธ **๐Ÿ† ๐Ÿ’ก** ๐Ÿ‘ˆ ๐Ÿ‘† โœ โš–๏ธ ๐Ÿ“ ๐Ÿ“Ÿ, โœ โšซ๏ธ & ๐Ÿƒ โšซ๏ธ ๐ŸŒ. - -โš™๏ธ โšซ๏ธ ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ โšซ๏ธโ” ๐Ÿค™ ๐ŸŽฆ ๐Ÿ‘† ๐Ÿ’ฐ FastAPI, ๐Ÿ‘€ โ” ๐Ÿฅ ๐Ÿ“Ÿ ๐Ÿ‘† โœ”๏ธ โœ, ๐ŸŒ ๐Ÿ†Ž โœ…, โœ, โ™’๏ธ. - ---- - -## โŽ FastAPI - -๐Ÿฅ‡ ๐Ÿ” โŽ FastAPI. - -๐Ÿ”ฐ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š โŽ โšซ๏ธ โฎ๏ธ ๐ŸŒ ๐Ÿ“ฆ ๐Ÿ”— & โš’: - -
- -```console -$ pip install "fastapi[all]" - ----> 100% -``` - -
- -...๐Ÿ‘ˆ ๐Ÿ”Œ `uvicorn`, ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿƒ ๐Ÿ‘† ๐Ÿ“Ÿ. - -/// note - -๐Ÿ‘† ๐Ÿ’ช โŽ โšซ๏ธ ๐Ÿ• ๐Ÿ•. - -๐Ÿ‘‰ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ ๐Ÿ• ๐Ÿ‘† ๐Ÿ’š ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿญ: - -``` -pip install "fastapi[standard]" -``` - -โŽ `uvicorn` ๐Ÿ‘ท ๐Ÿ’ฝ: - -``` -pip install "uvicorn[standard]" -``` - - & ๐ŸŽ ๐Ÿ”  ๐Ÿ“ฆ ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š โš™๏ธ. - -/// - -## ๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ - -๐Ÿ“ค **๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ** ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โœ โช โฎ๏ธ ๐Ÿ‘‰ **๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ**. - -**๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ**, ๐Ÿ— ๐Ÿ”› ๐Ÿ‘‰, โš™๏ธ ๐ŸŽ ๐Ÿ”ง, & ๐Ÿ’ก ๐Ÿ‘† โž• โš’. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿฅ‡ โœ **๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ** (โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ‘‚ โ–ถ๏ธ๏ธ ๐Ÿ”œ). - -โšซ๏ธ ๐Ÿ”ง ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ— ๐Ÿ ๐Ÿˆธ โฎ๏ธ **๐Ÿ”ฐ - ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ**, & โคด๏ธ โ†” โšซ๏ธ ๐ŸŽ ๐ŸŒŒ, โš“๏ธ ๐Ÿ”› ๐Ÿ‘† ๐Ÿ’ช, โš™๏ธ ๐ŸŒ– ๐Ÿ’ญ โšช๏ธโžก๏ธ **๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ**. diff --git a/docs/em/docs/tutorial/metadata.md b/docs/em/docs/tutorial/metadata.md deleted file mode 100644 index eaf605de1..000000000 --- a/docs/em/docs/tutorial/metadata.md +++ /dev/null @@ -1,111 +0,0 @@ -# ๐Ÿ—ƒ & ๐Ÿฉบ ๐Ÿ“› - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ›ƒ ๐Ÿ“š ๐Ÿ—ƒ ๐Ÿ“ณ ๐Ÿ‘† **FastAPI** ๐Ÿˆธ. - -## ๐Ÿ—ƒ ๐Ÿ› ๏ธ - -๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ“„ ๐Ÿ‘ ๐Ÿ‘ˆ โš™๏ธ ๐Ÿ—„ ๐Ÿ”ง & ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ โšœ: - -| ๐Ÿ”ข | ๐Ÿ†Ž | ๐Ÿ“› | -|------------|------|-------------| -| `title` | `str` | ๐Ÿ“› ๐Ÿ› ๏ธ. | -| `description` | `str` | ๐Ÿ“ ๐Ÿ“› ๐Ÿ› ๏ธ. โšซ๏ธ ๐Ÿ’ช โš™๏ธ โœ. | -| `version` | `string` | โฌ ๐Ÿ› ๏ธ. ๐Ÿ‘‰ โฌ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿˆธ, ๐Ÿšซ ๐Ÿ—„. ๐Ÿ–ผ `2.5.0`. | -| `terms_of_service` | `str` | ๐Ÿ“› โš– ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ› ๏ธ. ๐Ÿšฅ ๐Ÿšš, ๐Ÿ‘‰ โœ”๏ธ ๐Ÿ“›. | -| `contact` | `dict` | ๐Ÿ“ง โ„น ๐ŸŽฆ ๐Ÿ› ๏ธ. โšซ๏ธ ๐Ÿ’ช ๐Ÿ”Œ ๐Ÿ“š ๐Ÿ‘.
contact ๐Ÿ‘
๐Ÿ”ข๐Ÿ†Ž๐Ÿ“›
namestrโš– ๐Ÿ“› ๐Ÿ“ง ๐Ÿ‘จโ€๐Ÿ’ผ/๐Ÿข.
urlstr๐Ÿ“› โ˜ ๐Ÿ“ง โ„น. ๐Ÿ”œ ๐Ÿ“ ๐Ÿ“›.
emailstr๐Ÿ“ง ๐Ÿ“ข ๐Ÿ“ง ๐Ÿ‘จโ€๐Ÿ’ผ/๐Ÿข. ๐Ÿ”œ ๐Ÿ“ ๐Ÿ“ง ๐Ÿ“ข.
| -| `license_info` | `dict` | ๐Ÿ›‚ โ„น ๐ŸŽฆ ๐Ÿ› ๏ธ. โšซ๏ธ ๐Ÿ’ช ๐Ÿ”Œ ๐Ÿ“š ๐Ÿ‘.
license_info ๐Ÿ‘
๐Ÿ”ข๐Ÿ†Ž๐Ÿ“›
namestr๐Ÿšš (๐Ÿšฅ license_info โš’). ๐Ÿ›‚ ๐Ÿ“› โš™๏ธ ๐Ÿ› ๏ธ.
urlstr๐Ÿ“› ๐Ÿ›‚ โš™๏ธ ๐Ÿ› ๏ธ. ๐Ÿ”œ ๐Ÿ“ ๐Ÿ“›.
| - -๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ‘ซ โฉ: - -{* ../../docs_src/metadata/tutorial001.py hl[3:16,19:31] *} - -/// tip - -๐Ÿ‘† ๐Ÿ’ช โœ โœ `description` ๐Ÿ‘ & โšซ๏ธ ๐Ÿ”œ โœ ๐Ÿ”ข. - -/// - -โฎ๏ธ ๐Ÿ‘‰ ๐Ÿ“ณ, ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’–: - - - -## ๐Ÿ—ƒ ๐Ÿ”– - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐ŸŒ– ๐Ÿ—ƒ ๐ŸŽ ๐Ÿ”– โš™๏ธ ๐Ÿ‘ช ๐Ÿ‘† โžก ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ”ข `openapi_tags`. - -โšซ๏ธ โœŠ ๐Ÿ“‡ โš— 1๏ธโƒฃ ๐Ÿ“– ๐Ÿ”  ๐Ÿ”–. - -๐Ÿ”  ๐Ÿ“– ๐Ÿ’ช ๐Ÿ”Œ: - -* `name` (**โœ”**): `str` โฎ๏ธ ๐ŸŽ ๐Ÿ“› ๐Ÿ‘† โš™๏ธ `tags` ๐Ÿ”ข ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* & `APIRouter`โ“‚. -* `description`: `str` โฎ๏ธ ๐Ÿ“ ๐Ÿ“› ๐Ÿ”–. โšซ๏ธ ๐Ÿ’ช โœ”๏ธ โœ & ๐Ÿ”œ ๐ŸŽฆ ๐Ÿฉบ ๐ŸŽš. -* `externalDocs`: `dict` ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿงพ โฎ๏ธ: - * `description`: `str` โฎ๏ธ ๐Ÿ“ ๐Ÿ“› ๐Ÿ”ข ๐Ÿฉบ. - * `url` (**โœ”**): `str` โฎ๏ธ ๐Ÿ“› ๐Ÿ”ข ๐Ÿงพ. - -### โœ ๐Ÿ—ƒ ๐Ÿ”– - -โžก๏ธ ๐Ÿ”„ ๐Ÿ‘ˆ ๐Ÿ–ผ โฎ๏ธ ๐Ÿ”– `users` & `items`. - -โœ ๐Ÿ—ƒ ๐Ÿ‘† ๐Ÿ”– & ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ `openapi_tags` ๐Ÿ”ข: - -{* ../../docs_src/metadata/tutorial004.py hl[3:16,18] *} - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โœ ๐Ÿ”˜ ๐Ÿ“›, ๐Ÿ–ผ "๐Ÿ’ณ" ๐Ÿ”œ ๐ŸŽฆ ๐Ÿฆ (**๐Ÿ’ณ**) & "๐ŸŽ€" ๐Ÿ”œ ๐ŸŽฆ โ• (_๐ŸŽ€_). - -/// tip - -๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿšฎ ๐Ÿ—ƒ ๐ŸŒ ๐Ÿ”– ๐Ÿ‘ˆ ๐Ÿ‘† โš™๏ธ. - -/// - -### โš™๏ธ ๐Ÿ‘† ๐Ÿ”– - -โš™๏ธ `tags` ๐Ÿ”ข โฎ๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* (& `APIRouter`โ“‚) ๐Ÿ› ๏ธ ๐Ÿ‘ซ ๐ŸŽ ๐Ÿ”–: - -{* ../../docs_src/metadata/tutorial004.py hl[21,26] *} - -/// info - -โœ ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ”– [โžก ๐Ÿ› ๏ธ ๐Ÿ“ณ](path-operation-configuration.md#_3){.internal-link target=_blank}. - -/// - -### โœ… ๐Ÿฉบ - -๐Ÿ”œ, ๐Ÿšฅ ๐Ÿ‘† โœ… ๐Ÿฉบ, ๐Ÿ‘ซ ๐Ÿ”œ ๐ŸŽฆ ๐ŸŒ ๐ŸŒ– ๐Ÿ—ƒ: - - - -### โœ” ๐Ÿ”– - -โœ” ๐Ÿ”  ๐Ÿ”– ๐Ÿ—ƒ ๐Ÿ“– ๐Ÿ”ฌ โœ” ๐ŸŽฆ ๐Ÿฉบ ๐ŸŽš. - -๐Ÿ–ผ, โœ‹๏ธ `users` ๐Ÿ”œ ๐Ÿšถ โฎ๏ธ `items` ๐Ÿ”ค โœ”, โšซ๏ธ ๐ŸŽฆ โญ ๐Ÿ‘ซ, โ†ฉ๏ธ ๐Ÿ‘ฅ ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ—ƒ ๐Ÿฅ‡ ๐Ÿ“– ๐Ÿ“‡. - -## ๐Ÿ—„ ๐Ÿ“› - -๐Ÿ”ข, ๐Ÿ—„ ๐Ÿ”— ๐Ÿฆ `/openapi.json`. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— โšซ๏ธ โฎ๏ธ ๐Ÿ”ข `openapi_url`. - -๐Ÿ–ผ, โš’ โšซ๏ธ ๐Ÿฆ `/api/v1/openapi.json`: - -{* ../../docs_src/metadata/tutorial002.py hl[3] *} - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โŽ ๐Ÿ—„ ๐Ÿ”— ๐Ÿ• ๐Ÿ‘† ๐Ÿ’ช โš’ `openapi_url=None`, ๐Ÿ‘ˆ ๐Ÿ”œ โŽ ๐Ÿงพ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿ‘ˆ โš™๏ธ โšซ๏ธ. - -## ๐Ÿฉบ ๐Ÿ“› - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— 2๏ธโƒฃ ๐Ÿงพ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿ”Œ: - -* **๐Ÿฆ ๐ŸŽš**: ๐Ÿฆ `/docs`. - * ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿšฎ ๐Ÿ“› โฎ๏ธ ๐Ÿ”ข `docs_url`. - * ๐Ÿ‘† ๐Ÿ’ช โŽ โšซ๏ธ โš’ `docs_url=None`. -* **๐Ÿ“„**: ๐Ÿฆ `/redoc`. - * ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿšฎ ๐Ÿ“› โฎ๏ธ ๐Ÿ”ข `redoc_url`. - * ๐Ÿ‘† ๐Ÿ’ช โŽ โšซ๏ธ โš’ `redoc_url=None`. - -๐Ÿ–ผ, โš’ ๐Ÿฆ ๐ŸŽš ๐Ÿฆ `/documentation` & โŽ ๐Ÿ“„: - -{* ../../docs_src/metadata/tutorial003.py hl[3] *} diff --git a/docs/em/docs/tutorial/middleware.md b/docs/em/docs/tutorial/middleware.md deleted file mode 100644 index c77b10554..000000000 --- a/docs/em/docs/tutorial/middleware.md +++ /dev/null @@ -1,66 +0,0 @@ -# ๐Ÿ› ๏ธ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ› ๏ธ **FastAPI** ๐Ÿˆธ. - -"๐Ÿ› ๏ธ" ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ‘ท โฎ๏ธ ๐Ÿ”  **๐Ÿ“จ** โญ โšซ๏ธ ๐Ÿ› ๏ธ ๐Ÿ™† ๐ŸŽฏ *โžก ๐Ÿ› ๏ธ*. & โฎ๏ธ ๐Ÿ”  **๐Ÿ“จ** โญ ๐Ÿ›ฌ โšซ๏ธ. - -* โšซ๏ธ โœŠ ๐Ÿ”  **๐Ÿ“จ** ๐Ÿ‘ˆ ๐Ÿ‘Ÿ ๐Ÿ‘† ๐Ÿˆธ. -* โšซ๏ธ ๐Ÿ’ช โคด๏ธ ๐Ÿ•ณ ๐Ÿ‘ˆ **๐Ÿ“จ** โš–๏ธ ๐Ÿƒ ๐Ÿ™† ๐Ÿ’ช ๐Ÿ“Ÿ. -* โคด๏ธ โšซ๏ธ ๐Ÿšถโ€โ™€๏ธ **๐Ÿ“จ** ๐Ÿ› ๏ธ ๐ŸŽ‚ ๐Ÿˆธ ( *โžก ๐Ÿ› ๏ธ*). -* โšซ๏ธ โคด๏ธ โœŠ **๐Ÿ“จ** ๐Ÿ— ๐Ÿˆธ ( *โžก ๐Ÿ› ๏ธ*). -* โšซ๏ธ ๐Ÿ’ช ๐Ÿ•ณ ๐Ÿ‘ˆ **๐Ÿ“จ** โš–๏ธ ๐Ÿƒ ๐Ÿ™† ๐Ÿ’ช ๐Ÿ“Ÿ. -* โคด๏ธ โšซ๏ธ ๐Ÿ“จ **๐Ÿ“จ**. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ”— โฎ๏ธ `yield`, ๐Ÿšช ๐Ÿ“Ÿ ๐Ÿ”œ ๐Ÿƒ *โฎ๏ธ* ๐Ÿ› ๏ธ. - -๐Ÿšฅ ๐Ÿ“ค ๐Ÿ™† ๐Ÿ–ฅ ๐Ÿ“‹ (๐Ÿ“„ โช), ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿƒ *โฎ๏ธ* ๐ŸŒ ๐Ÿ› ๏ธ. - -/// - -## โœ ๐Ÿ› ๏ธ - -โœ ๐Ÿ› ๏ธ ๐Ÿ‘† โš™๏ธ ๐Ÿ‘จโ€๐ŸŽจ `@app.middleware("http")` ๐Ÿ”› ๐Ÿ” ๐Ÿ”ข. - -๐Ÿ› ๏ธ ๐Ÿ”ข ๐Ÿ“จ: - -* `request`. -* ๐Ÿ”ข `call_next` ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ“จ `request` ๐Ÿ”ข. - * ๐Ÿ‘‰ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ `request` ๐Ÿ”— *โžก ๐Ÿ› ๏ธ*. - * โคด๏ธ โšซ๏ธ ๐Ÿ“จ `response` ๐Ÿ— ๐Ÿ”— *โžก ๐Ÿ› ๏ธ*. -* ๐Ÿ‘† ๐Ÿ’ช โคด๏ธ ๐Ÿ”€ ๐ŸŒ… `response` โญ ๐Ÿ›ฌ โšซ๏ธ. - -{* ../../docs_src/middleware/tutorial001.py hl[8:9,11,14] *} - -/// tip - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ›ƒ ยฉ ๐ŸŽš ๐Ÿ’ช ๐Ÿšฎ โš™๏ธ 'โœ–-' ๐Ÿ”ก. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ›ƒ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ–ฅ ๐Ÿ’ช ๐Ÿ‘€, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ‘† โšœ ๐Ÿ“ณ ([โšœ (โœ–๏ธ-๐Ÿ‡จ๐Ÿ‡ณ โ„น ๐Ÿค)](cors.md){.internal-link target=_blank}) โš™๏ธ ๐Ÿ”ข `expose_headers` ๐Ÿ“„ ๐Ÿ’ƒ โšœ ๐Ÿฉบ. - -/// - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.requests import Request`. - -**FastAPI** ๐Ÿšš โšซ๏ธ ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ โšซ๏ธ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -### โญ & โฎ๏ธ `response` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ“Ÿ ๐Ÿƒ โฎ๏ธ `request`, โญ ๐Ÿ™† *โžก ๐Ÿ› ๏ธ* ๐Ÿ“จ โšซ๏ธ. - -& โฎ๏ธ `response` ๐Ÿ—, โญ ๐Ÿ›ฌ โšซ๏ธ. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ›ƒ ๐ŸŽš `X-Process-Time` โš— ๐Ÿ•ฐ ๐Ÿฅˆ ๐Ÿ‘ˆ โšซ๏ธ โœŠ ๐Ÿ› ๏ธ ๐Ÿ“จ & ๐Ÿ— ๐Ÿ“จ: - -{* ../../docs_src/middleware/tutorial001.py hl[10,12:13] *} - -## ๐ŸŽ ๐Ÿ› ๏ธ - -๐Ÿ‘† ๐Ÿ’ช โช โœ ๐ŸŒ– ๐Ÿ”ƒ ๐ŸŽ ๐Ÿ› ๏ธ [๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ: ๐Ÿง ๐Ÿ› ๏ธ](../advanced/middleware.md){.internal-link target=_blank}. - -๐Ÿ‘† ๐Ÿ”œ โœ ๐Ÿ”ƒ โ” ๐Ÿต โšœ โฎ๏ธ ๐Ÿ› ๏ธ โญ ๐Ÿ“„. diff --git a/docs/em/docs/tutorial/path-operation-configuration.md b/docs/em/docs/tutorial/path-operation-configuration.md deleted file mode 100644 index c6030c089..000000000 --- a/docs/em/docs/tutorial/path-operation-configuration.md +++ /dev/null @@ -1,107 +0,0 @@ -# โžก ๐Ÿ› ๏ธ ๐Ÿ“ณ - -๐Ÿ“ค ๐Ÿ“š ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* ๐Ÿ”— โšซ๏ธ. - -/// warning - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘ซ ๐Ÿ”ข ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”— *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*, ๐Ÿšซ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -/// - -## ๐Ÿ“จ ๐Ÿ‘” ๐Ÿ“Ÿ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ (๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”) `status_code` โš™๏ธ ๐Ÿ“จ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”— `int` ๐Ÿ“Ÿ, ๐Ÿ’– `404`. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ญ โšซ๏ธโ” ๐Ÿ”  ๐Ÿ”ข ๐Ÿ“Ÿ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โŒจ ๐Ÿ“‰ `status`: - -{* ../../docs_src/path_operation_configuration/tutorial001.py hl[3,17] *} - -๐Ÿ‘ˆ ๐Ÿ‘” ๐Ÿ“Ÿ ๐Ÿ”œ โš™๏ธ ๐Ÿ“จ & ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ—„ ๐Ÿ”—. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette import status`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.status` `fastapi.status` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ โšซ๏ธ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -## ๐Ÿ”– - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ”– ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*, ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”ข `tags` โฎ๏ธ `list` `str` (๐Ÿ›Ž 1๏ธโƒฃ `str`): - -{* ../../docs_src/path_operation_configuration/tutorial002.py hl[17,22,27] *} - -๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ—„ ๐Ÿ”— & โš™๏ธ ๐Ÿง ๐Ÿงพ ๐Ÿ”ข: - - - -### ๐Ÿ”– โฎ๏ธ ๐Ÿ”ข - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿฆ ๐Ÿˆธ, ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿ”š ๐Ÿ†™ ๐Ÿ“ˆ **๐Ÿ“š ๐Ÿ”–**, & ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’š โš’ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿ•ง โš™๏ธ **๐ŸŽ ๐Ÿ”–** ๐Ÿ”— *โžก ๐Ÿ› ๏ธ*. - -๐Ÿ‘ซ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ’ช โš’ ๐Ÿ”‘ ๐Ÿช ๐Ÿ”– `Enum`. - -**FastAPI** ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ˆ ๐ŸŽ ๐ŸŒŒ โฎ๏ธ โœ… ๐ŸŽป: - -{* ../../docs_src/path_operation_configuration/tutorial002b.py hl[1,8:10,13,18] *} - -## ๐Ÿ“„ & ๐Ÿ“› - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ `summary` & `description`: - -{* ../../docs_src/path_operation_configuration/tutorial003.py hl[20:21] *} - -## ๐Ÿ“› โšช๏ธโžก๏ธ #๏ธโƒฃ - -๐Ÿ“› ๐Ÿ˜‘ ๐Ÿ“ & ๐Ÿ“” ๐Ÿ’— โธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ *โžก ๐Ÿ› ๏ธ* ๐Ÿ“› ๐Ÿ”ข #๏ธโƒฃ & **FastAPI** ๐Ÿ”œ โœ โšซ๏ธ โšช๏ธโžก๏ธ ๐Ÿ“ค. - -๐Ÿ‘† ๐Ÿ’ช โœ โœ #๏ธโƒฃ , โšซ๏ธ ๐Ÿ”œ ๐Ÿ”ฌ & ๐Ÿ–ฅ โ˜‘ (โœŠ ๐Ÿ”˜ ๐Ÿง #๏ธโƒฃ ๐Ÿ“). - -{* ../../docs_src/path_operation_configuration/tutorial004.py hl[19:27] *} - -โšซ๏ธ ๐Ÿ”œ โš™๏ธ ๐ŸŽ“ ๐Ÿฉบ: - - - -## ๐Ÿ“จ ๐Ÿ“› - -๐Ÿ‘† ๐Ÿ’ช โœ” ๐Ÿ“จ ๐Ÿ“› โฎ๏ธ ๐Ÿ”ข `response_description`: - -{* ../../docs_src/path_operation_configuration/tutorial005.py hl[21] *} - -/// info - -๐Ÿ‘€ ๐Ÿ‘ˆ `response_description` ๐Ÿ”— ๐ŸŽฏ ๐Ÿ“จ, `description` ๐Ÿ”— *โžก ๐Ÿ› ๏ธ* ๐Ÿข. - -/// - -/// check - -๐Ÿ—„ โœ” ๐Ÿ‘ˆ ๐Ÿ”  *โžก ๐Ÿ› ๏ธ* ๐Ÿšš ๐Ÿ“จ ๐Ÿ“›. - -, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿšš 1๏ธโƒฃ, **FastAPI** ๐Ÿ”œ ๐Ÿ” ๐Ÿ— 1๏ธโƒฃ "๐Ÿ† ๐Ÿ“จ". - -/// - - - -## ๐Ÿ˜ข *โžก ๐Ÿ› ๏ธ* - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช โ„ข *โžก ๐Ÿ› ๏ธ* ๐Ÿ˜ข, โœ‹๏ธ ๐Ÿต โŽ โšซ๏ธ, ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”ข `deprecated`: - -{* ../../docs_src/path_operation_configuration/tutorial006.py hl[16] *} - -โšซ๏ธ ๐Ÿ”œ ๐ŸŽฏ โ„ข ๐Ÿ˜ข ๐ŸŽ“ ๐Ÿฉบ: - - - -โœ… โ” ๐Ÿ˜ข & ๐Ÿšซ-๐Ÿ˜ข *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘€ ๐Ÿ’–: - - - -## ๐ŸŒƒ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— & ๐Ÿšฎ ๐Ÿ—ƒ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”ข *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ*. diff --git a/docs/em/docs/tutorial/path-params-numeric-validations.md b/docs/em/docs/tutorial/path-params-numeric-validations.md deleted file mode 100644 index b45e0557b..000000000 --- a/docs/em/docs/tutorial/path-params-numeric-validations.md +++ /dev/null @@ -1,117 +0,0 @@ -# โžก ๐Ÿ”ข & ๐Ÿ”ข ๐Ÿ”ฌ - -๐ŸŽ ๐ŸŒŒ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ… ๐Ÿ”ฌ & ๐Ÿ—ƒ ๐Ÿ”ข ๐Ÿ”ข โฎ๏ธ `Query`, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŽ ๐Ÿ†Ž ๐Ÿ”ฌ & ๐Ÿ—ƒ โžก ๐Ÿ”ข โฎ๏ธ `Path`. - -## ๐Ÿ—„ โžก - -๐Ÿฅ‡, ๐Ÿ—„ `Path` โšช๏ธโžก๏ธ `fastapi`: - -{* ../../docs_src/path_params_numeric_validations/tutorial001.py hl[3] *} - -## ๐Ÿ“ฃ ๐Ÿ—ƒ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ ๐ŸŽ ๐Ÿ”ข `Query`. - -๐Ÿ–ผ, ๐Ÿ“ฃ `title` ๐Ÿ—ƒ ๐Ÿ’ฒ โžก ๐Ÿ”ข `item_id` ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ†Ž: - -{* ../../docs_src/path_params_numeric_validations/tutorial001.py hl[10] *} - -/// note - -โžก ๐Ÿ”ข ๐Ÿ•ง โœ” โšซ๏ธ โœ”๏ธ ๐Ÿ• โžก. - -, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“ฃ โšซ๏ธ โฎ๏ธ `...` โ„ข โšซ๏ธ โœ”. - -๐Ÿ‘, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ฃ โšซ๏ธ โฎ๏ธ `None` โš–๏ธ โš’ ๐Ÿ”ข ๐Ÿ’ฒ, โšซ๏ธ ๐Ÿ”œ ๐Ÿšซ ๐Ÿ“‰ ๐Ÿ•ณ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ•ง ๐Ÿšš. - -/// - -## โœ” ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ’ช - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ”ข `q` โœ” `str`. - -& ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ•ณ ๐Ÿ™† ๐Ÿ‘ˆ ๐Ÿ”ข, ๐Ÿ‘† ๐Ÿšซ ๐Ÿค™ ๐Ÿ’ช โš™๏ธ `Query`. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Path` `item_id` โžก ๐Ÿ”ข. - -๐Ÿ ๐Ÿ”œ ๐Ÿ˜ญ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšฎ ๐Ÿ’ฒ โฎ๏ธ "๐Ÿ”ข" โญ ๐Ÿ’ฒ ๐Ÿ‘ˆ ๐Ÿšซ โœ”๏ธ "๐Ÿ”ข". - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค-โœ” ๐Ÿ‘ซ, & โœ”๏ธ ๐Ÿ’ฒ ๐Ÿต ๐Ÿ”ข (๐Ÿ”ข ๐Ÿ”ข `q`) ๐Ÿฅ‡. - -โšซ๏ธ ๐Ÿšซ ๐Ÿค” **FastAPI**. โšซ๏ธ ๐Ÿ”œ ๐Ÿ” ๐Ÿ”ข ๐Ÿ‘ซ ๐Ÿ“›, ๐Ÿ†Ž & ๐Ÿ”ข ๐Ÿ“„ (`Query`, `Path`, โ™’๏ธ), โšซ๏ธ ๐Ÿšซ ๐Ÿ’… ๐Ÿ”ƒ โœ”. - -, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ‘† ๐Ÿ”ข: - -{* ../../docs_src/path_params_numeric_validations/tutorial002.py hl[7] *} - -## โœ” ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ’ช, ๐ŸŽฑ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ“ฃ `q` ๐Ÿ”ข ๐Ÿ”ข ๐Ÿต `Query` ๐Ÿšซ ๐Ÿ™† ๐Ÿ”ข ๐Ÿ’ฒ, & โžก ๐Ÿ”ข `item_id` โš™๏ธ `Path`, & โœ”๏ธ ๐Ÿ‘ซ ๐ŸŽ โœ”, ๐Ÿ โœ”๏ธ ๐Ÿฅ ๐ŸŽ โ• ๐Ÿ‘ˆ. - -๐Ÿšถโ€โ™€๏ธ `*`, ๐Ÿฅ‡ ๐Ÿ”ข ๐Ÿ”ข. - -๐Ÿ ๐Ÿ† ๐Ÿšซ ๐Ÿ•ณ โฎ๏ธ ๐Ÿ‘ˆ `*`, โœ‹๏ธ โšซ๏ธ ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿ“„ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿค™ ๐Ÿ‡จ๐Ÿ‡ป โŒ (๐Ÿ”‘-๐Ÿ’ฒ ๐Ÿ‘ซ), ๐Ÿ’ญ kwargs. ๐Ÿšฅ ๐Ÿ‘ซ ๐Ÿšซ โœ”๏ธ ๐Ÿ”ข ๐Ÿ’ฒ. - -{* ../../docs_src/path_params_numeric_validations/tutorial003.py hl[7] *} - -## ๐Ÿ”ข ๐Ÿ”ฌ: ๐Ÿ‘‘ ๐ŸŒ˜ โš–๏ธ ๐ŸŒ“ - -โฎ๏ธ `Query` & `Path` (& ๐ŸŽ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โช) ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”ข โš›. - -๐Ÿ“ฅ, โฎ๏ธ `ge=1`, `item_id` ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ”ข ๐Ÿ”ข "`g`๐Ÿ…พ ๐ŸŒ˜ โš–๏ธ `e`๐Ÿ…พ" `1`. - -{* ../../docs_src/path_params_numeric_validations/tutorial004.py hl[8] *} - -## ๐Ÿ”ข ๐Ÿ”ฌ: ๐ŸŒ˜ ๐ŸŒ˜ & ๐ŸŒ˜ ๐ŸŒ˜ โš–๏ธ ๐ŸŒ“ - -๐ŸŽ โœ”: - -* `gt`: `g`๐Ÿ…พ `t`๐Ÿ‘ฒ -* `le`: `l`๐Ÿ‘ญ ๐ŸŒ˜ โš–๏ธ `e`๐Ÿ…พ - -{* ../../docs_src/path_params_numeric_validations/tutorial005.py hl[9] *} - -## ๐Ÿ”ข ๐Ÿ”ฌ: ๐ŸŽˆ, ๐ŸŒ˜ ๐ŸŒ˜ & ๐ŸŒ˜ ๐ŸŒ˜ - -๐Ÿ”ข ๐Ÿ”ฌ ๐Ÿ‘ท `float` ๐Ÿ’ฒ. - -๐Ÿ“ฅ ๐ŸŒโ” โšซ๏ธ โ–ถ๏ธ๏ธ โš  ๐Ÿ’ช ๐Ÿ“ฃ gt & ๐Ÿšซ ge. โฎ๏ธ โšซ๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšš, ๐Ÿ–ผ, ๐Ÿ‘ˆ ๐Ÿ’ฒ ๐Ÿ”œ ๐Ÿ‘‘ ๐ŸŒ˜ `0`, ๐Ÿšฅ โšซ๏ธ ๐ŸŒ˜ ๐ŸŒ˜ `1`. - -, `0.5` ๐Ÿ”œ โ˜‘ ๐Ÿ’ฒ. โœ‹๏ธ `0.0` โš–๏ธ `0` ๐Ÿ”œ ๐Ÿšซ. - -& ๐ŸŽ lt. - -{* ../../docs_src/path_params_numeric_validations/tutorial006.py hl[11] *} - -## ๐ŸŒƒ - -โฎ๏ธ `Query`, `Path` (& ๐ŸŽ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ‘€) ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ—ƒ & ๐ŸŽป ๐Ÿ”ฌ ๐ŸŽ ๐ŸŒŒ โฎ๏ธ [๐Ÿ”ข ๐Ÿ”ข & ๐ŸŽป ๐Ÿ”ฌ](query-params-str-validations.md){.internal-link target=_blank}. - -& ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ”ฌ: - -* `gt`: `g`๐Ÿ…พ `t`๐Ÿ‘ฒ -* `ge`: `g`๐Ÿ…พ ๐ŸŒ˜ โš–๏ธ `e`๐Ÿ…พ -* `lt`: `l`๐Ÿ‘ญ `t`๐Ÿ‘ฒ -* `le`: `l`๐Ÿ‘ญ ๐ŸŒ˜ โš–๏ธ `e`๐Ÿ…พ - -/// info - -`Query`, `Path`, & ๐ŸŽ ๐ŸŽ“ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โช ๐Ÿฟ โš  `Param` ๐ŸŽ“. - -๐ŸŒ ๐Ÿ‘ซ ๐Ÿ’ฐ ๐ŸŽ ๐Ÿ”ข ๐ŸŒ– ๐Ÿ”ฌ & ๐Ÿ—ƒ ๐Ÿ‘† โœ”๏ธ ๐Ÿ‘€. - -/// - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ—„ `Query`, `Path` & ๐ŸŽ โšช๏ธโžก๏ธ `fastapi`, ๐Ÿ‘ซ ๐Ÿค™ ๐Ÿ”ข. - -๐Ÿ‘ˆ ๐Ÿ•โ” ๐Ÿค™, ๐Ÿ“จ ๐Ÿ‘ ๐ŸŽ“ ๐ŸŽ ๐Ÿ“›. - -, ๐Ÿ‘† ๐Ÿ—„ `Query`, โ” ๐Ÿ”ข. & ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿค™ โšซ๏ธ, โšซ๏ธ ๐Ÿ“จ ๐Ÿ‘ ๐ŸŽ“ ๐ŸŒŸ `Query`. - -๐Ÿ‘ซ ๐Ÿ”ข ๐Ÿ“ค (โ†ฉ๏ธ โš™๏ธ ๐ŸŽ“ ๐Ÿ”—) ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿšซ โ„ข โŒ ๐Ÿ”ƒ ๐Ÿ‘ซ ๐Ÿ†Ž. - -๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘† ๐Ÿ˜ ๐Ÿ‘จโ€๐ŸŽจ & ๐Ÿ› ๏ธ ๐Ÿงฐ ๐Ÿต โœ”๏ธ ๐Ÿšฎ ๐Ÿ›ƒ ๐Ÿ“ณ ๐Ÿคทโ€โ™‚ ๐Ÿ“š โŒ. - -/// diff --git a/docs/em/docs/tutorial/path-params.md b/docs/em/docs/tutorial/path-params.md deleted file mode 100644 index a914dc905..000000000 --- a/docs/em/docs/tutorial/path-params.md +++ /dev/null @@ -1,256 +0,0 @@ -# โžก ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ โžก "๐Ÿ”ข" โš–๏ธ "๐Ÿ”ข" โฎ๏ธ ๐ŸŽ โ• โš™๏ธ ๐Ÿ ๐Ÿ“ ๐ŸŽป: - -{* ../../docs_src/path_params/tutorial001.py hl[6:7] *} - -๐Ÿ’ฒ โžก ๐Ÿ”ข `item_id` ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘† ๐Ÿ”ข โŒ `item_id`. - -, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒ ๐Ÿ‘‰ ๐Ÿ–ผ & ๐Ÿšถ http://127.0.0.1:8000/items/foo, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ“จ: - -```JSON -{"item_id":"foo"} -``` - -## โžก ๐Ÿ”ข โฎ๏ธ ๐Ÿ†Ž - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ†Ž โžก ๐Ÿ”ข ๐Ÿ”ข, โš™๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž โœ: - -{* ../../docs_src/path_params/tutorial002.py hl[7] *} - -๐Ÿ‘‰ ๐Ÿ’ผ, `item_id` ๐Ÿ“ฃ `int`. - -/// check - -๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿค ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ”˜ ๐Ÿ‘† ๐Ÿ”ข, โฎ๏ธ โŒ โœ…, ๐Ÿ› ๏ธ, โ™’๏ธ. - -/// - -## ๐Ÿ’ฝ ๐Ÿ› ๏ธ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒ ๐Ÿ‘‰ ๐Ÿ–ผ & ๐Ÿ“‚ ๐Ÿ‘† ๐Ÿ–ฅ http://127.0.0.1:8000/items/3, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ“จ: - -```JSON -{"item_id":3} -``` - -/// check - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ’ฒ ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ“จ (& ๐Ÿ“จ) `3`, ๐Ÿ `int`, ๐Ÿšซ ๐ŸŽป `"3"`. - -, โฎ๏ธ ๐Ÿ‘ˆ ๐Ÿ†Ž ๐Ÿ“„, **FastAPI** ๐Ÿค ๐Ÿ‘† ๐Ÿง ๐Ÿ“จ "โœ". - -/// - -## ๐Ÿ’ฝ ๐Ÿ”ฌ - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถ ๐Ÿ–ฅ http://127.0.0.1:8000/items/foo, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ‘Œ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” โŒ: - -```JSON -{ - "detail": [ - { - "loc": [ - "path", - "item_id" - ], - "msg": "value is not a valid integer", - "type": "type_error.integer" - } - ] -} -``` - -โ†ฉ๏ธ โžก ๐Ÿ”ข `item_id` โœ”๏ธ ๐Ÿ’ฒ `"foo"`, โ” ๐Ÿšซ `int`. - -๐ŸŽ โŒ ๐Ÿ”œ ๐Ÿ˜‘ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšš `float` โ†ฉ๏ธ `int`,: http://127.0.0.1:8000/items/4.2 - -/// check - -, โฎ๏ธ ๐ŸŽ ๐Ÿ ๐Ÿ†Ž ๐Ÿ“„, **FastAPI** ๐Ÿค ๐Ÿ‘† ๐Ÿ’ฝ ๐Ÿ”ฌ. - -๐Ÿ‘€ ๐Ÿ‘ˆ โŒ ๐ŸŽฏ ๐Ÿ‡ต๐Ÿ‡ธ โšซ๏ธโ” โ˜ ๐ŸŒโ” ๐Ÿ”ฌ ๐Ÿšซ ๐Ÿšถโ€โ™€๏ธ. - -๐Ÿ‘‰ ๐Ÿ™ƒ ๐Ÿ‘ โช ๐Ÿ› ๏ธ & ๐Ÿ› ๏ธ ๐Ÿ“Ÿ ๐Ÿ‘ˆ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ. - -/// - -## ๐Ÿงพ - -& ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“‚ ๐Ÿ‘† ๐Ÿ–ฅ http://127.0.0.1:8000/docs, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿง, ๐ŸŽ“, ๐Ÿ› ๏ธ ๐Ÿงพ ๐Ÿ’–: - - - -/// check - -๐Ÿ”„, โฎ๏ธ ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿ ๐Ÿ†Ž ๐Ÿ“„, **FastAPI** ๐Ÿค ๐Ÿ‘† ๐Ÿง, ๐ŸŽ“ ๐Ÿงพ (๐Ÿ› ๏ธ ๐Ÿฆ ๐ŸŽš). - -๐Ÿ‘€ ๐Ÿ‘ˆ โžก ๐Ÿ”ข ๐Ÿ“ฃ ๐Ÿ”ข. - -/// - -## ๐Ÿฉ-โš“๏ธ ๐Ÿ’ฐ, ๐ŸŽ› ๐Ÿงพ - -& โ†ฉ๏ธ ๐Ÿ— ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ—„ ๐Ÿฉ, ๐Ÿ“ค ๐Ÿ“š ๐Ÿ”— ๐Ÿงฐ. - -โ†ฉ๏ธ ๐Ÿ‘‰, **FastAPI** โšซ๏ธ ๐Ÿšš ๐ŸŽ› ๐Ÿ› ๏ธ ๐Ÿงพ (โš™๏ธ ๐Ÿ“„), โ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” http://127.0.0.1:8000/redoc: - - - -๐ŸŽ ๐ŸŒŒ, ๐Ÿ“ค ๐Ÿ“š ๐Ÿ”— ๐Ÿงฐ. โœ… ๐Ÿ“Ÿ โšก ๐Ÿงฐ ๐Ÿ“š ๐Ÿ‡ช๐Ÿ‡ธ. - -## Pydantic - -๐ŸŒ ๐Ÿ’ฝ ๐Ÿ”ฌ ๐ŸŽญ ๐Ÿ”ฝ ๐Ÿš˜ Pydantic, ๐Ÿ‘† ๐Ÿคš ๐ŸŒ ๐Ÿ’ฐ โšช๏ธโžก๏ธ โšซ๏ธ. & ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿ‘ โœ‹. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ ๐Ÿ†Ž ๐Ÿ“„ โฎ๏ธ `str`, `float`, `bool` & ๐Ÿ“š ๐ŸŽ ๐Ÿ— ๐Ÿ“Š ๐Ÿ†Ž. - -๐Ÿ“š ๐Ÿ‘ซ ๐Ÿ”ฌ โญ ๐Ÿ“ƒ ๐Ÿ”ฐ. - -## โœ” ๐Ÿค” - -๐Ÿ•โ” ๐Ÿ— *โžก ๐Ÿ› ๏ธ*, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”Ž โš  ๐ŸŒโ” ๐Ÿ‘† โœ”๏ธ ๐Ÿ”ง โžก. - -๐Ÿ’– `/users/me`, โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿคš ๐Ÿ“Š ๐Ÿ”ƒ โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -& โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ โžก `/users/{user_id}` ๐Ÿคš ๐Ÿ’ฝ ๐Ÿ”ƒ ๐ŸŽฏ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ†”. - -โ†ฉ๏ธ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”ฌ โœ”, ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ โžก `/users/me` ๐Ÿ“ฃ โญ 1๏ธโƒฃ `/users/{user_id}`: - -{* ../../docs_src/path_params/tutorial003.py hl[6,11] *} - -โช, โžก `/users/{user_id}` ๐Ÿ”œ ๐Ÿ `/users/me`, "๐Ÿ’ญ" ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ“จ ๐Ÿ”ข `user_id` โฎ๏ธ ๐Ÿ’ฒ `"me"`. - -โžก, ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ โ†” โžก ๐Ÿ› ๏ธ: - -{* ../../docs_src/path_params/tutorial003b.py hl[6,11] *} - -๐Ÿฅ‡ ๐Ÿ• ๐Ÿ”œ ๐Ÿ•ง โš™๏ธ โ†ฉ๏ธ โžก ๐Ÿ ๐Ÿฅ‡. - -## ๐Ÿ” ๐Ÿ’ฒ - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ˆ ๐Ÿ“จ *โžก ๐Ÿ”ข*, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ’ช โ˜‘ *โžก ๐Ÿ”ข* ๐Ÿ’ฒ ๐Ÿ”, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿฉ ๐Ÿ `Enum`. - -### โœ `Enum` ๐ŸŽ“ - -๐Ÿ—„ `Enum` & โœ ๐ŸŽง-๐ŸŽ“ ๐Ÿ‘ˆ ๐Ÿ˜– โšช๏ธโžก๏ธ `str` & โšช๏ธโžก๏ธ `Enum`. - -๐Ÿ˜– โšช๏ธโžก๏ธ `str` ๐Ÿ› ๏ธ ๐Ÿฉบ ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ’ฒ ๐Ÿ”œ ๐Ÿ†Ž `string` & ๐Ÿ”œ ๐Ÿ’ช โœ โ˜‘. - -โคด๏ธ โœ ๐ŸŽ“ ๐Ÿ”ข โฎ๏ธ ๐Ÿ”ง ๐Ÿ’ฒ, โ” ๐Ÿ”œ ๐Ÿ’ช โ˜‘ ๐Ÿ’ฒ: - -{* ../../docs_src/path_params/tutorial005.py hl[1,6:9] *} - -/// info - -๐Ÿ”ข (โš–๏ธ ๐Ÿ”ข) ๐Ÿ’ช ๐Ÿ โ†ฉ๏ธ โฌ 3๏ธโƒฃ.4๏ธโƒฃ. - -/// - -/// tip - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ญ, "๐Ÿ“Š", "๐ŸŽ“", & "๐Ÿ" ๐Ÿ“› ๐ŸŽฐ ๐Ÿซ ๐Ÿท. - -/// - -### ๐Ÿ“ฃ *โžก ๐Ÿ”ข* - -โคด๏ธ โœ *โžก ๐Ÿ”ข* โฎ๏ธ ๐Ÿ†Ž โœ โš™๏ธ ๐Ÿ”ข ๐ŸŽ“ ๐Ÿ‘† โœ (`ModelName`): - -{* ../../docs_src/path_params/tutorial005.py hl[16] *} - -### โœ… ๐Ÿฉบ - -โ†ฉ๏ธ ๐Ÿ’ช ๐Ÿ’ฒ *โžก ๐Ÿ”ข* ๐Ÿ”ข, ๐ŸŽ“ ๐Ÿฉบ ๐Ÿ’ช ๐ŸŽฆ ๐Ÿ‘ซ ๐ŸŽ†: - - - -### ๐Ÿ‘ท โฎ๏ธ ๐Ÿ *๐Ÿ”ข* - -๐Ÿ’ฒ *โžก ๐Ÿ”ข* ๐Ÿ”œ *๐Ÿ”ข ๐Ÿ‘จโ€๐ŸŽ“*. - -#### ๐Ÿ”ฌ *๐Ÿ”ข ๐Ÿ‘จโ€๐ŸŽ“* - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ โšซ๏ธ โฎ๏ธ *๐Ÿ”ข ๐Ÿ‘จโ€๐ŸŽ“* ๐Ÿ‘† โœ ๐Ÿ”ข `ModelName`: - -{* ../../docs_src/path_params/tutorial005.py hl[17] *} - -#### ๐Ÿคš *๐Ÿ”ข ๐Ÿ’ฒ* - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿคš โ˜‘ ๐Ÿ’ฒ ( `str` ๐Ÿ‘‰ ๐Ÿ’ผ) โš™๏ธ `model_name.value`, โš–๏ธ ๐Ÿข, `your_enum_member.value`: - -{* ../../docs_src/path_params/tutorial005.py hl[20] *} - -/// tip - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” ๐Ÿ’ฒ `"lenet"` โฎ๏ธ `ModelName.lenet.value`. - -/// - -#### ๐Ÿ“จ *๐Ÿ”ข ๐Ÿ‘จโ€๐ŸŽ“* - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ *๐Ÿ”ข ๐Ÿ‘จโ€๐ŸŽ“* โšช๏ธโžก๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ*, ๐Ÿฆ ๐ŸŽป ๐Ÿ’ช (โœ… `dict`). - -๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ—œ ๐Ÿ‘ซ ๐Ÿ”— ๐Ÿ’ฒ (๐ŸŽป ๐Ÿ‘‰ ๐Ÿ’ผ) โญ ๐Ÿ›ฌ ๐Ÿ‘ซ ๐Ÿ‘ฉโ€๐Ÿ’ป: - -{* ../../docs_src/path_params/tutorial005.py hl[18,21,23] *} - -๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš ๐ŸŽป ๐Ÿ“จ ๐Ÿ’–: - -```JSON -{ - "model_name": "alexnet", - "message": "Deep Learning FTW!" -} -``` - -## โžก ๐Ÿ”ข โš— โžก - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† โœ”๏ธ *โžก ๐Ÿ› ๏ธ* โฎ๏ธ โžก `/files/{file_path}`. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช `file_path` โšซ๏ธ ๐Ÿ”Œ *โžก*, ๐Ÿ’– `home/johndoe/myfile.txt`. - -, ๐Ÿ“› ๐Ÿ‘ˆ ๐Ÿ“ ๐Ÿ”œ ๐Ÿ•ณ ๐Ÿ’–: `/files/home/johndoe/myfile.txt`. - -### ๐Ÿ—„ ๐Ÿ•โ€๐Ÿฆบ - -๐Ÿ—„ ๐Ÿšซ ๐Ÿ•โ€๐Ÿฆบ ๐ŸŒŒ ๐Ÿ“ฃ *โžก ๐Ÿ”ข* ๐Ÿ”Œ *โžก* ๐Ÿ”˜, ๐Ÿ‘ˆ ๐Ÿ’ช โ†˜๏ธ ๐Ÿ˜ ๐Ÿ‘ˆ โš  ๐Ÿ’ฏ & ๐Ÿ”ฌ. - -๐Ÿ‘, ๐Ÿ‘† ๐Ÿ’ช โšซ๏ธ **FastAPI**, โš™๏ธ 1๏ธโƒฃ ๐Ÿ”— ๐Ÿงฐ โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -& ๐Ÿฉบ ๐Ÿ”œ ๐Ÿ‘ท, ๐Ÿ‘ ๐Ÿšซ โŽ ๐Ÿ™† ๐Ÿงพ ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ”Œ โžก. - -### โžก ๐Ÿ”Œ - -โš™๏ธ ๐ŸŽ› ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ *โžก ๐Ÿ”ข* โš— *โžก* โš™๏ธ ๐Ÿ“› ๐Ÿ’–: - -``` -/files/{file_path:path} -``` - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ“› ๐Ÿ”ข `file_path`, & ๐Ÿ ๐Ÿ•, `:path`, ๐Ÿ’ฌ โšซ๏ธ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ ๐Ÿ™† *โžก*. - -, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โšซ๏ธ โฎ๏ธ: - -{* ../../docs_src/path_params/tutorial004.py hl[6] *} - -/// tip - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช ๐Ÿ”ข ๐Ÿ”Œ `/home/johndoe/myfile.txt`, โฎ๏ธ ๐Ÿ ๐Ÿ”ช (`/`). - -๐Ÿ‘ˆ ๐Ÿ’ผ, ๐Ÿ“› ๐Ÿ”œ: `/files//home/johndoe/myfile.txt`, โฎ๏ธ 2๏ธโƒฃโœ–๏ธ ๐Ÿ”ช (`//`) ๐Ÿ–– `files` & `home`. - -/// - -## ๐ŸŒƒ - -โฎ๏ธ **FastAPI**, โš™๏ธ ๐Ÿ“, ๐Ÿ‹๏ธ & ๐Ÿฉ ๐Ÿ ๐Ÿ†Ž ๐Ÿ“„, ๐Ÿ‘† ๐Ÿคš: - -* ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ: โŒ โœ…, โœ, โ™’๏ธ. -* ๐Ÿ’ฝ "โœ" -* ๐Ÿ’ฝ ๐Ÿ”ฌ -* ๐Ÿ› ๏ธ โœ & ๐Ÿง ๐Ÿงพ - -& ๐Ÿ‘† ๐Ÿ•ด โœ”๏ธ ๐Ÿ“ฃ ๐Ÿ‘ซ ๐Ÿ•. - -๐Ÿ‘ˆ ๐ŸŽฒ ๐Ÿ‘‘ โญ ๐Ÿ“ˆ **FastAPI** ๐Ÿ”ฌ ๐ŸŽ› ๐Ÿ› ๏ธ (โ†–๏ธ โšช๏ธโžก๏ธ ๐Ÿฃ ๐ŸŽญ). diff --git a/docs/em/docs/tutorial/query-params-str-validations.md b/docs/em/docs/tutorial/query-params-str-validations.md deleted file mode 100644 index fd077bf8f..000000000 --- a/docs/em/docs/tutorial/query-params-str-validations.md +++ /dev/null @@ -1,320 +0,0 @@ -# ๐Ÿ”ข ๐Ÿ”ข & ๐ŸŽป ๐Ÿ”ฌ - -**FastAPI** โœ” ๐Ÿ‘† ๐Ÿ“ฃ ๐ŸŒ– โ„น & ๐Ÿ”ฌ ๐Ÿ‘† ๐Ÿ”ข. - -โžก๏ธ โœŠ ๐Ÿ‘‰ ๐Ÿˆธ ๐Ÿ–ผ: - -{* ../../docs_src/query_params_str_validations/tutorial001.py hl[9] *} - -๐Ÿ”ข ๐Ÿ”ข `q` ๐Ÿ†Ž `Union[str, None]` (โš–๏ธ `str | None` ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ), ๐Ÿ‘ˆ โ›“ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ†Ž `str` โœ‹๏ธ ๐Ÿ’ช `None`, & ๐Ÿ‘, ๐Ÿ”ข ๐Ÿ’ฒ `None`, FastAPI ๐Ÿ”œ ๐Ÿ’ญ โšซ๏ธ ๐Ÿšซ โœ”. - -/// note - -FastAPI ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ’ฒ `q` ๐Ÿšซ โœ” โ†ฉ๏ธ ๐Ÿ”ข ๐Ÿ’ฒ `= None`. - - `Union` `Union[str, None]` ๐Ÿ”œ โœ” ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿค ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ•โ€๐Ÿฆบ & ๐Ÿ” โŒ. - -/// - -## ๐ŸŒ– ๐Ÿ”ฌ - -๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ› ๏ธ ๐Ÿ‘ˆ โœ‹๏ธ `q` ๐Ÿ“ฆ, ๐Ÿ•โ” โšซ๏ธ ๐Ÿšš, **๐Ÿšฎ ๐Ÿ“ ๐Ÿšซ ๐Ÿ“‰ 5๏ธโƒฃ0๏ธโƒฃ ๐Ÿฆน**. - -### ๐Ÿ—„ `Query` - -๐Ÿ† ๐Ÿ‘ˆ, ๐Ÿฅ‡ ๐Ÿ—„ `Query` โšช๏ธโžก๏ธ `fastapi`: - -{* ../../docs_src/query_params_str_validations/tutorial002.py hl[3] *} - -## โš™๏ธ `Query` ๐Ÿ”ข ๐Ÿ’ฒ - -& ๐Ÿ”œ โš™๏ธ โšซ๏ธ ๐Ÿ”ข ๐Ÿ’ฒ ๐Ÿ‘† ๐Ÿ”ข, โš’ ๐Ÿ”ข `max_length` 5๏ธโƒฃ0๏ธโƒฃ: - -{* ../../docs_src/query_params_str_validations/tutorial002.py hl[9] *} - -๐Ÿ‘ฅ โœ”๏ธ โŽ ๐Ÿ”ข ๐Ÿ’ฒ `None` ๐Ÿ”ข โฎ๏ธ `Query()`, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ”œ โš’ ๐Ÿ”ข ๐Ÿ’ฒ โฎ๏ธ ๐Ÿ”ข `Query(default=None)`, โšซ๏ธ ๐Ÿฆ ๐ŸŽ ๐ŸŽฏ โš– ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ’ฒ. - -: - -```Python -q: Union[str, None] = Query(default=None) -``` - -...โš’ ๐Ÿ”ข ๐Ÿ“ฆ, ๐ŸŽ: - -```Python -q: Union[str, None] = None -``` - -& ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ & ๐Ÿ”›: - -```Python -q: str | None = Query(default=None) -``` - -...โš’ ๐Ÿ”ข ๐Ÿ“ฆ, ๐ŸŽ: - -```Python -q: str | None = None -``` - -โœ‹๏ธ โšซ๏ธ ๐Ÿ“ฃ โšซ๏ธ ๐ŸŽฏ ๐Ÿ’†โ€โ™‚ ๐Ÿ”ข ๐Ÿ”ข. - -/// info - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐ŸŒ… โš  ๐Ÿ• โš’ ๐Ÿ”ข ๐Ÿ“ฆ ๐Ÿ•: - -```Python -= None -``` - -โš–๏ธ: - -```Python -= Query(default=None) -``` - -โšซ๏ธ ๐Ÿ”œ โš™๏ธ ๐Ÿ‘ˆ `None` ๐Ÿ”ข ๐Ÿ’ฒ, & ๐Ÿ‘ˆ ๐ŸŒŒ โš’ ๐Ÿ”ข **๐Ÿšซ โœ”**. - - `Union[str, None]` ๐Ÿ• โœ” ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿšš ๐Ÿ‘ป ๐Ÿ•โ€๐Ÿฆบ, โœ‹๏ธ โšซ๏ธ ๐Ÿšซ โšซ๏ธโ” ๐Ÿ’ฌ FastAPI ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ”ข ๐Ÿšซ โœ”. - -/// - -โคด๏ธ, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐ŸŒ… ๐Ÿ”ข `Query`. ๐Ÿ‘‰ ๐Ÿ’ผ, `max_length` ๐Ÿ”ข ๐Ÿ‘ˆ โœ” ๐ŸŽป: - -```Python -q: Union[str, None] = Query(default=None, max_length=50) -``` - -๐Ÿ‘‰ ๐Ÿ”œ โœ” ๐Ÿ“Š, ๐ŸŽฆ ๐Ÿ†‘ โŒ ๐Ÿ•โ” ๐Ÿ“Š ๐Ÿšซ โ˜‘, & ๐Ÿ“„ ๐Ÿ”ข ๐Ÿ—„ ๐Ÿ”— *โžก ๐Ÿ› ๏ธ*. - -## ๐Ÿšฎ ๐ŸŒ… ๐Ÿ”ฌ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ”ข `min_length`: - -{* ../../docs_src/query_params_str_validations/tutorial003.py hl[10] *} - -## ๐Ÿšฎ ๐Ÿฅ” ๐Ÿงฌ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿฅ” ๐Ÿงฌ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ: - -{* ../../docs_src/query_params_str_validations/tutorial004.py hl[11] *} - -๐Ÿ‘‰ ๐ŸŽฏ ๐Ÿฅ” ๐Ÿงฌ โœ… ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ”ข ๐Ÿ’ฒ: - -* `^`: โ–ถ๏ธ โฎ๏ธ ๐Ÿ“„ ๐Ÿฆน, ๐Ÿšซ โœ”๏ธ ๐Ÿฆน โญ. -* `fixedquery`: โœ”๏ธ โ˜‘ ๐Ÿ’ฒ `fixedquery`. -* `$`: ๐Ÿ”š ๐Ÿ“ค, ๐Ÿšซ โœ”๏ธ ๐Ÿ™† ๐ŸŒ– ๐Ÿฆน โฎ๏ธ `fixedquery`. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ’ธ โฎ๏ธ ๐ŸŒ ๐Ÿ‘‰ **"๐Ÿฅ” ๐Ÿงฌ"** ๐Ÿ’ญ, ๐Ÿšซ ๐Ÿ˜Ÿ. ๐Ÿ‘ซ ๐Ÿ‹๏ธ โ” ๐Ÿ“š ๐Ÿ‘ซ๐Ÿ‘ซ. ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“š ๐Ÿ’ฉ ๐Ÿต ๐Ÿ’†โ€โ™‚ ๐Ÿฅ” ๐Ÿงฌ. - -โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘ซ & ๐Ÿšถ & ๐Ÿ’ก ๐Ÿ‘ซ, ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โช โš™๏ธ ๐Ÿ‘ซ ๐Ÿ”— **FastAPI**. - -## ๐Ÿ”ข ๐Ÿ’ฒ - -๐ŸŽ ๐ŸŒŒ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ `None` ๐Ÿ’ฒ `default` ๐Ÿ”ข, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐ŸŽ ๐Ÿ’ฒ. - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ“ฃ `q` ๐Ÿ”ข ๐Ÿ”ข โœ”๏ธ `min_length` `3`, & โœ”๏ธ ๐Ÿ”ข ๐Ÿ’ฒ `"fixedquery"`: - -{* ../../docs_src/query_params_str_validations/tutorial005.py hl[7] *} - -/// note - -โœ”๏ธ ๐Ÿ”ข ๐Ÿ’ฒ โš’ ๐Ÿ”ข ๐Ÿ“ฆ. - -/// - -## โš’ โšซ๏ธ โœ” - -๐Ÿ•โ” ๐Ÿ‘ฅ ๐Ÿšซ ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ… ๐Ÿ”ฌ โš–๏ธ ๐Ÿ—ƒ, ๐Ÿ‘ฅ ๐Ÿ’ช โš’ `q` ๐Ÿ”ข ๐Ÿ”ข โœ” ๐Ÿšซ ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ’ฒ, ๐Ÿ’–: - -```Python -q: str -``` - -โ†ฉ๏ธ: - -```Python -q: Union[str, None] = None -``` - -โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ“ฃ โšซ๏ธ โฎ๏ธ `Query`, ๐Ÿ–ผ ๐Ÿ’–: - -```Python -q: Union[str, None] = Query(default=None, min_length=3) -``` - -, ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ’ฒ โœ” โช โš™๏ธ `Query`, ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽฏ ๐Ÿšซ ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ’ฒ: - -{* ../../docs_src/query_params_str_validations/tutorial006.py hl[7] *} - -### โœ” โฎ๏ธ `None` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ’ช ๐Ÿšซ `None`, โœ‹๏ธ ๐Ÿ‘ˆ โšซ๏ธ โœ”. ๐Ÿ‘‰ ๐Ÿ”œ โšก ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“จ ๐Ÿ’ฒ, ๐Ÿšฅ ๐Ÿ’ฒ `None`. - -๐Ÿ‘ˆ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ‘ˆ `None` โ˜‘ ๐Ÿ†Ž โœ‹๏ธ โš™๏ธ `default=...`: - -{* ../../docs_src/query_params_str_validations/tutorial006c.py hl[9] *} - -/// tip - -Pydantic, โ” โšซ๏ธโ” ๐Ÿ‹๏ธ ๐ŸŒ ๐Ÿ’ฝ ๐Ÿ”ฌ & ๐Ÿ› ๏ธ FastAPI, โœ”๏ธ ๐ŸŽ ๐ŸŽญ ๐Ÿ•โ” ๐Ÿ‘† โš™๏ธ `Optional` โš–๏ธ `Union[Something, None]` ๐Ÿต ๐Ÿ”ข ๐Ÿ’ฒ, ๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ… ๐Ÿ”ƒ โšซ๏ธ Pydantic ๐Ÿฉบ ๐Ÿ”ƒ โœ” ๐Ÿ“ฆ ๐Ÿ‘. - -/// - -## ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ“‡ / ๐Ÿ’— ๐Ÿ’ฒ - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿ”ข ๐ŸŽฏ โฎ๏ธ `Query` ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ โšซ๏ธ ๐Ÿ“จ ๐Ÿ“‡ ๐Ÿ’ฒ, โš–๏ธ ๐Ÿ™†โ€โ™€ ๐ŸŽ ๐ŸŒŒ, ๐Ÿ“จ ๐Ÿ’— ๐Ÿ’ฒ. - -๐Ÿ–ผ, ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ”ข `q` ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ˜‘ ๐Ÿ’— ๐Ÿ•ฐ ๐Ÿ“›, ๐Ÿ‘† ๐Ÿ’ช โœ: - -{* ../../docs_src/query_params_str_validations/tutorial011.py hl[9] *} - -โคด๏ธ, โฎ๏ธ ๐Ÿ“› ๐Ÿ’–: - -``` -http://localhost:8000/items/?q=foo&q=bar -``` - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ’— `q` *๐Ÿ”ข ๐Ÿ”ข'* ๐Ÿ’ฒ (`foo` & `bar`) ๐Ÿ `list` ๐Ÿ”˜ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, *๐Ÿ”ข ๐Ÿ”ข* `q`. - -, ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ“› ๐Ÿ”œ: - -```JSON -{ - "q": [ - "foo", - "bar" - ] -} -``` - -/// tip - -๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ”ข โฎ๏ธ ๐Ÿ†Ž `list`, ๐Ÿ’– ๐Ÿ–ผ ๐Ÿ”›, ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽฏ โš™๏ธ `Query`, โช โšซ๏ธ ๐Ÿ”œ ๐Ÿ”ฌ ๐Ÿ“จ ๐Ÿ’ช. - -/// - -๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿฉบ ๐Ÿ”œ โ„น โžก๏ธ, โœ” ๐Ÿ’— ๐Ÿ’ฒ: - - - -### ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ“‡ / ๐Ÿ’— ๐Ÿ’ฒ โฎ๏ธ ๐Ÿ”ข - -& ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ”ข `list` ๐Ÿ’ฒ ๐Ÿšฅ ๐Ÿ‘Œ ๐Ÿšš: - -{* ../../docs_src/query_params_str_validations/tutorial012.py hl[9] *} - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถ: - -``` -http://localhost:8000/items/ -``` - -๐Ÿ”ข `q` ๐Ÿ”œ: `["foo", "bar"]` & ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ”œ: - -```JSON -{ - "q": [ - "foo", - "bar" - ] -} -``` - -#### โš™๏ธ `list` - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `list` ๐Ÿ”— โ†ฉ๏ธ `List[str]` (โš–๏ธ `list[str]` ๐Ÿ 3๏ธโƒฃ.9๏ธโƒฃ โž•): - -{* ../../docs_src/query_params_str_validations/tutorial013.py hl[7] *} - -/// note - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ’ผ, FastAPI ๐Ÿ† ๐Ÿšซ โœ… ๐ŸŽš ๐Ÿ“‡. - -๐Ÿ–ผ, `List[int]` ๐Ÿ”œ โœ… (& ๐Ÿ“„) ๐Ÿ‘ˆ ๐ŸŽš ๐Ÿ“‡ ๐Ÿ”ข. โœ‹๏ธ `list` ๐Ÿ˜ž ๐Ÿšซ๐Ÿ”œ. - -/// - -## ๐Ÿ“ฃ ๐ŸŒ… ๐Ÿ—ƒ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐ŸŒ… โ„น ๐Ÿ”ƒ ๐Ÿ”ข. - -๐Ÿ‘ˆ โ„น ๐Ÿ”œ ๐Ÿ”Œ ๐Ÿ— ๐Ÿ—„ & โš™๏ธ ๐Ÿงพ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข & ๐Ÿ”ข ๐Ÿงฐ. - -/// note - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿงฐ 5๏ธโƒฃ๐Ÿ“† โœ”๏ธ ๐ŸŽ ๐ŸŽš ๐Ÿ—„ ๐Ÿ•โ€๐Ÿฆบ. - -๐Ÿ‘ซ ๐Ÿ’ช ๐Ÿšซ ๐ŸŽฆ ๐ŸŒ โž• โ„น ๐Ÿ“ฃ, ๐Ÿ‘ ๐ŸŒ… ๐Ÿ’ผ, โŒ โš’ โช ๐Ÿ“„ ๐Ÿ› ๏ธ. - -/// - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ `title`: - -{* ../../docs_src/query_params_str_validations/tutorial007.py hl[10] *} - -& `description`: - -{* ../../docs_src/query_params_str_validations/tutorial008.py hl[13] *} - -## ๐Ÿ“› ๐Ÿ”ข - -๐ŸŒˆ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ”ข `item-query`. - -๐Ÿ’–: - -``` -http://127.0.0.1:8000/items/?item-query=foobaritems -``` - -โœ‹๏ธ `item-query` ๐Ÿšซ โ˜‘ ๐Ÿ ๐Ÿ”ข ๐Ÿ“›. - -๐Ÿ” ๐Ÿ”œ `item_query`. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช โšซ๏ธ โšซ๏ธโ” `item-query`... - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ `alias`, & ๐Ÿ‘ˆ ๐Ÿ“› โšซ๏ธโ” ๐Ÿ”œ โš™๏ธ ๐Ÿ”Ž ๐Ÿ”ข ๐Ÿ’ฒ: - -{* ../../docs_src/query_params_str_validations/tutorial009.py hl[9] *} - -## ๐Ÿ˜› ๐Ÿ”ข - -๐Ÿ”œ โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’– ๐Ÿ‘‰ ๐Ÿ”ข ๐Ÿšซ๐Ÿ”œ. - -๐Ÿ‘† โœ”๏ธ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ“ค โช โ†ฉ๏ธ ๐Ÿ“ค ๐Ÿ‘ฉโ€๐Ÿ’ป โš™๏ธ โšซ๏ธ, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’š ๐Ÿฉบ ๐ŸŽฏ ๐ŸŽฆ โšซ๏ธ ๐Ÿ˜ข. - -โคด๏ธ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”ข `deprecated=True` `Query`: - -{* ../../docs_src/query_params_str_validations/tutorial010.py hl[18] *} - -๐Ÿฉบ ๐Ÿ”œ ๐ŸŽฆ โšซ๏ธ ๐Ÿ’– ๐Ÿ‘‰: - - - -## ๐Ÿšซ โšช๏ธโžก๏ธ ๐Ÿ—„ - -๐Ÿšซ ๐Ÿ”ข ๐Ÿ”ข โšช๏ธโžก๏ธ ๐Ÿ— ๐Ÿ—„ ๐Ÿ”— (& โžก๏ธ, โšช๏ธโžก๏ธ ๐Ÿง ๐Ÿงพ โš™๏ธ), โš’ ๐Ÿ”ข `include_in_schema` `Query` `False`: - -{* ../../docs_src/query_params_str_validations/tutorial014.py hl[10] *} - -## ๐ŸŒƒ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŒ– ๐Ÿ”ฌ & ๐Ÿ—ƒ ๐Ÿ‘† ๐Ÿ”ข. - -๐Ÿ’Š ๐Ÿ”ฌ & ๐Ÿ—ƒ: - -* `alias` -* `title` -* `description` -* `deprecated` - -๐Ÿ”ฌ ๐ŸŽฏ ๐ŸŽป: - -* `min_length` -* `max_length` -* `regex` - -๐Ÿ‘ซ ๐Ÿ–ผ ๐Ÿ‘† ๐Ÿ‘€ โ” ๐Ÿ“ฃ ๐Ÿ”ฌ `str` ๐Ÿ’ฒ. - -๐Ÿ‘€ โญ ๐Ÿ“ƒ ๐Ÿ‘€ โ” ๐Ÿ“ฃ ๐Ÿ”ฌ ๐ŸŽ ๐Ÿ†Ž, ๐Ÿ’– ๐Ÿ”ข. diff --git a/docs/em/docs/tutorial/query-params.md b/docs/em/docs/tutorial/query-params.md deleted file mode 100644 index 5c8d868a9..000000000 --- a/docs/em/docs/tutorial/query-params.md +++ /dev/null @@ -1,187 +0,0 @@ -# ๐Ÿ”ข ๐Ÿ”ข - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“ฃ ๐ŸŽ ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ• โžก ๐Ÿ”ข, ๐Ÿ‘ซ ๐Ÿ” ๐Ÿ”ฌ "๐Ÿ”ข" ๐Ÿ”ข. - -{* ../../docs_src/query_params/tutorial001.py hl[9] *} - -๐Ÿ”ข โš’ ๐Ÿ”‘-๐Ÿ’ฒ ๐Ÿ‘ซ ๐Ÿ‘ˆ ๐Ÿšถ โฎ๏ธ `?` ๐Ÿ“›, ๐ŸŽ `&` ๐Ÿฆน. - -๐Ÿ–ผ, ๐Ÿ“›: - -``` -http://127.0.0.1:8000/items/?skip=0&limit=10 -``` - -...๐Ÿ”ข ๐Ÿ”ข: - -* `skip`: โฎ๏ธ ๐Ÿ’ฒ `0` -* `limit`: โฎ๏ธ ๐Ÿ’ฒ `10` - -๐Ÿ‘ซ ๐Ÿ• ๐Ÿ“›, ๐Ÿ‘ซ "๐Ÿ›Ž" ๐ŸŽป. - -โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“ฃ ๐Ÿ‘ซ โฎ๏ธ ๐Ÿ ๐Ÿ†Ž (๐Ÿ–ผ ๐Ÿ”›, `int`), ๐Ÿ‘ซ ๐Ÿ—œ ๐Ÿ‘ˆ ๐Ÿ†Ž & โœ” ๐Ÿ›ก โšซ๏ธ. - -๐ŸŒ ๐ŸŽ ๐Ÿ› ๏ธ ๐Ÿ‘ˆ โš– โžก ๐Ÿ”ข โœ” ๐Ÿ”ข ๐Ÿ”ข: - -* ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ•โ€๐Ÿฆบ (๐ŸŽฒ) -* ๐Ÿ’ฝ "โœ" -* ๐Ÿ’ฝ ๐Ÿ”ฌ -* ๐Ÿง ๐Ÿงพ - -## ๐Ÿ”ข - -๐Ÿ”ข ๐Ÿ”ข ๐Ÿšซ ๐Ÿ”ง ๐Ÿ• โžก, ๐Ÿ‘ซ ๐Ÿ’ช ๐Ÿ“ฆ & ๐Ÿ’ช โœ”๏ธ ๐Ÿ”ข ๐Ÿ’ฒ. - -๐Ÿ–ผ ๐Ÿ”› ๐Ÿ‘ซ โœ”๏ธ ๐Ÿ”ข ๐Ÿ’ฒ `skip=0` & `limit=10`. - -, ๐Ÿ”œ ๐Ÿ“›: - -``` -http://127.0.0.1:8000/items/ -``` - -๐Ÿ”œ ๐ŸŽ ๐Ÿ”œ: - -``` -http://127.0.0.1:8000/items/?skip=0&limit=10 -``` - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถ, ๐Ÿ–ผ: - -``` -http://127.0.0.1:8000/items/?skip=20 -``` - -๐Ÿ”ข ๐Ÿ’ฒ ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ”œ: - -* `skip=20`: โ†ฉ๏ธ ๐Ÿ‘† โš’ โšซ๏ธ ๐Ÿ“› -* `limit=10`: โ†ฉ๏ธ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ’ฒ - -## ๐Ÿ“ฆ ๐Ÿ”ข - -๐ŸŽ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“ฆ ๐Ÿ”ข ๐Ÿ”ข, โš’ ๐Ÿ‘ซ ๐Ÿ”ข `None`: - -{* ../../docs_src/query_params/tutorial002.py hl[9] *} - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ”ข ๐Ÿ”ข `q` ๐Ÿ”œ ๐Ÿ“ฆ, & ๐Ÿ”œ `None` ๐Ÿ”ข. - -/// check - -๐Ÿ‘€ ๐Ÿ‘ˆ **FastAPI** ๐Ÿ™ƒ ๐Ÿฅƒ ๐Ÿ‘€ ๐Ÿ‘ˆ โžก ๐Ÿ”ข `item_id` โžก ๐Ÿ”ข & `q` ๐Ÿšซ,, โšซ๏ธ ๐Ÿ”ข ๐Ÿ”ข. - -/// - -## ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ†Ž ๐Ÿ› ๏ธ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ `bool` ๐Ÿ†Ž, & ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ—œ: - -{* ../../docs_src/query_params/tutorial003.py hl[9] *} - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿšถ: - -``` -http://127.0.0.1:8000/items/foo?short=1 -``` - -โš–๏ธ - -``` -http://127.0.0.1:8000/items/foo?short=True -``` - -โš–๏ธ - -``` -http://127.0.0.1:8000/items/foo?short=true -``` - -โš–๏ธ - -``` -http://127.0.0.1:8000/items/foo?short=on -``` - -โš–๏ธ - -``` -http://127.0.0.1:8000/items/foo?short=yes -``` - -โš–๏ธ ๐Ÿ™† ๐ŸŽ ๐Ÿ’ผ ๐Ÿ“ˆ (๐Ÿ” , ๐Ÿฅ‡ ๐Ÿ”ค ๐Ÿ” , โ™’๏ธ), ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ”ข `short` โฎ๏ธ `bool` ๐Ÿ’ฒ `True`. โช `False`. - - -## ๐Ÿ’— โžก & ๐Ÿ”ข ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ’— โžก ๐Ÿ”ข & ๐Ÿ”ข ๐Ÿ”ข ๐ŸŽ ๐Ÿ•ฐ, **FastAPI** ๐Ÿ’ญ โ” โ”. - -& ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿ“ฃ ๐Ÿ‘ซ ๐Ÿ™† ๐ŸŽฏ โœ”. - -๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ”ฌ ๐Ÿ“›: - -{* ../../docs_src/query_params/tutorial004.py hl[8,10] *} - -## โœ” ๐Ÿ”ข ๐Ÿ”ข - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ’ฒ ๐Ÿšซ-โžก ๐Ÿ”ข (๐Ÿ”œ, ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ•ด ๐Ÿ‘€ ๐Ÿ”ข ๐Ÿ”ข), โคด๏ธ โšซ๏ธ ๐Ÿšซ โœ”. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’š ๐Ÿšฎ ๐ŸŽฏ ๐Ÿ’ฒ โœ‹๏ธ โš’ โšซ๏ธ ๐Ÿ“ฆ, โš’ ๐Ÿ”ข `None`. - -โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’š โš’ ๐Ÿ”ข ๐Ÿ”ข โœ”, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšซ ๐Ÿ“ฃ ๐Ÿ™† ๐Ÿ”ข ๐Ÿ’ฒ: - -{* ../../docs_src/query_params/tutorial005.py hl[6:7] *} - -๐Ÿ“ฅ ๐Ÿ”ข ๐Ÿ”ข `needy` โœ” ๐Ÿ”ข ๐Ÿ”ข ๐Ÿ†Ž `str`. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“‚ ๐Ÿ‘† ๐Ÿ–ฅ ๐Ÿ“› ๐Ÿ’–: - -``` -http://127.0.0.1:8000/items/foo-item -``` - -...๐Ÿต โŽ โœ” ๐Ÿ”ข `needy`, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โŒ ๐Ÿ’–: - -```JSON -{ - "detail": [ - { - "loc": [ - "query", - "needy" - ], - "msg": "field required", - "type": "value_error.missing" - } - ] -} -``` - -`needy` ๐Ÿšš ๐Ÿ”ข, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช โš’ โšซ๏ธ ๐Ÿ“›: - -``` -http://127.0.0.1:8000/items/foo-item?needy=sooooneedy -``` - -...๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ‘ท: - -```JSON -{ - "item_id": "foo-item", - "needy": "sooooneedy" -} -``` - -& โ†—๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ”ข โœ”, โœ”๏ธ ๐Ÿ”ข ๐Ÿ’ฒ, & ๐Ÿ• ๐Ÿ“ฆ: - -{* ../../docs_src/query_params/tutorial006.py hl[10] *} - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ“ค 3๏ธโƒฃ ๐Ÿ”ข ๐Ÿ”ข: - -* `needy`, โœ” `str`. -* `skip`, `int` โฎ๏ธ ๐Ÿ”ข ๐Ÿ’ฒ `0`. -* `limit`, ๐Ÿ“ฆ `int`. - -/// tip - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Enum`โ“‚ ๐ŸŽ ๐ŸŒŒ โฎ๏ธ [โžก ๐Ÿ”ข](path-params.md#_7){.internal-link target=_blank}. - -/// diff --git a/docs/em/docs/tutorial/request-files.md b/docs/em/docs/tutorial/request-files.md deleted file mode 100644 index c3bdeafd4..000000000 --- a/docs/em/docs/tutorial/request-files.md +++ /dev/null @@ -1,172 +0,0 @@ -# ๐Ÿ“จ ๐Ÿ“ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ“ ๐Ÿ“‚ ๐Ÿ‘ฉโ€๐Ÿ’ป โš™๏ธ `File`. - -/// info - -๐Ÿ“จ ๐Ÿ“‚ ๐Ÿ“, ๐Ÿฅ‡ โŽ `python-multipart`. - -๐Ÿคถ โ“‚. `pip install python-multipart`. - -๐Ÿ‘‰ โ†ฉ๏ธ ๐Ÿ“‚ ๐Ÿ“ ๐Ÿ“จ "๐Ÿ“จ ๐Ÿ’ฝ". - -/// - -## ๐Ÿ—„ `File` - -๐Ÿ—„ `File` & `UploadFile` โšช๏ธโžก๏ธ `fastapi`: - -{* ../../docs_src/request_files/tutorial001.py hl[1] *} - -## ๐Ÿ”ฌ `File` ๐Ÿ”ข - -โœ ๐Ÿ“ ๐Ÿ”ข ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”œ `Body` โš–๏ธ `Form`: - -{* ../../docs_src/request_files/tutorial001.py hl[7] *} - -/// info - -`File` ๐ŸŽ“ ๐Ÿ‘ˆ ๐Ÿ˜– ๐Ÿ”— โšช๏ธโžก๏ธ `Form`. - -โœ‹๏ธ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ—„ `Query`, `Path`, `File` & ๐ŸŽ โšช๏ธโžก๏ธ `fastapi`, ๐Ÿ‘ˆ ๐Ÿค™ ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“จ ๐ŸŽ ๐ŸŽ“. - -/// - -/// tip - -๐Ÿ“ฃ ๐Ÿ“ ๐Ÿ’ช, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `File`, โ†ฉ๏ธ โช ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿ”ข โš–๏ธ ๐Ÿ’ช (๐ŸŽป) ๐Ÿ”ข. - -/// - -๐Ÿ“ ๐Ÿ”œ ๐Ÿ“‚ "๐Ÿ“จ ๐Ÿ’ฝ". - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ฃ ๐Ÿ†Ž ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ”ข `bytes`, **FastAPI** ๐Ÿ”œ โœ ๐Ÿ“ ๐Ÿ‘† & ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ ๐ŸŽš `bytes`. - -โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ ๐ŸŽ‚ ๐ŸŽš ๐Ÿ”œ ๐Ÿช ๐Ÿ’พ. ๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ‘ท ๐Ÿ‘ ๐Ÿคช ๐Ÿ“. - -โœ‹๏ธ ๐Ÿ“ค ๐Ÿ“š ๐Ÿ’ผ โ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ฐ โšช๏ธโžก๏ธ โš™๏ธ `UploadFile`. - -## ๐Ÿ“ ๐Ÿ”ข โฎ๏ธ `UploadFile` - -๐Ÿ”ฌ ๐Ÿ“ ๐Ÿ”ข โฎ๏ธ ๐Ÿ†Ž `UploadFile`: - -{* ../../docs_src/request_files/tutorial001.py hl[12] *} - -โš™๏ธ `UploadFile` โœ”๏ธ ๐Ÿ“š ๐Ÿ“ˆ ๐Ÿคญ `bytes`: - -* ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ โš™๏ธ `File()` ๐Ÿ”ข ๐Ÿ’ฒ ๐Ÿ”ข. -* โšซ๏ธ โš™๏ธ "๐Ÿงต" ๐Ÿ“: - * ๐Ÿ“ ๐Ÿช ๐Ÿ’พ ๐Ÿ†™ ๐Ÿ”† ๐Ÿ“ ๐Ÿ“‰, & โฎ๏ธ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘‰ ๐Ÿ“‰ โšซ๏ธ ๐Ÿ”œ ๐Ÿช ๐Ÿ’พ. -* ๐Ÿ‘‰ โ›“ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘ท ๐Ÿ‘ โญ• ๐Ÿ“ ๐Ÿ’– ๐Ÿ–ผ, ๐Ÿ“น, โญ• ๐Ÿ’ฑ, โ™’๏ธ. ๐Ÿต ๐Ÿ˜ฉ ๐ŸŒ ๐Ÿ’พ. -* ๐Ÿ‘† ๐Ÿ’ช ๐Ÿคš ๐Ÿ—ƒ โšช๏ธโžก๏ธ ๐Ÿ“‚ ๐Ÿ“. -* โšซ๏ธ โœ”๏ธ ๐Ÿ“-๐Ÿ’– `async` ๐Ÿ”ข. -* โšซ๏ธ ๐ŸŽฆ โ˜‘ ๐Ÿ `SpooledTemporaryFile` ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”— ๐ŸŽ ๐Ÿ—ƒ ๐Ÿ‘ˆ โŒ› ๐Ÿ“-๐Ÿ’– ๐ŸŽš. - -### `UploadFile` - -`UploadFile` โœ”๏ธ ๐Ÿ“„ ๐Ÿ”ข: - -* `filename`: `str` โฎ๏ธ โฎ๏ธ ๐Ÿ“ ๐Ÿ“› ๐Ÿ‘ˆ ๐Ÿ“‚ (โœ… `myimage.jpg`). -* `content_type`: `str` โฎ๏ธ ๐ŸŽš ๐Ÿ†Ž (๐Ÿ“ ๐Ÿ†Ž / ๐Ÿ“ป ๐Ÿ†Ž) (โœ… `image/jpeg`). -* `file`: `SpooledTemporaryFile` ( ๐Ÿ“-๐Ÿ’– ๐ŸŽš). ๐Ÿ‘‰ โ˜‘ ๐Ÿ ๐Ÿ“ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ”— ๐ŸŽ ๐Ÿ”ข โš–๏ธ ๐Ÿ—ƒ ๐Ÿ‘ˆ โŒ› "๐Ÿ“-๐Ÿ’–" ๐ŸŽš. - -`UploadFile` โœ”๏ธ ๐Ÿ“„ `async` ๐Ÿ‘ฉโ€๐Ÿ”ฌ. ๐Ÿ‘ซ ๐ŸŒ ๐Ÿค™ ๐Ÿ”— ๐Ÿ“ ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ”˜ (โš™๏ธ ๐Ÿ”— `SpooledTemporaryFile`). - -* `write(data)`: โœ `data` (`str` โš–๏ธ `bytes`) ๐Ÿ“. -* `read(size)`: โœ `size` (`int`) ๐Ÿ”ข/๐Ÿฆน ๐Ÿ“. -* `seek(offset)`: ๐Ÿšถ ๐Ÿ”ข ๐Ÿง˜ `offset` (`int`) ๐Ÿ“. - * ๐Ÿคถ โ“‚., `await myfile.seek(0)` ๐Ÿ”œ ๐Ÿšถ โ–ถ๏ธ ๐Ÿ“. - * ๐Ÿ‘‰ โœด๏ธ โš  ๐Ÿšฅ ๐Ÿ‘† ๐Ÿƒ `await myfile.read()` ๐Ÿ• & โคด๏ธ ๐Ÿ’ช โœ ๐ŸŽš ๐Ÿ”„. -* `close()`: ๐Ÿ” ๐Ÿ“. - -๐ŸŒ ๐Ÿ‘ซ ๐Ÿ‘ฉโ€๐Ÿ”ฌ `async` ๐Ÿ‘ฉโ€๐Ÿ”ฌ, ๐Ÿ‘† ๐Ÿ’ช "โŒ›" ๐Ÿ‘ซ. - -๐Ÿ–ผ, ๐Ÿ”˜ `async` *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ‘† ๐Ÿ’ช ๐Ÿคš ๐ŸŽš โฎ๏ธ: - -```Python -contents = await myfile.read() -``` - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ”˜ ๐Ÿ˜ `def` *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ” `UploadFile.file` ๐Ÿ”—, ๐Ÿ–ผ: - -```Python -contents = myfile.file.read() -``` - -/// note | `async` ๐Ÿ“ก โ„น - -๐Ÿ•โ” ๐Ÿ‘† โš™๏ธ `async` ๐Ÿ‘ฉโ€๐Ÿ”ฌ, **FastAPI** ๐Ÿƒ ๐Ÿ“ ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿงต & โŒ› ๐Ÿ‘ซ. - -/// - -/// note | ๐Ÿ’ƒ ๐Ÿ“ก โ„น - -**FastAPI**'โ“‚ `UploadFile` ๐Ÿ˜– ๐Ÿ”— โšช๏ธโžก๏ธ **๐Ÿ’ƒ**'โ“‚ `UploadFile`, โœ‹๏ธ ๐Ÿšฎ ๐Ÿ’ช ๐Ÿ• โš’ โšซ๏ธ ๐Ÿ”— โฎ๏ธ **Pydantic** & ๐ŸŽ ๐Ÿ• FastAPI. - -/// - -## โšซ๏ธโ” "๐Ÿ“จ ๐Ÿ’ฝ" - -๐ŸŒŒ ๐Ÿ•ธ ๐Ÿ“จ (`
`) ๐Ÿ“จ ๐Ÿ’ฝ ๐Ÿ’ฝ ๐Ÿ›Ž โš™๏ธ "๐ŸŽ" ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“Š, โšซ๏ธ ๐ŸŽ โšช๏ธโžก๏ธ ๐ŸŽป. - -**FastAPI** ๐Ÿ”œ โš’ ๐Ÿ’ญ โœ ๐Ÿ‘ˆ ๐Ÿ“Š โšช๏ธโžก๏ธ โ–ถ๏ธ๏ธ ๐Ÿฅ‰ โ†ฉ๏ธ ๐ŸŽป. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ“Š โšช๏ธโžก๏ธ ๐Ÿ“จ ๐Ÿ›Ž ๐Ÿ—œ โš™๏ธ "๐Ÿ“ป ๐Ÿ†Ž" `application/x-www-form-urlencoded` ๐Ÿ•โ” โšซ๏ธ ๐Ÿšซ ๐Ÿ”Œ ๐Ÿ“. - -โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ“จ ๐Ÿ”Œ ๐Ÿ“, โšซ๏ธ ๐Ÿ—œ `multipart/form-data`. ๐Ÿšฅ ๐Ÿ‘† โš™๏ธ `File`, **FastAPI** ๐Ÿ”œ ๐Ÿ’ญ โšซ๏ธ โœ”๏ธ ๐Ÿคš ๐Ÿ“ โšช๏ธโžก๏ธ โ˜‘ ๐Ÿ• ๐Ÿ’ช. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โœ ๐ŸŒ– ๐Ÿ”ƒ ๐Ÿ‘‰ ๐Ÿ”ข & ๐Ÿ“จ ๐Ÿ‘, ๐Ÿ‘ณ ๐Ÿ‡ ๐Ÿ•ธ ๐Ÿฉบ POST. - -/// - -/// warning - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ’— `File` & `Form` ๐Ÿ”ข *โžก ๐Ÿ› ๏ธ*, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšซ ๐Ÿ“ฃ `Body` ๐Ÿ‘ ๐Ÿ‘ˆ ๐Ÿ‘† โŒ› ๐Ÿ“จ ๐ŸŽป, ๐Ÿ“จ ๐Ÿ”œ โœ”๏ธ ๐Ÿ’ช ๐Ÿ—œ โš™๏ธ `multipart/form-data` โ†ฉ๏ธ `application/json`. - -๐Ÿ‘‰ ๐Ÿšซ ๐Ÿšซ **FastAPI**, โšซ๏ธ ๐Ÿ• ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ› ๏ธ. - -/// - -## ๐Ÿ“ฆ ๐Ÿ“ ๐Ÿ“‚ - -๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ“ ๐Ÿ“ฆ โš™๏ธ ๐Ÿฉ ๐Ÿ†Ž โœ & โš’ ๐Ÿ”ข ๐Ÿ’ฒ `None`: - -{* ../../docs_src/request_files/tutorial001_02.py hl[9,17] *} - -## `UploadFile` โฎ๏ธ ๐ŸŒ– ๐Ÿ—ƒ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `File()` โฎ๏ธ `UploadFile`, ๐Ÿ–ผ, โš’ ๐ŸŒ– ๐Ÿ—ƒ: - -{* ../../docs_src/request_files/tutorial001_03.py hl[13] *} - -## ๐Ÿ’— ๐Ÿ“ ๐Ÿ“‚ - -โšซ๏ธ ๐Ÿ’ช ๐Ÿ“‚ ๐Ÿ“š ๐Ÿ“ ๐ŸŽ ๐Ÿ•ฐ. - -๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ‘จโ€๐Ÿ’ผ ๐ŸŽ "๐Ÿ“จ ๐Ÿ‘" ๐Ÿ“จ โš™๏ธ "๐Ÿ“จ ๐Ÿ’ฝ". - -โš™๏ธ ๐Ÿ‘ˆ, ๐Ÿ“ฃ ๐Ÿ“‡ `bytes` โš–๏ธ `UploadFile`: - -{* ../../docs_src/request_files/tutorial002.py hl[10,15] *} - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ, ๐Ÿ“ฃ, `list` `bytes` โš–๏ธ `UploadFile`โ“‚. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.responses import HTMLResponse`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.responses` `fastapi.responses` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -### ๐Ÿ’— ๐Ÿ“ ๐Ÿ“‚ โฎ๏ธ ๐ŸŒ– ๐Ÿ—ƒ - -& ๐ŸŽ ๐ŸŒŒ โญ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `File()` โš’ ๐ŸŒ– ๐Ÿ”ข, `UploadFile`: - -{* ../../docs_src/request_files/tutorial003.py hl[18] *} - -## ๐ŸŒƒ - -โš™๏ธ `File`, `bytes`, & `UploadFile` ๐Ÿ“ฃ ๐Ÿ“ ๐Ÿ“‚ ๐Ÿ“จ, ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ’ฝ. diff --git a/docs/em/docs/tutorial/request-forms-and-files.md b/docs/em/docs/tutorial/request-forms-and-files.md deleted file mode 100644 index 680b1a96a..000000000 --- a/docs/em/docs/tutorial/request-forms-and-files.md +++ /dev/null @@ -1,37 +0,0 @@ -# ๐Ÿ“จ ๐Ÿ“จ & ๐Ÿ“ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ“ & ๐Ÿ“จ ๐Ÿ‘ ๐ŸŽ ๐Ÿ•ฐ โš™๏ธ `File` & `Form`. - -/// info - -๐Ÿ“จ ๐Ÿ“‚ ๐Ÿ“ & /โš–๏ธ ๐Ÿ“จ ๐Ÿ“Š, ๐Ÿฅ‡ โŽ `python-multipart`. - -๐Ÿคถ โ“‚. `pip install python-multipart`. - -/// - -## ๐Ÿ—„ `File` & `Form` - -{* ../../docs_src/request_forms_and_files/tutorial001.py hl[1] *} - -## ๐Ÿ”ฌ `File` & `Form` ๐Ÿ”ข - -โœ ๐Ÿ“ & ๐Ÿ“จ ๐Ÿ”ข ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”œ `Body` โš–๏ธ `Query`: - -{* ../../docs_src/request_forms_and_files/tutorial001.py hl[8] *} - -๐Ÿ“ & ๐Ÿ“จ ๐Ÿ‘ ๐Ÿ”œ ๐Ÿ“‚ ๐Ÿ“จ ๐Ÿ“Š & ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“ & ๐Ÿ“จ ๐Ÿ‘. - -& ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ“ `bytes` & `UploadFile`. - -/// warning - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ’— `File` & `Form` ๐Ÿ”ข *โžก ๐Ÿ› ๏ธ*, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšซ ๐Ÿ“ฃ `Body` ๐Ÿ‘ ๐Ÿ‘ˆ ๐Ÿ‘† โŒ› ๐Ÿ“จ ๐ŸŽป, ๐Ÿ“จ ๐Ÿ”œ โœ”๏ธ ๐Ÿ’ช ๐Ÿ—œ โš™๏ธ `multipart/form-data` โ†ฉ๏ธ `application/json`. - -๐Ÿ‘‰ ๐Ÿšซ ๐Ÿšซ **FastAPI**, โšซ๏ธ ๐Ÿ• ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ› ๏ธ. - -/// - -## ๐ŸŒƒ - -โš™๏ธ `File` & `Form` ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ’ฝ & ๐Ÿ“ ๐ŸŽ ๐Ÿ“จ. diff --git a/docs/em/docs/tutorial/request-forms.md b/docs/em/docs/tutorial/request-forms.md deleted file mode 100644 index 1cc1ea5dc..000000000 --- a/docs/em/docs/tutorial/request-forms.md +++ /dev/null @@ -1,69 +0,0 @@ -# ๐Ÿ“จ ๐Ÿ’ฝ - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ‘ โ†ฉ๏ธ ๐ŸŽป, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Form`. - -/// info - -โš™๏ธ ๐Ÿ“จ, ๐Ÿฅ‡ โŽ `python-multipart`. - -๐Ÿคถ โ“‚. `pip install python-multipart`. - -/// - -## ๐Ÿ—„ `Form` - -๐Ÿ—„ `Form` โšช๏ธโžก๏ธ `fastapi`: - -{* ../../docs_src/request_forms/tutorial001.py hl[1] *} - -## ๐Ÿ”ฌ `Form` ๐Ÿ”ข - -โœ ๐Ÿ“จ ๐Ÿ”ข ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”œ `Body` โš–๏ธ `Query`: - -{* ../../docs_src/request_forms/tutorial001.py hl[7] *} - -๐Ÿ–ผ, 1๏ธโƒฃ ๐ŸŒŒ Oauth2๏ธโƒฃ ๐Ÿ”ง ๐Ÿ’ช โš™๏ธ (๐Ÿค™ "๐Ÿ” ๐Ÿ’ง") โšซ๏ธ โœ” ๐Ÿ“จ `username` & `password` ๐Ÿ“จ ๐Ÿ‘. - -๐Ÿ”Œ ๐Ÿšš ๐Ÿ‘ โšซ๏ธโ” ๐Ÿ“› `username` & `password`, & ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ‘, ๐Ÿšซ ๐ŸŽป. - -โฎ๏ธ `Form` ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐ŸŽ ๐Ÿ“ณ โฎ๏ธ `Body` (& `Query`, `Path`, `Cookie`), ๐Ÿ”Œ ๐Ÿ”ฌ, ๐Ÿ–ผ, ๐Ÿ“› (โœ… `user-name` โ†ฉ๏ธ `username`), โ™’๏ธ. - -/// info - -`Form` ๐ŸŽ“ ๐Ÿ‘ˆ ๐Ÿ˜– ๐Ÿ”— โšช๏ธโžก๏ธ `Body`. - -/// - -/// tip - -๐Ÿ“ฃ ๐Ÿ“จ ๐Ÿ’ช, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `Form` ๐ŸŽฏ, โ†ฉ๏ธ ๐Ÿต โšซ๏ธ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿ”ข โš–๏ธ ๐Ÿ’ช (๐ŸŽป) ๐Ÿ”ข. - -/// - -## ๐Ÿ”ƒ "๐Ÿ“จ ๐Ÿ‘" - -๐ŸŒŒ ๐Ÿ•ธ ๐Ÿ“จ (`
`) ๐Ÿ“จ ๐Ÿ’ฝ ๐Ÿ’ฝ ๐Ÿ›Ž โš™๏ธ "๐ŸŽ" ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ“Š, โšซ๏ธ ๐ŸŽ โšช๏ธโžก๏ธ ๐ŸŽป. - -**FastAPI** ๐Ÿ”œ โš’ ๐Ÿ’ญ โœ ๐Ÿ‘ˆ ๐Ÿ“Š โšช๏ธโžก๏ธ โ–ถ๏ธ๏ธ ๐Ÿฅ‰ โ†ฉ๏ธ ๐ŸŽป. - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ“Š โšช๏ธโžก๏ธ ๐Ÿ“จ ๐Ÿ›Ž ๐Ÿ—œ โš™๏ธ "๐Ÿ“ป ๐Ÿ†Ž" `application/x-www-form-urlencoded`. - -โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ“จ ๐Ÿ”Œ ๐Ÿ“, โšซ๏ธ ๐Ÿ—œ `multipart/form-data`. ๐Ÿ‘† ๐Ÿ”œ โœ ๐Ÿ”ƒ ๐Ÿšš ๐Ÿ“ โญ ๐Ÿ“ƒ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โœ ๐ŸŒ– ๐Ÿ”ƒ ๐Ÿ‘‰ ๐Ÿ”ข & ๐Ÿ“จ ๐Ÿ‘, ๐Ÿ‘ณ ๐Ÿ‡ ๐Ÿ•ธ ๐Ÿฉบ POST. - -/// - -/// warning - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ’— `Form` ๐Ÿ”ข *โžก ๐Ÿ› ๏ธ*, โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšซ ๐Ÿ“ฃ `Body` ๐Ÿ‘ ๐Ÿ‘ˆ ๐Ÿ‘† โŒ› ๐Ÿ“จ ๐ŸŽป, ๐Ÿ“จ ๐Ÿ”œ โœ”๏ธ ๐Ÿ’ช ๐Ÿ—œ โš™๏ธ `application/x-www-form-urlencoded` โ†ฉ๏ธ `application/json`. - -๐Ÿ‘‰ ๐Ÿšซ ๐Ÿšซ **FastAPI**, โšซ๏ธ ๐Ÿ• ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ› ๏ธ. - -/// - -## ๐ŸŒƒ - -โš™๏ธ `Form` ๐Ÿ“ฃ ๐Ÿ“จ ๐Ÿ’ฝ ๐Ÿ”ข ๐Ÿ”ข. diff --git a/docs/em/docs/tutorial/response-model.md b/docs/em/docs/tutorial/response-model.md deleted file mode 100644 index 477376458..000000000 --- a/docs/em/docs/tutorial/response-model.md +++ /dev/null @@ -1,340 +0,0 @@ -# ๐Ÿ“จ ๐Ÿท - ๐Ÿ“จ ๐Ÿ†Ž - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ†Ž โš™๏ธ ๐Ÿ“จ โœ *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* **๐Ÿ“จ ๐Ÿ†Ž**. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ **๐Ÿ†Ž โœ** ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ”ข ๐Ÿ’ฝ ๐Ÿ”ข **๐Ÿ”ข**, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ Pydantic ๐Ÿท, ๐Ÿ“‡, ๐Ÿ“–, ๐Ÿ“Š ๐Ÿ’ฒ ๐Ÿ’– ๐Ÿ”ข, ๐ŸŽป, โ™’๏ธ. - -{* ../../docs_src/response_model/tutorial001_01.py hl[18,23] *} - -FastAPI ๐Ÿ”œ โš™๏ธ ๐Ÿ‘‰ ๐Ÿ“จ ๐Ÿ†Ž: - -* **โœ”** ๐Ÿ“จ ๐Ÿ’ฝ. - * ๐Ÿšฅ ๐Ÿ’ฝ โŒ (โœ… ๐Ÿ‘† โŒ ๐Ÿ‘), โšซ๏ธ โ›“ ๐Ÿ‘ˆ *๐Ÿ‘†* ๐Ÿ“ฑ ๐Ÿ“Ÿ ๐Ÿ’”, ๐Ÿšซ ๐Ÿ›ฌ โšซ๏ธโ” โšซ๏ธ ๐Ÿ”œ, & โšซ๏ธ ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ’ฝ โŒ โ†ฉ๏ธ ๐Ÿ›ฌ โŒ ๐Ÿ’ฝ. ๐Ÿ‘‰ ๐ŸŒŒ ๐Ÿ‘† & ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ช ๐ŸŽฏ ๐Ÿ‘ˆ ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ’ฝ & ๐Ÿ’ฝ ๐Ÿ’  ๐Ÿ“ˆ. -* ๐Ÿšฎ **๐ŸŽป ๐Ÿ”—** ๐Ÿ“จ, ๐Ÿ—„ *โžก ๐Ÿ› ๏ธ*. - * ๐Ÿ‘‰ ๐Ÿ”œ โš™๏ธ **๐Ÿง ๐Ÿฉบ**. - * โšซ๏ธ ๐Ÿ”œ โš™๏ธ ๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Ÿ โšก ๐Ÿงฐ. - -โœ‹๏ธ ๐Ÿ† ๐Ÿฅˆ: - -* โšซ๏ธ ๐Ÿ”œ **๐Ÿ“‰ & โ›ฝ** ๐Ÿ”ข ๐Ÿ“Š โšซ๏ธโ” ๐Ÿ”ฌ ๐Ÿ“จ ๐Ÿ†Ž. - * ๐Ÿ‘‰ โœด๏ธ โš  **๐Ÿ’‚โ€โ™‚**, ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŒ… ๐Ÿ‘ˆ ๐Ÿ”›. - -## `response_model` ๐Ÿ”ข - -๐Ÿ“ค ๐Ÿ’ผ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ’ช โš–๏ธ ๐Ÿ’š ๐Ÿ“จ ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿšซ โšซ๏ธโ” โšซ๏ธโ” ๐Ÿ†Ž ๐Ÿ“ฃ. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š **๐Ÿ“จ ๐Ÿ“–** โš–๏ธ ๐Ÿ’ฝ ๐ŸŽš, โœ‹๏ธ **๐Ÿ“ฃ โšซ๏ธ Pydantic ๐Ÿท**. ๐Ÿ‘‰ ๐ŸŒŒ Pydantic ๐Ÿท ๐Ÿ”œ ๐ŸŒ ๐Ÿ’ฝ ๐Ÿงพ, ๐Ÿ”ฌ, โ™’๏ธ. ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ“จ (โœ… ๐Ÿ“– โš–๏ธ ๐Ÿ’ฝ ๐ŸŽš). - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšฎ ๐Ÿ“จ ๐Ÿ†Ž โœ, ๐Ÿงฐ & ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ”œ ๐Ÿ˜ญ โฎ๏ธ (โ˜‘) โŒ ๐Ÿ’ฌ ๐Ÿ‘† ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ›ฌ ๐Ÿ†Ž (โœ…#๏ธโƒฃ) ๐Ÿ‘ˆ ๐ŸŽ โšช๏ธโžก๏ธ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ“ฃ (โœ… Pydantic ๐Ÿท). - -๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* ๐Ÿ”ข `response_model` โ†ฉ๏ธ ๐Ÿ“จ ๐Ÿ†Ž. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `response_model` ๐Ÿ”ข ๐Ÿ™† *โžก ๐Ÿ› ๏ธ*: - -* `@app.get()` -* `@app.post()` -* `@app.put()` -* `@app.delete()` -* โ™’๏ธ. - -{* ../../docs_src/response_model/tutorial001.py hl[17,22,24:27] *} - -/// note - -๐Ÿ‘€ ๐Ÿ‘ˆ `response_model` ๐Ÿ”ข "๐Ÿ‘จโ€๐ŸŽจ" ๐Ÿ‘ฉโ€๐Ÿ”ฌ (`get`, `post`, โ™’๏ธ). ๐Ÿšซ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, ๐Ÿ’– ๐ŸŒ ๐Ÿ”ข & ๐Ÿ’ช. - -/// - -`response_model` ๐Ÿ“จ ๐ŸŽ ๐Ÿ†Ž ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“ฃ Pydantic ๐Ÿท ๐Ÿ‘,, โšซ๏ธ ๐Ÿ’ช Pydantic ๐Ÿท, โœ‹๏ธ โšซ๏ธ ๐Ÿ’ช, โœ… `list` Pydantic ๐Ÿท, ๐Ÿ’– `List[Item]`. - -FastAPI ๐Ÿ”œ โš™๏ธ ๐Ÿ‘‰ `response_model` ๐ŸŒ ๐Ÿ’ฝ ๐Ÿงพ, ๐Ÿ”ฌ, โ™’๏ธ. & **๐Ÿ—œ & โ›ฝ ๐Ÿ”ข ๐Ÿ“Š** ๐Ÿšฎ ๐Ÿ†Ž ๐Ÿ“„. - -/// tip - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ โš  ๐Ÿ†Ž โœ… ๐Ÿ‘† ๐Ÿ‘จโ€๐ŸŽจ, โœ, โ™’๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿ“จ ๐Ÿ†Ž `Any`. - -๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ฌ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ˜ซ ๐Ÿ›ฌ ๐Ÿ•ณ. โœ‹๏ธ FastAPI ๐Ÿ”œ ๐Ÿ’ฝ ๐Ÿงพ, ๐Ÿ”ฌ, ๐Ÿ–ฅ, โ™’๏ธ. โฎ๏ธ `response_model`. - -/// - -### `response_model` ๐Ÿ“ซ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ฃ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ“จ ๐Ÿ†Ž & `response_model`, `response_model` ๐Ÿ”œ โœŠ ๐Ÿ“ซ & โš™๏ธ FastAPI. - -๐Ÿ‘‰ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ โ˜‘ ๐Ÿ†Ž โœ ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ›ฌ ๐Ÿ†Ž ๐ŸŽ ๐ŸŒ˜ ๐Ÿ“จ ๐Ÿท, โš™๏ธ ๐Ÿ‘จโ€๐ŸŽจ & ๐Ÿงฐ ๐Ÿ’– โœ. & ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ FastAPI ๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿงพ, โ™’๏ธ. โš™๏ธ `response_model`. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `response_model=None` โŽ ๐Ÿ— ๐Ÿ“จ ๐Ÿท ๐Ÿ‘ˆ *โžก ๐Ÿ› ๏ธ*, ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿ’ช โšซ๏ธ ๐Ÿšฅ ๐Ÿ‘† โŽ ๐Ÿ†Ž โœ ๐Ÿ‘œ ๐Ÿ‘ˆ ๐Ÿšซ โ˜‘ Pydantic ๐Ÿ‘, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ–ผ ๐Ÿ‘ˆ 1๏ธโƒฃ ๐Ÿ“„ ๐Ÿ”›. - -## ๐Ÿ“จ ๐ŸŽ ๐Ÿ”ข ๐Ÿ’ฝ - -๐Ÿ“ฅ ๐Ÿ‘ฅ ๐Ÿ“ฃ `UserIn` ๐Ÿท, โšซ๏ธ ๐Ÿ”œ ๐Ÿ”Œ ๐Ÿ”ข ๐Ÿ”: - -{* ../../docs_src/response_model/tutorial002.py hl[9,11] *} - -/// info - -โš™๏ธ `EmailStr`, ๐Ÿฅ‡ โŽ `email-validator`. - -๐Ÿคถ โ“‚. `pip install email-validator` -โš–๏ธ `pip install pydantic[email]`. - -/// - -& ๐Ÿ‘ฅ โš™๏ธ ๐Ÿ‘‰ ๐Ÿท ๐Ÿ“ฃ ๐Ÿ‘† ๐Ÿ”ข & ๐ŸŽ ๐Ÿท ๐Ÿ“ฃ ๐Ÿ‘† ๐Ÿ”ข: - -{* ../../docs_src/response_model/tutorial002.py hl[18] *} - -๐Ÿ”œ, ๐Ÿ•โ” ๐Ÿ–ฅ ๐Ÿ— ๐Ÿ‘ฉโ€๐Ÿ’ป โฎ๏ธ ๐Ÿ”, ๐Ÿ› ๏ธ ๐Ÿ”œ ๐Ÿ“จ ๐ŸŽ ๐Ÿ” ๐Ÿ“จ. - -๐Ÿ‘‰ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿ’ช ๐Ÿšซ โš , โ†ฉ๏ธ โšซ๏ธ ๐ŸŽ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“จ ๐Ÿ”. - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘ฅ โš™๏ธ ๐ŸŽ ๐Ÿท โž•1๏ธโƒฃ *โžก ๐Ÿ› ๏ธ*, ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ” ๐Ÿ”  ๐Ÿ‘ฉโ€๐Ÿ’ป. - -/// danger - -๐Ÿ™… ๐Ÿช โœ… ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ’ป โš–๏ธ ๐Ÿ“จ โšซ๏ธ ๐Ÿ“จ ๐Ÿ’– ๐Ÿ‘‰, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ญ ๐ŸŒ โš  & ๐Ÿ‘† ๐Ÿ’ญ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ”จ. - -/// - -## ๐Ÿšฎ ๐Ÿ”ข ๐Ÿท - -๐Ÿ‘ฅ ๐Ÿ’ช โ†ฉ๏ธ โœ ๐Ÿ”ข ๐Ÿท โฎ๏ธ ๐Ÿ”ข ๐Ÿ” & ๐Ÿ”ข ๐Ÿท ๐Ÿต โšซ๏ธ: - -{* ../../docs_src/response_model/tutorial003.py hl[9,11,16] *} - -๐Ÿ“ฅ, โœ‹๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* ๐Ÿ›ฌ ๐ŸŽ ๐Ÿ”ข ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ”: - -{* ../../docs_src/response_model/tutorial003.py hl[24] *} - -...๐Ÿ‘ฅ ๐Ÿ“ฃ `response_model` ๐Ÿ‘† ๐Ÿท `UserOut`, ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ”Œ ๐Ÿ”: - -{* ../../docs_src/response_model/tutorial003.py hl[22] *} - -, **FastAPI** ๐Ÿ”œ โœŠ ๐Ÿ’… ๐Ÿ–ฅ ๐Ÿ‘… ๐ŸŒ ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ“ฃ ๐Ÿ”ข ๐Ÿท (โš™๏ธ Pydantic). - -### `response_model` โš–๏ธ ๐Ÿ“จ ๐Ÿ†Ž - -๐Ÿ‘‰ ๐Ÿ’ผ, โ†ฉ๏ธ 2๏ธโƒฃ ๐Ÿท ๐ŸŽ, ๐Ÿšฅ ๐Ÿ‘ฅ โœ ๐Ÿ”ข ๐Ÿ“จ ๐Ÿ†Ž `UserOut`, ๐Ÿ‘จโ€๐ŸŽจ & ๐Ÿงฐ ๐Ÿ”œ ๐Ÿ˜ญ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ›ฌ โŒ ๐Ÿ†Ž, ๐Ÿ“š ๐ŸŽ ๐ŸŽ“. - -๐Ÿ‘ˆ โšซ๏ธโ” ๐Ÿ‘‰ ๐Ÿ–ผ ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ“ฃ โšซ๏ธ `response_model` ๐Ÿ”ข. - -...โœ‹๏ธ ๐Ÿ˜ฃ ๐Ÿ‘‚ ๐Ÿ”› ๐Ÿ‘€ โ” โŽ ๐Ÿ‘ˆ. - -## ๐Ÿ“จ ๐Ÿ†Ž & ๐Ÿ’ฝ ๐Ÿ–ฅ - -โžก๏ธ ๐Ÿ˜ฃ โšช๏ธโžก๏ธ โฎ๏ธ ๐Ÿ–ผ. ๐Ÿ‘ฅ ๐Ÿ’š **โœ ๐Ÿ”ข โฎ๏ธ 1๏ธโƒฃ ๐Ÿ†Ž** โœ‹๏ธ ๐Ÿ“จ ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ”Œ **๐ŸŒ… ๐Ÿ’ฝ**. - -๐Ÿ‘ฅ ๐Ÿ’š FastAPI ๐Ÿšง **๐Ÿ–ฅ** ๐Ÿ“Š โš™๏ธ ๐Ÿ“จ ๐Ÿท. - -โฎ๏ธ ๐Ÿ–ผ, โ†ฉ๏ธ ๐ŸŽ“ ๐ŸŽ, ๐Ÿ‘ฅ โœ”๏ธ โš™๏ธ `response_model` ๐Ÿ”ข. โœ‹๏ธ ๐Ÿ‘ˆ โ›“ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿšซ ๐Ÿคš ๐Ÿ•โ€๐Ÿฆบ โšช๏ธโžก๏ธ ๐Ÿ‘จโ€๐ŸŽจ & ๐Ÿงฐ โœ… ๐Ÿ”ข ๐Ÿ“จ ๐Ÿ†Ž. - -โœ‹๏ธ ๐ŸŒ… ๐Ÿ’ผ ๐ŸŒโ” ๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿ•ณ ๐Ÿ’– ๐Ÿ‘‰, ๐Ÿ‘ฅ ๐Ÿ’š ๐Ÿท **โ›ฝ/โŽ** ๐Ÿ“Š ๐Ÿ‘‰ ๐Ÿ–ผ. - -& ๐Ÿ‘ˆ ๐Ÿ’ผ, ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ ๐ŸŽ“ & ๐Ÿงฌ โœŠ ๐Ÿ“ˆ ๐Ÿ”ข **๐Ÿ†Ž โœ** ๐Ÿคš ๐Ÿ‘ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘จโ€๐ŸŽจ & ๐Ÿงฐ, & ๐Ÿคš FastAPI **๐Ÿ’ฝ ๐Ÿ–ฅ**. - -{* ../../docs_src/response_model/tutorial003_01.py hl[9:13,15:16,20] *} - -โฎ๏ธ ๐Ÿ‘‰, ๐Ÿ‘ฅ ๐Ÿคš ๐Ÿญ ๐Ÿ•โ€๐Ÿฆบ, โšช๏ธโžก๏ธ ๐Ÿ‘จโ€๐ŸŽจ & โœ ๐Ÿ‘‰ ๐Ÿ“Ÿ โ˜‘ โš– ๐Ÿ†Ž, โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿคš ๐Ÿ’ฝ ๐Ÿ–ฅ โšช๏ธโžก๏ธ FastAPI. - -โ” ๐Ÿ”จ ๐Ÿ‘‰ ๐Ÿ‘ท โ“ โžก๏ธ โœ… ๐Ÿ‘ˆ ๐Ÿ‘…. ๐Ÿ‘ถ - -### ๐Ÿ†Ž โœ & ๐Ÿญ - -๐Ÿฅ‡ โžก๏ธ ๐Ÿ‘€ โ” ๐Ÿ‘จโ€๐ŸŽจ, โœ & ๐ŸŽ ๐Ÿงฐ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ‘‰. - -`BaseUser` โœ”๏ธ ๐Ÿงข ๐Ÿ‘. โคด๏ธ `UserIn` ๐Ÿ˜– โšช๏ธโžก๏ธ `BaseUser` & ๐Ÿšฎ `password` ๐Ÿ‘,, โšซ๏ธ ๐Ÿ”œ ๐Ÿ”Œ ๐ŸŒ ๐Ÿ‘ โšช๏ธโžก๏ธ ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿท. - -๐Ÿ‘ฅ โœ ๐Ÿ”ข ๐Ÿ“จ ๐Ÿ†Ž `BaseUser`, โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿค™ ๐Ÿ›ฌ `UserIn` ๐Ÿ‘. - -๐Ÿ‘จโ€๐ŸŽจ, โœ, & ๐ŸŽ ๐Ÿงฐ ๐Ÿ† ๐Ÿšซ ๐Ÿ˜ญ ๐Ÿ”ƒ ๐Ÿ‘‰ โ†ฉ๏ธ, โŒจ โš–, `UserIn` ๐Ÿฟ `BaseUser`, โ” โ›“ โšซ๏ธ *โ˜‘* ๐Ÿ†Ž ๐Ÿ•โ” โšซ๏ธโ” โŒ› ๐Ÿ•ณ ๐Ÿ‘ˆ `BaseUser`. - -### FastAPI ๐Ÿ’ฝ ๐Ÿ–ฅ - -๐Ÿ”œ, FastAPI, โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ“จ ๐Ÿ†Ž & โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ”Œ **๐Ÿ•ด** ๐Ÿ‘ ๐Ÿ‘ˆ ๐Ÿ“ฃ ๐Ÿ†Ž. - -FastAPI ๐Ÿ”จ ๐Ÿ“š ๐Ÿ‘œ ๐Ÿ”˜ โฎ๏ธ Pydantic โš’ ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ“š ๐ŸŽ ๐Ÿšซ ๐ŸŽ“ ๐Ÿงฌ ๐Ÿšซ โš™๏ธ ๐Ÿ“จ ๐Ÿ’ฝ ๐Ÿ–ฅ, โช ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”š ๐Ÿ†™ ๐Ÿ›ฌ ๐ŸŒ… ๐ŸŒ… ๐Ÿ’ฝ ๐ŸŒ˜ โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ“ˆ. - -๐Ÿ‘‰ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿคš ๐Ÿ† ๐Ÿ‘ฏโ€โ™‚๏ธ ๐ŸŒ: ๐Ÿ†Ž โœ โฎ๏ธ **๐Ÿญ ๐Ÿ•โ€๐Ÿฆบ** & **๐Ÿ’ฝ ๐Ÿ–ฅ**. - -## ๐Ÿ‘€ โšซ๏ธ ๐Ÿฉบ - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ‘€ ๐Ÿง ๐Ÿฉบ, ๐Ÿ‘† ๐Ÿ’ช โœ… ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿท & ๐Ÿ”ข ๐Ÿท ๐Ÿ”œ ๐Ÿ‘ฏโ€โ™‚๏ธ โœ”๏ธ ๐Ÿ‘ซ ๐Ÿ‘ ๐ŸŽป ๐Ÿ”—: - - - -& ๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿท ๐Ÿ”œ โš™๏ธ ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿงพ: - - - -## ๐ŸŽ ๐Ÿ“จ ๐Ÿ†Ž โœ - -๐Ÿ“ค 5๏ธโƒฃ๐Ÿ“† ๐Ÿ’ผ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿšซ โ˜‘ Pydantic ๐Ÿ‘ & ๐Ÿ‘† โœ โšซ๏ธ ๐Ÿ”ข, ๐Ÿ•ด ๐Ÿคš ๐Ÿ•โ€๐Ÿฆบ ๐Ÿšš ๐Ÿญ (๐Ÿ‘จโ€๐ŸŽจ, โœ, โ™’๏ธ). - -### ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ”— - -๐Ÿ† โš  ๐Ÿ’ผ ๐Ÿ”œ [๐Ÿ›ฌ ๐Ÿ“จ ๐Ÿ”— ๐Ÿ”ฌ โช ๐Ÿง ๐Ÿฉบ](../advanced/response-directly.md){.internal-link target=_blank}. - -{* ../../docs_src/response_model/tutorial003_02.py hl[8,10:11] *} - -๐Ÿ‘‰ ๐Ÿ™… ๐Ÿ’ผ ๐Ÿต ๐Ÿ” FastAPI โ†ฉ๏ธ ๐Ÿ“จ ๐Ÿ†Ž โœ ๐ŸŽ“ (โš–๏ธ ๐Ÿฟ) `Response`. - -& ๐Ÿงฐ ๐Ÿ”œ ๐Ÿ˜„ โ†ฉ๏ธ ๐Ÿ‘ฏโ€โ™‚๏ธ `RedirectResponse` & `JSONResponse` ๐Ÿฟ `Response`, ๐Ÿ†Ž โœ โ˜‘. - -### โœ ๐Ÿ“จ ๐Ÿฟ - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿฟ `Response` ๐Ÿ†Ž โœ: - -{* ../../docs_src/response_model/tutorial003_03.py hl[8:9] *} - -๐Ÿ‘‰ ๐Ÿ”œ ๐Ÿ‘ท โ†ฉ๏ธ `RedirectResponse` ๐Ÿฟ `Response`, & FastAPI ๐Ÿ”œ ๐Ÿ” ๐Ÿต ๐Ÿ‘‰ ๐Ÿ™… ๐Ÿ’ผ. - -### โŒ ๐Ÿ“จ ๐Ÿ†Ž โœ - -โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“จ ๐ŸŽ โŒ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿšซ โ˜‘ Pydantic ๐Ÿ†Ž (โœ… ๐Ÿ’ฝ ๐ŸŽš) & ๐Ÿ‘† โœ โšซ๏ธ ๐Ÿ’– ๐Ÿ‘ˆ ๐Ÿ”ข, FastAPI ๐Ÿ”œ ๐Ÿ”„ โœ Pydantic ๐Ÿ“จ ๐Ÿท โšช๏ธโžก๏ธ ๐Ÿ‘ˆ ๐Ÿ†Ž โœ, & ๐Ÿ”œ โŒ. - -๐ŸŽ ๐Ÿ”œ ๐Ÿ”จ ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ•ณ ๐Ÿ’– ๐Ÿ‡ช๐Ÿ‡บ ๐Ÿ–– ๐ŸŽ ๐Ÿ†Ž ๐ŸŒโ” 1๏ธโƒฃ โš–๏ธ ๐ŸŒ… ๐Ÿ‘ซ ๐Ÿšซ โ˜‘ Pydantic ๐Ÿ†Ž, ๐Ÿ–ผ ๐Ÿ‘‰ ๐Ÿ”œ โŒ ๐Ÿ‘ถ: - -{* ../../docs_src/response_model/tutorial003_04.py hl[10] *} - -...๐Ÿ‘‰ โŒ โ†ฉ๏ธ ๐Ÿ†Ž โœ ๐Ÿšซ Pydantic ๐Ÿ†Ž & ๐Ÿšซ ๐Ÿ‘ `Response` ๐ŸŽ“ โš–๏ธ ๐Ÿฟ, โšซ๏ธ ๐Ÿ‡ช๐Ÿ‡บ (๐Ÿ™† 2๏ธโƒฃ) ๐Ÿ–– `Response` & `dict`. - -### โŽ ๐Ÿ“จ ๐Ÿท - -โ–ถ๏ธ โšช๏ธโžก๏ธ ๐Ÿ–ผ ๐Ÿ”›, ๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿšซ ๐Ÿ’š โœ”๏ธ ๐Ÿ”ข ๐Ÿ’ฝ ๐Ÿ”ฌ, ๐Ÿงพ, ๐Ÿ–ฅ, โ™’๏ธ. ๐Ÿ‘ˆ ๐ŸŽญ FastAPI. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿšง ๐Ÿ“จ ๐Ÿ†Ž โœ ๐Ÿ”ข ๐Ÿคš ๐Ÿ•โ€๐Ÿฆบ โšช๏ธโžก๏ธ ๐Ÿงฐ ๐Ÿ’– ๐Ÿ‘จโ€๐ŸŽจ & ๐Ÿ†Ž โ˜‘ (โœ… โœ). - -๐Ÿ‘‰ ๐Ÿ’ผ, ๐Ÿ‘† ๐Ÿ’ช โŽ ๐Ÿ“จ ๐Ÿท โšก โš’ `response_model=None`: - -{* ../../docs_src/response_model/tutorial003_05.py hl[9] *} - -๐Ÿ‘‰ ๐Ÿ”œ โš’ FastAPI ๐Ÿšถ ๐Ÿ“จ ๐Ÿท โšก & ๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ™† ๐Ÿ“จ ๐Ÿ†Ž โœ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿต โšซ๏ธ ๐Ÿค• ๐Ÿ‘† FastAPI ๐Ÿˆธ. ๐Ÿ‘ถ - -## ๐Ÿ“จ ๐Ÿท ๐Ÿ”ข ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ“จ ๐Ÿท ๐Ÿ’ช โœ”๏ธ ๐Ÿ”ข ๐Ÿ’ฒ, ๐Ÿ’–: - -{* ../../docs_src/response_model/tutorial004.py hl[11,13:14] *} - -* `description: Union[str, None] = None` (โš–๏ธ `str | None = None` ๐Ÿ 3๏ธโƒฃ.1๏ธโƒฃ0๏ธโƒฃ) โœ”๏ธ ๐Ÿ”ข `None`. -* `tax: float = 10.5` โœ”๏ธ ๐Ÿ”ข `10.5`. -* `tags: List[str] = []` ๐Ÿ”ข ๐Ÿ› ๐Ÿ“‡: `[]`. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’š ๐Ÿšซ ๐Ÿ‘ซ โšช๏ธโžก๏ธ ๐Ÿ ๐Ÿšฅ ๐Ÿ‘ซ ๐Ÿšซ ๐Ÿค™ ๐Ÿช. - -๐Ÿ–ผ, ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿท โฎ๏ธ ๐Ÿ“š ๐Ÿ“ฆ ๐Ÿ”ข โ˜ ๐Ÿ’ฝ, โœ‹๏ธ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’š ๐Ÿ“จ ๐Ÿ“ถ ๐Ÿ“ ๐ŸŽป ๐Ÿ“จ ๐ŸŒ• ๐Ÿ”ข ๐Ÿ’ฒ. - -### โš™๏ธ `response_model_exclude_unset` ๐Ÿ”ข - -๐Ÿ‘† ๐Ÿ’ช โš’ *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* ๐Ÿ”ข `response_model_exclude_unset=True`: - -{* ../../docs_src/response_model/tutorial004.py hl[24] *} - -& ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ’ฒ ๐Ÿ† ๐Ÿšซ ๐Ÿ”Œ ๐Ÿ“จ, ๐Ÿ•ด ๐Ÿ’ฒ ๐Ÿค™ โš’. - -, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ‘ˆ *โžก ๐Ÿ› ๏ธ* ๐Ÿฌ โฎ๏ธ ๐Ÿ†” `foo`, ๐Ÿ“จ (๐Ÿšซ โœ… ๐Ÿ”ข ๐Ÿ’ฒ) ๐Ÿ”œ: - -```JSON -{ - "name": "Foo", - "price": 50.2 -} -``` - -/// info - -FastAPI โš™๏ธ Pydantic ๐Ÿท `.dict()` โฎ๏ธ ๐Ÿšฎ `exclude_unset` ๐Ÿ”ข ๐Ÿ† ๐Ÿ‘‰. - -/// - -/// info - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ: - -* `response_model_exclude_defaults=True` -* `response_model_exclude_none=True` - -๐Ÿ”ฌ Pydantic ๐Ÿฉบ `exclude_defaults` & `exclude_none`. - -/// - -#### ๐Ÿ“Š โฎ๏ธ ๐Ÿ’ฒ ๐Ÿ‘ โฎ๏ธ ๐Ÿ”ข - -โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“Š โœ”๏ธ ๐Ÿ’ฒ ๐Ÿท ๐Ÿ‘ โฎ๏ธ ๐Ÿ”ข ๐Ÿ’ฒ, ๐Ÿ’– ๐Ÿฌ โฎ๏ธ ๐Ÿ†” `bar`: - -```Python hl_lines="3 5" -{ - "name": "Bar", - "description": "The bartenders", - "price": 62, - "tax": 20.2 -} -``` - -๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ”Œ ๐Ÿ“จ. - -#### ๐Ÿ“Š โฎ๏ธ ๐ŸŽ ๐Ÿ’ฒ ๐Ÿ”ข - -๐Ÿšฅ ๐Ÿ“Š โœ”๏ธ ๐ŸŽ ๐Ÿ’ฒ ๐Ÿ”ข ๐Ÿ•, ๐Ÿ’– ๐Ÿฌ โฎ๏ธ ๐Ÿ†” `baz`: - -```Python hl_lines="3 5-6" -{ - "name": "Baz", - "description": None, - "price": 50.2, - "tax": 10.5, - "tags": [] -} -``` - -FastAPI ๐Ÿ™ƒ ๐Ÿฅƒ (๐Ÿค™, Pydantic ๐Ÿ™ƒ ๐Ÿฅƒ) ๐Ÿค” ๐Ÿ‘ˆ, โœ‹๏ธ `description`, `tax`, & `tags` โœ”๏ธ ๐ŸŽ ๐Ÿ’ฒ ๐Ÿ”ข, ๐Ÿ‘ซ โš’ ๐ŸŽฏ (โ†ฉ๏ธ โœŠ โšช๏ธโžก๏ธ ๐Ÿ”ข). - -, ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿ”Œ ๐ŸŽป ๐Ÿ“จ. - -/// tip - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ”ข ๐Ÿ’ฒ ๐Ÿ’ช ๐Ÿ•ณ, ๐Ÿšซ ๐Ÿ•ด `None`. - -๐Ÿ‘ซ ๐Ÿ’ช ๐Ÿ“‡ (`[]`), `float` `10.5`, โ™’๏ธ. - -/// - -### `response_model_include` & `response_model_exclude` - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* ๐Ÿ”ข `response_model_include` & `response_model_exclude`. - -๐Ÿ‘ซ โœŠ `set` `str` โฎ๏ธ ๐Ÿ“› ๐Ÿ”ข ๐Ÿ”Œ (โŽ ๐ŸŽ‚) โš–๏ธ ๐Ÿšซ (โœ… ๐ŸŽ‚). - -๐Ÿ‘‰ ๐Ÿ’ช โš™๏ธ โฉ โŒจ ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ•ด 1๏ธโƒฃ Pydantic ๐Ÿท & ๐Ÿ’š โŽ ๐Ÿ’ฝ โšช๏ธโžก๏ธ ๐Ÿ”ข. - -/// tip - -โœ‹๏ธ โšซ๏ธ ๐Ÿ‘ โš™๏ธ ๐Ÿ’ญ ๐Ÿ”›, โš™๏ธ ๐Ÿ’— ๐ŸŽ“, โ†ฉ๏ธ ๐Ÿ‘ซ ๐Ÿ”ข. - -๐Ÿ‘‰ โ†ฉ๏ธ ๐ŸŽป ๐Ÿ”— ๐Ÿ— ๐Ÿ‘† ๐Ÿ“ฑ ๐Ÿ—„ (& ๐Ÿฉบ) ๐Ÿ”œ 1๏ธโƒฃ ๐Ÿ ๐Ÿท, ๐Ÿšฅ ๐Ÿ‘† โš™๏ธ `response_model_include` โš–๏ธ `response_model_exclude` ๐Ÿšซ ๐Ÿ”ข. - -๐Ÿ‘‰ โœ” `response_model_by_alias` ๐Ÿ‘ˆ ๐Ÿ‘ท โžก. - -/// - -{* ../../docs_src/response_model/tutorial005.py hl[31,37] *} - -/// tip - -โ• `{"name", "description"}` โœ `set` โฎ๏ธ ๐Ÿ“š 2๏ธโƒฃ ๐Ÿ’ฒ. - -โšซ๏ธ ๐ŸŒ“ `set(["name", "description"])`. - -/// - -#### โš™๏ธ `list`โ“‚ โ†ฉ๏ธ `set`โ“‚ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ญ โš™๏ธ `set` & โš™๏ธ `list` โš–๏ธ `tuple` โ†ฉ๏ธ, FastAPI ๐Ÿ”œ ๐Ÿ—œ โšซ๏ธ `set` & โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘ท โ˜‘: - -{* ../../docs_src/response_model/tutorial006.py hl[31,37] *} - -## ๐ŸŒƒ - -โš™๏ธ *โžก ๐Ÿ› ๏ธ ๐Ÿ‘จโ€๐ŸŽจ* ๐Ÿ”ข `response_model` ๐Ÿ”ฌ ๐Ÿ“จ ๐Ÿท & โœด๏ธ ๐Ÿšš ๐Ÿ“ข ๐Ÿ’ฝ โ›ฝ ๐Ÿ‘…. - -โš™๏ธ `response_model_exclude_unset` ๐Ÿ“จ ๐Ÿ•ด ๐Ÿ’ฒ ๐ŸŽฏ โš’. diff --git a/docs/em/docs/tutorial/response-status-code.md b/docs/em/docs/tutorial/response-status-code.md deleted file mode 100644 index 413ceb916..000000000 --- a/docs/em/docs/tutorial/response-status-code.md +++ /dev/null @@ -1,101 +0,0 @@ -# ๐Ÿ“จ ๐Ÿ‘” ๐Ÿ“Ÿ - -๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ช โœ” ๐Ÿ“จ ๐Ÿท, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ โš™๏ธ ๐Ÿ“จ โฎ๏ธ ๐Ÿ”ข `status_code` ๐Ÿ™† *โžก ๐Ÿ› ๏ธ*: - -* `@app.get()` -* `@app.post()` -* `@app.put()` -* `@app.delete()` -* โ™’๏ธ. - -{* ../../docs_src/response_status_code/tutorial001.py hl[6] *} - -/// note - -๐Ÿ‘€ ๐Ÿ‘ˆ `status_code` ๐Ÿ”ข "๐Ÿ‘จโ€๐ŸŽจ" ๐Ÿ‘ฉโ€๐Ÿ”ฌ (`get`, `post`, โ™’๏ธ). ๐Ÿšซ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*, ๐Ÿ’– ๐ŸŒ ๐Ÿ”ข & ๐Ÿ’ช. - -/// - -`status_code` ๐Ÿ”ข ๐Ÿ“จ ๐Ÿ”ข โฎ๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ. - -/// info - -`status_code` ๐Ÿ’ช ๐Ÿ‘ ๐Ÿ“จ `IntEnum`, โœ… ๐Ÿ `http.HTTPStatus`. - -/// - -โšซ๏ธ ๐Ÿ”œ: - -* ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ‘” ๐Ÿ“Ÿ ๐Ÿ“จ. -* ๐Ÿ“„ โšซ๏ธ โœ… ๐Ÿ—„ ๐Ÿ”— ( & , ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข): - - - -/// note - -๐Ÿ“จ ๐Ÿ“Ÿ (๐Ÿ‘€ โญ ๐Ÿ“„) ๐ŸŽฆ ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ”จ ๐Ÿšซ โœ”๏ธ ๐Ÿ’ช. - -FastAPI ๐Ÿ’ญ ๐Ÿ‘‰, & ๐Ÿ”œ ๐Ÿญ ๐Ÿ—„ ๐Ÿฉบ ๐Ÿ‘ˆ ๐Ÿ‡ต๐Ÿ‡ธ ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ ๐Ÿ“จ ๐Ÿ’ช. - -/// - -## ๐Ÿ”ƒ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ - -/// note - -๐Ÿšฅ ๐Ÿ‘† โช ๐Ÿ’ญ โšซ๏ธโ” ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ, ๐Ÿšถ โญ ๐Ÿ“„. - -/// - -๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, ๐Ÿ‘† ๐Ÿ“จ ๐Ÿ”ข ๐Ÿ‘” ๐Ÿ“Ÿ 3๏ธโƒฃ 9๏ธโƒฃ ๐Ÿ• ๐Ÿ“จ. - -๐Ÿ‘ซ ๐Ÿ‘” ๐Ÿ“Ÿ โœ”๏ธ ๐Ÿ“› ๐Ÿ”— ๐Ÿค” ๐Ÿ‘ซ, โœ‹๏ธ โš  ๐Ÿ• ๐Ÿ”ข. - -๐Ÿ“: - -* `100` & ๐Ÿ”› "โ„น". ๐Ÿ‘† ๐Ÿ›Ž โš™๏ธ ๐Ÿ‘ซ ๐Ÿ”—. ๐Ÿ“จ โฎ๏ธ ๐Ÿ‘ซ ๐Ÿ‘” ๐Ÿ“Ÿ ๐Ÿšซ๐Ÿ”œ โœ”๏ธ ๐Ÿ’ช. -* **`200`** & ๐Ÿ”› "๐Ÿ†" ๐Ÿ“จ. ๐Ÿ‘ซ ๐Ÿ• ๐Ÿ‘† ๐Ÿ”œ โš™๏ธ ๐Ÿ†. - * `200` ๐Ÿ”ข ๐Ÿ‘” ๐Ÿ“Ÿ, โ” โ›“ ๐ŸŒ "๐Ÿ‘Œ". - * โž•1๏ธโƒฃ ๐Ÿ–ผ ๐Ÿ”œ `201`, "โœ". โšซ๏ธ ๐Ÿ›Ž โš™๏ธ โฎ๏ธ ๐Ÿ— ๐Ÿ†• โบ ๐Ÿ’ฝ. - * ๐ŸŽ ๐Ÿ’ผ `204`, "๐Ÿ™…โ€โ™‚ ๐ŸŽš". ๐Ÿ‘‰ ๐Ÿ“จ โš™๏ธ ๐Ÿ•โ” ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ ๐ŸŽš ๐Ÿ“จ ๐Ÿ‘ฉโ€๐Ÿ’ป, & ๐Ÿ“จ ๐Ÿ”œ ๐Ÿšซ โœ”๏ธ ๐Ÿ’ช. -* **`300`** & ๐Ÿ”› "โŽ". ๐Ÿ“จ โฎ๏ธ ๐Ÿ‘ซ ๐Ÿ‘” ๐Ÿ“Ÿ 5๏ธโƒฃ๐Ÿ“† โš–๏ธ 5๏ธโƒฃ๐Ÿ“† ๐Ÿšซ โœ”๏ธ ๐Ÿ’ช, ๐ŸŒ– `304`, "๐Ÿšซ ๐Ÿ”€", โ” ๐Ÿ”œ ๐Ÿšซ โœ”๏ธ 1๏ธโƒฃ. -* **`400`** & ๐Ÿ”› "๐Ÿ‘ฉโ€๐Ÿ’ป โŒ" ๐Ÿ“จ. ๐Ÿ‘ซ ๐Ÿฅˆ ๐Ÿ†Ž ๐Ÿ‘† ๐Ÿ”œ ๐ŸŽฒ โš™๏ธ ๐Ÿ†. - * ๐Ÿ–ผ `404`, "๐Ÿšซ ๐Ÿ”Ž" ๐Ÿ“จ. - * ๐Ÿ’Š โŒ โšช๏ธโžก๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `400`. -* `500` & ๐Ÿ”› ๐Ÿ’ฝ โŒ. ๐Ÿ‘† ๐ŸŒ– ๐Ÿ™… โš™๏ธ ๐Ÿ‘ซ ๐Ÿ”—. ๐Ÿ•โ” ๐Ÿ•ณ ๐Ÿšถ โŒ ๐Ÿ• ๐Ÿ‘† ๐Ÿˆธ ๐Ÿ“Ÿ, โš–๏ธ ๐Ÿ’ฝ, โšซ๏ธ ๐Ÿ”œ ๐Ÿ” ๐Ÿ“จ 1๏ธโƒฃ ๐Ÿ‘ซ ๐Ÿ‘” ๐Ÿ“Ÿ. - -/// tip - -๐Ÿ’ญ ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ”  ๐Ÿ‘” ๐Ÿ“Ÿ & โ” ๐Ÿ“Ÿ โšซ๏ธโ”, โœ… ๐Ÿ‡ ๐Ÿงพ ๐Ÿ”ƒ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ‘” ๐Ÿ“Ÿ. - -/// - -## โŒจ ๐Ÿ’ญ ๐Ÿ“› - -โžก๏ธ ๐Ÿ‘€ โฎ๏ธ ๐Ÿ–ผ ๐Ÿ”„: - -{* ../../docs_src/response_status_code/tutorial001.py hl[6] *} - -`201` ๐Ÿ‘” ๐Ÿ“Ÿ "โœ". - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ โœ โšซ๏ธโ” ๐Ÿ”  ๐Ÿ‘‰ ๐Ÿ“Ÿ โ›“. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿช ๐Ÿ”ข โšช๏ธโžก๏ธ `fastapi.status`. - -{* ../../docs_src/response_status_code/tutorial002.py hl[1,6] *} - -๐Ÿ‘ซ ๐Ÿช, ๐Ÿ‘ซ ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ ๐ŸŽ ๐Ÿ”ข, โœ‹๏ธ ๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘จโ€๐ŸŽจ ๐Ÿ“‹ ๐Ÿ”Ž ๐Ÿ‘ซ: - - - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette import status`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.status` `fastapi.status` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ โšซ๏ธ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -## ๐Ÿ”€ ๐Ÿ”ข - -โช, [๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ](../advanced/response-change-status-code.md){.internal-link target=_blank}, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โ” ๐Ÿ“จ ๐ŸŽ ๐Ÿ‘” ๐Ÿ“Ÿ ๐ŸŒ˜ ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ“ฃ ๐Ÿ“ฅ. diff --git a/docs/em/docs/tutorial/schema-extra-example.md b/docs/em/docs/tutorial/schema-extra-example.md deleted file mode 100644 index 1bd314c51..000000000 --- a/docs/em/docs/tutorial/schema-extra-example.md +++ /dev/null @@ -1,110 +0,0 @@ -# ๐Ÿ“ฃ ๐Ÿ“จ ๐Ÿ–ผ ๐Ÿ’ฝ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ–ผ ๐Ÿ’ฝ ๐Ÿ‘† ๐Ÿ“ฑ ๐Ÿ’ช ๐Ÿ“จ. - -๐Ÿ“ฅ ๐Ÿ“š ๐ŸŒŒ โšซ๏ธ. - -## Pydantic `schema_extra` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ `example` Pydantic ๐Ÿท โš™๏ธ `Config` & `schema_extra`, ๐Ÿ”ฌ Pydantic ๐Ÿฉบ: ๐Ÿ”— ๐Ÿ›ƒ: - -{* ../../docs_src/schema_extra_example/tutorial001.py hl[15:23] *} - -๐Ÿ‘ˆ โž• โ„น ๐Ÿ”œ ๐Ÿšฎ-๐Ÿ”ข **๐ŸŽป ๐Ÿ”—** ๐Ÿ‘ˆ ๐Ÿท, & โšซ๏ธ ๐Ÿ”œ โš™๏ธ ๐Ÿ› ๏ธ ๐Ÿฉบ. - -/// tip - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐ŸŽ โš’ โ†” ๐ŸŽป ๐Ÿ”— & ๐Ÿšฎ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ›ƒ โž• โ„น. - -๐Ÿ–ผ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โšซ๏ธ ๐Ÿšฎ ๐Ÿ—ƒ ๐Ÿ•ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข, โ™’๏ธ. - -/// - -## `Field` ๐ŸŒ– โŒ - -๐Ÿ•โ” โš™๏ธ `Field()` โฎ๏ธ Pydantic ๐Ÿท, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ โž• โ„น **๐ŸŽป ๐Ÿ”—** ๐Ÿšถโ€โ™€๏ธ ๐Ÿ™† ๐ŸŽ โŒ โŒ ๐Ÿ”ข. - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘‰ ๐Ÿšฎ `example` ๐Ÿ”  ๐Ÿ‘: - -{* ../../docs_src/schema_extra_example/tutorial002.py hl[4,10:13] *} - -/// warning - -๐Ÿšง ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ“š โž• โŒ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ† ๐Ÿšซ ๐Ÿšฎ ๐Ÿ™† ๐Ÿ”ฌ, ๐Ÿ•ด โž• โ„น, ๐Ÿงพ ๐ŸŽฏ. - -/// - -## `example` & `examples` ๐Ÿ—„ - -๐Ÿ•โ” โš™๏ธ ๐Ÿ™†: - -* `Path()` -* `Query()` -* `Header()` -* `Cookie()` -* `Body()` -* `Form()` -* `File()` - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ฃ ๐Ÿ’ฝ `example` โš–๏ธ ๐Ÿ‘ช `examples` โฎ๏ธ ๐ŸŒ– โ„น ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿšฎ **๐Ÿ—„**. - -### `Body` โฎ๏ธ `example` - -๐Ÿ“ฅ ๐Ÿ‘ฅ ๐Ÿšถโ€โ™€๏ธ `example` ๐Ÿ“Š โŒ› `Body()`: - -{* ../../docs_src/schema_extra_example/tutorial003.py hl[20:25] *} - -### ๐Ÿ–ผ ๐Ÿฉบ ๐ŸŽš - -โฎ๏ธ ๐Ÿ™† ๐Ÿ‘ฉโ€๐Ÿ”ฌ ๐Ÿ”› โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ‘‰ `/docs`: - - - -### `Body` โฎ๏ธ ๐Ÿ’— `examples` - -๐Ÿ‘ ๐Ÿ‘ `example`, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ `examples` โš™๏ธ `dict` โฎ๏ธ **๐Ÿ’— ๐Ÿ–ผ**, ๐Ÿ”  โฎ๏ธ โž• โ„น ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿšฎ **๐Ÿ—„** ๐Ÿ’โ€โ™‚๏ธ. - -๐Ÿ”‘ `dict` ๐Ÿ”ฌ ๐Ÿ”  ๐Ÿ–ผ, & ๐Ÿ”  ๐Ÿ’ฒ โž•1๏ธโƒฃ `dict`. - -๐Ÿ”  ๐ŸŽฏ ๐Ÿ–ผ `dict` `examples` ๐Ÿ’ช ๐Ÿ”Œ: - -* `summary`: ๐Ÿ“ ๐Ÿ“› ๐Ÿ–ผ. -* `description`: ๐Ÿ“ ๐Ÿ“› ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ”Œ โœ โœ. -* `value`: ๐Ÿ‘‰ โ˜‘ ๐Ÿ–ผ ๐ŸŽฆ, โœ… `dict`. -* `externalValue`: ๐ŸŽ› `value`, ๐Ÿ“› โ˜ ๐Ÿ–ผ. ๐Ÿ‘ ๐Ÿ‘‰ 5๏ธโƒฃ๐Ÿ“† ๐Ÿšซ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ“š ๐Ÿงฐ `value`. - -{* ../../docs_src/schema_extra_example/tutorial004.py hl[21:47] *} - -### ๐Ÿ–ผ ๐Ÿฉบ ๐ŸŽš - -โฎ๏ธ `examples` ๐Ÿšฎ `Body()` `/docs` ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’–: - - - -## ๐Ÿ“ก โ„น - -/// warning - -๐Ÿ‘‰ ๐Ÿ“ถ ๐Ÿ“ก โ„น ๐Ÿ”ƒ ๐Ÿฉ **๐ŸŽป ๐Ÿ”—** & **๐Ÿ—„**. - -๐Ÿšฅ ๐Ÿ’ญ ๐Ÿ”› โช ๐Ÿ‘ท ๐Ÿ‘†, ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿฅƒ, & ๐Ÿ‘† ๐ŸŽฒ ๐Ÿšซ ๐Ÿ’ช ๐Ÿ‘‰ โ„น, ๐Ÿ’ญ ๐Ÿ†“ ๐Ÿšถ ๐Ÿ‘ซ. - -/// - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿšฎ ๐Ÿ–ผ ๐Ÿ”˜ Pydantic ๐Ÿท, โš™๏ธ `schema_extra` โš–๏ธ `Field(example="something")` ๐Ÿ‘ˆ ๐Ÿ–ผ ๐Ÿšฎ **๐ŸŽป ๐Ÿ”—** ๐Ÿ‘ˆ Pydantic ๐Ÿท. - -& ๐Ÿ‘ˆ **๐ŸŽป ๐Ÿ”—** Pydantic ๐Ÿท ๐Ÿ”Œ **๐Ÿ—„** ๐Ÿ‘† ๐Ÿ› ๏ธ, & โคด๏ธ โšซ๏ธ โš™๏ธ ๐Ÿฉบ ๐ŸŽš. - -**๐ŸŽป ๐Ÿ”—** ๐Ÿšซ ๐Ÿค™ โœ”๏ธ ๐Ÿ‘ `example` ๐Ÿฉ. โฎ๏ธ โฌ ๐ŸŽป ๐Ÿ”— ๐Ÿ”ฌ ๐Ÿ‘ `examples`, โœ‹๏ธ ๐Ÿ—„ 3๏ธโƒฃ.0๏ธโƒฃ.3๏ธโƒฃ โš“๏ธ ๐Ÿ”› ๐Ÿ— โฌ ๐ŸŽป ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿšซ โœ”๏ธ `examples`. - -, ๐Ÿ—„ 3๏ธโƒฃ.0๏ธโƒฃ.3๏ธโƒฃ ๐Ÿ”ฌ ๐Ÿšฎ ๐Ÿ‘ `example` ๐Ÿ”€ โฌ **๐ŸŽป ๐Ÿ”—** โšซ๏ธ โš™๏ธ, ๐ŸŽ ๐ŸŽฏ (โœ‹๏ธ โšซ๏ธ ๐Ÿ‘ `example`, ๐Ÿšซ `examples`), & ๐Ÿ‘ˆ โšซ๏ธโ” โš™๏ธ ๐Ÿ› ๏ธ ๐Ÿฉบ ๐ŸŽš (โš™๏ธ ๐Ÿฆ ๐ŸŽš). - -, ๐Ÿ‘ `example` ๐Ÿšซ ๐Ÿ• ๐ŸŽป ๐Ÿ”—, โšซ๏ธ ๐Ÿ• ๐Ÿ—„ ๐Ÿ›ƒ โฌ ๐ŸŽป ๐Ÿ”—, & ๐Ÿ‘ˆ โšซ๏ธโ” ๐Ÿ”œ โš™๏ธ ๐Ÿฉบ ๐ŸŽš. - -โœ‹๏ธ ๐Ÿ•โ” ๐Ÿ‘† โš™๏ธ `example` โš–๏ธ `examples` โฎ๏ธ ๐Ÿ™† ๐ŸŽ ๐Ÿš™ (`Query()`, `Body()`, โ™’๏ธ.) ๐Ÿ“š ๐Ÿ–ผ ๐Ÿšซ ๐Ÿšฎ ๐ŸŽป ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ”ฌ ๐Ÿ‘ˆ ๐Ÿ’ฝ (๐Ÿšซ ๐Ÿ—„ ๐Ÿ‘ โฌ ๐ŸŽป ๐Ÿ”—), ๐Ÿ‘ซ ๐Ÿšฎ ๐Ÿ”— *โžก ๐Ÿ› ๏ธ* ๐Ÿ“„ ๐Ÿ—„ (๐Ÿž ๐Ÿ• ๐Ÿ—„ ๐Ÿ‘ˆ โš™๏ธ ๐ŸŽป ๐Ÿ”—). - -`Path()`, `Query()`, `Header()`, & `Cookie()`, `example` โš–๏ธ `examples` ๐Ÿšฎ ๐Ÿ—„ ๐Ÿ”‘, `Parameter Object` (๐Ÿ”ง). - -& `Body()`, `File()`, & `Form()`, `example` โš–๏ธ `examples` ๐Ÿ“Š ๐Ÿšฎ ๐Ÿ—„ ๐Ÿ”‘, `Request Body Object`, ๐Ÿ‘ `content`, ๐Ÿ”› `Media Type Object` (๐Ÿ”ง). - -๐Ÿ”› ๐ŸŽ โœ‹, ๐Ÿ“ค ๐Ÿ†• โฌ ๐Ÿ—„: **3๏ธโƒฃ.1๏ธโƒฃ.0๏ธโƒฃ**, โณ ๐Ÿš€. โšซ๏ธ โš“๏ธ ๐Ÿ”› โช ๐ŸŽป ๐Ÿ”— & ๐Ÿ† ๐Ÿ› ๏ธ โšช๏ธโžก๏ธ ๐Ÿ—„ ๐Ÿ›ƒ โฌ ๐ŸŽป ๐Ÿ”— โŽ, ๐Ÿ’ฑ โš’ โšช๏ธโžก๏ธ โฎ๏ธ โฌ ๐ŸŽป ๐Ÿ”—, ๐ŸŒ ๐Ÿ‘ซ ๐Ÿคช ๐Ÿ”บ ๐Ÿ“‰. ๐Ÿ‘, ๐Ÿฆ ๐ŸŽš โณ ๐Ÿšซ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ—„ 3๏ธโƒฃ.1๏ธโƒฃ.0๏ธโƒฃ,, ๐Ÿ”œ, โšซ๏ธ ๐Ÿ‘ ๐Ÿ˜ฃ โš™๏ธ ๐Ÿ’ญ ๐Ÿ”›. diff --git a/docs/em/docs/tutorial/security/first-steps.md b/docs/em/docs/tutorial/security/first-steps.md deleted file mode 100644 index 8fb459a65..000000000 --- a/docs/em/docs/tutorial/security/first-steps.md +++ /dev/null @@ -1,197 +0,0 @@ -# ๐Ÿ’‚โ€โ™‚ - ๐Ÿฅ‡ ๐Ÿ” - -โžก๏ธ ๐ŸŒˆ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿ‘† **๐Ÿ‘ฉโ€๐Ÿ’ป** ๐Ÿ› ๏ธ ๐Ÿ†”. - -& ๐Ÿ‘† โœ”๏ธ **๐Ÿ•ธ** โž•1๏ธโƒฃ ๐Ÿ†” โš–๏ธ ๐ŸŽ โžก ๐ŸŽ ๐Ÿ†” (โš–๏ธ ๐Ÿ“ฑ ๐Ÿˆธ). - -& ๐Ÿ‘† ๐Ÿ’š โœ”๏ธ ๐ŸŒŒ ๐Ÿ•ธ ๐Ÿ”“ โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป, โš™๏ธ **๐Ÿ†”** & **๐Ÿ”**. - -๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ **Oauth2๏ธโƒฃ** ๐Ÿ— ๐Ÿ‘ˆ โฎ๏ธ **FastAPI**. - -โœ‹๏ธ โžก๏ธ ๐Ÿ–Š ๐Ÿ‘† ๐Ÿ•ฐ ๐Ÿ‘‚ ๐ŸŒ• ๐Ÿ“ ๐Ÿ”ง ๐Ÿ”Ž ๐Ÿ‘ˆ ๐Ÿฅ ๐Ÿ– โ„น ๐Ÿ‘† ๐Ÿ’ช. - -โžก๏ธ โš™๏ธ ๐Ÿงฐ ๐Ÿšš **FastAPI** ๐Ÿต ๐Ÿ’‚โ€โ™‚. - -## โ” โšซ๏ธ ๐Ÿ‘€ - -โžก๏ธ ๐Ÿฅ‡ โš™๏ธ ๐Ÿ“Ÿ & ๐Ÿ‘€ โ” โšซ๏ธ ๐Ÿ‘ท, & โคด๏ธ ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ‘Ÿ ๐Ÿ”™ ๐Ÿค” โšซ๏ธโ” ๐Ÿ˜ฅ. - -## โœ `main.py` - -๐Ÿ“ ๐Ÿ–ผ ๐Ÿ“ `main.py`: - -{* ../../docs_src/security/tutorial001.py *} - -## ๐Ÿƒ โšซ๏ธ - -/// info - -๐Ÿฅ‡ โŽ `python-multipart`. - -๐Ÿคถ โ“‚. `pip install python-multipart`. - -๐Ÿ‘‰ โ†ฉ๏ธ **Oauth2๏ธโƒฃ** โš™๏ธ "๐Ÿ“จ ๐Ÿ“Š" ๐Ÿ“จ `username` & `password`. - -/// - -๐Ÿƒ ๐Ÿ–ผ โฎ๏ธ: - -
- -```console -$ uvicorn main:app --reload - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -``` - -
- -## โœ… โšซ๏ธ - -๐Ÿšถ ๐ŸŽ“ ๐Ÿฉบ: http://127.0.0.1:8000/docs. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ•ณ ๐Ÿ’– ๐Ÿ‘‰: - - - -/// check | โœ” ๐Ÿ”ผ โ— - -๐Ÿ‘† โช โœ”๏ธ โœจ ๐Ÿ†• "โœ”" ๐Ÿ”ผ. - - & ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* โœ”๏ธ ๐Ÿฅ ๐Ÿ”’ ๐Ÿ”-โ–ถ๏ธ๏ธ โ†ฉ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ–Š. - -/// - -& ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ–Š โšซ๏ธ, ๐Ÿ‘† โœ”๏ธ ๐Ÿฅ โœ” ๐Ÿ“จ ๐Ÿ†Ž `username` & `password` (& ๐ŸŽ ๐Ÿ“ฆ ๐Ÿ‘): - - - -/// note - -โšซ๏ธ ๐Ÿšซ ๐Ÿค” โšซ๏ธโ” ๐Ÿ‘† ๐Ÿ†Ž ๐Ÿ“จ, โšซ๏ธ ๐Ÿ† ๐Ÿšซ ๐Ÿ‘ท. โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿคš ๐Ÿ“ค. - -/// - -๐Ÿ‘‰ โ†—๏ธ ๐Ÿšซ ๐Ÿ•ธ ๐Ÿ ๐Ÿ‘ฉโ€๐Ÿ’ป, โœ‹๏ธ โšซ๏ธ ๐Ÿ‘‘ ๐Ÿง ๐Ÿงฐ ๐Ÿ“„ ๐Ÿ–ฅ ๐ŸŒ ๐Ÿ‘† ๐Ÿ› ๏ธ. - -โšซ๏ธ ๐Ÿ’ช โš™๏ธ ๐Ÿ•ธ ๐Ÿ‰ (๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ‘†). - -โšซ๏ธ ๐Ÿ’ช โš™๏ธ ๐Ÿฅ‰ ๐Ÿฅณ ๐Ÿˆธ & โš™๏ธ. - -& โšซ๏ธ ๐Ÿ’ช โš™๏ธ ๐Ÿ‘†, โ„น, โœ… & ๐Ÿ’ฏ ๐ŸŽ ๐Ÿˆธ. - -## `password` ๐Ÿ’ง - -๐Ÿ”œ โžก๏ธ ๐Ÿšถ ๐Ÿ”™ ๐Ÿ‘„ & ๐Ÿค” โšซ๏ธโ” ๐ŸŒ ๐Ÿ‘ˆ. - -`password` "๐Ÿ’ง" 1๏ธโƒฃ ๐ŸŒŒ ("๐Ÿ’ง") ๐Ÿ”ฌ Oauth2๏ธโƒฃ, ๐Ÿต ๐Ÿ’‚โ€โ™‚ & ๐Ÿค. - -Oauth2๏ธโƒฃ ๐Ÿ”ง ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป โš–๏ธ ๐Ÿ› ๏ธ ๐Ÿ’ช ๐Ÿ”ฌ ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿ”“ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -โœ‹๏ธ ๐Ÿ‘‰ ๐Ÿ’ผ, ๐ŸŽ **FastAPI** ๐Ÿˆธ ๐Ÿ”œ ๐Ÿต ๐Ÿ› ๏ธ & ๐Ÿค. - -, โžก๏ธ ๐Ÿ“„ โšซ๏ธ โšช๏ธโžก๏ธ ๐Ÿ‘ˆ ๐Ÿ“‰ โ˜ ๐ŸŽ‘: - -* ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ†Ž `username` & `password` ๐Ÿ•ธ, & ๐ŸŽฏ `Enter`. -* ๐Ÿ•ธ (๐Ÿƒโ€โ™‚ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ–ฅ) ๐Ÿ“จ ๐Ÿ‘ˆ `username` & `password` ๐ŸŽฏ ๐Ÿ“› ๐Ÿ‘† ๐Ÿ› ๏ธ (๐Ÿ“ฃ โฎ๏ธ `tokenUrl="token"`). -* ๐Ÿ› ๏ธ โœ… ๐Ÿ‘ˆ `username` & `password`, & ๐Ÿ“จ โฎ๏ธ "๐Ÿค" (๐Ÿ‘ฅ ๐Ÿšซ ๐Ÿ› ๏ธ ๐Ÿ™† ๐Ÿ‘‰). - * "๐Ÿค" ๐ŸŽป โฎ๏ธ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ โช โœ” ๐Ÿ‘‰ ๐Ÿ‘ฉโ€๐Ÿ’ป. - * ๐Ÿ›Ž, ๐Ÿค โš’ ๐Ÿ•› โฎ๏ธ ๐Ÿ•ฐ. - * , ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ โœ”๏ธ ๐Ÿ•น ๐Ÿ”„ โ˜ โช. - * & ๐Ÿšฅ ๐Ÿค ๐Ÿ“Ž, โš  ๐ŸŒ˜. โšซ๏ธ ๐Ÿšซ ๐Ÿ’– ๐Ÿงฒ ๐Ÿ”‘ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ‘ท โ™พ (๐Ÿ† ๐Ÿ’ผ). -* ๐Ÿ•ธ ๐Ÿช ๐Ÿ‘ˆ ๐Ÿค ๐Ÿ• ๐Ÿ‘ฑ. -* ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ–Š ๐Ÿ•ธ ๐Ÿšถ โž•1๏ธโƒฃ ๐Ÿ“„ ๐Ÿ•ธ ๐Ÿ•ธ ๐Ÿ“ฑ. -* ๐Ÿ•ธ ๐Ÿ’ช โ˜• ๐ŸŒ… ๐Ÿ’ฝ โšช๏ธโžก๏ธ ๐Ÿ› ๏ธ. - * โœ‹๏ธ โšซ๏ธ ๐Ÿ’ช ๐Ÿค ๐Ÿ‘ˆ ๐ŸŽฏ ๐Ÿ”—. - * , ๐Ÿ”“ โฎ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ, โšซ๏ธ ๐Ÿ“จ ๐ŸŽš `Authorization` โฎ๏ธ ๐Ÿ’ฒ `Bearer ` โž• ๐Ÿค. - * ๐Ÿšฅ ๐Ÿค ๐Ÿ”Œ `foobar`, ๐ŸŽš `Authorization` ๐ŸŽš ๐Ÿ”œ: `Bearer foobar`. - -## **FastAPI**'โ“‚ `OAuth2PasswordBearer` - -**FastAPI** ๐Ÿšš ๐Ÿ“š ๐Ÿงฐ, ๐ŸŽ ๐ŸŽš โš›, ๐Ÿ› ๏ธ ๐Ÿ‘ซ ๐Ÿ’‚โ€โ™‚ โš’. - -๐Ÿ‘‰ ๐Ÿ–ผ ๐Ÿ‘ฅ ๐Ÿ”œ โš™๏ธ **Oauth2๏ธโƒฃ**, โฎ๏ธ **๐Ÿ”** ๐Ÿ’ง, โš™๏ธ **๐Ÿ“จ** ๐Ÿค. ๐Ÿ‘ฅ ๐Ÿ‘ˆ โš™๏ธ `OAuth2PasswordBearer` ๐ŸŽ“. - -/// info - -"๐Ÿ“จ" ๐Ÿค ๐Ÿšซ ๐Ÿ•ด ๐ŸŽ›. - -โœ‹๏ธ โšซ๏ธ ๐Ÿ† 1๏ธโƒฃ ๐Ÿ‘† โš™๏ธ ๐Ÿ’ผ. - - & โšซ๏ธ ๐Ÿ’ช ๐Ÿ† ๐Ÿ† โš™๏ธ ๐Ÿ’ผ, ๐Ÿšฅ ๐Ÿ‘† Oauth2๏ธโƒฃ ๐Ÿ•ด & ๐Ÿ’ญ โšซ๏ธโ” โšซ๏ธโ” ๐Ÿ“ค โž•1๏ธโƒฃ ๐ŸŽ› ๐Ÿ‘ˆ โ™ฃ ๐Ÿ‘ป ๐Ÿ‘† ๐Ÿ’ช. - -๐Ÿ‘ˆ ๐Ÿ’ผ, **FastAPI** ๐Ÿšš ๐Ÿ‘† โฎ๏ธ ๐Ÿงฐ ๐Ÿ— โšซ๏ธ. - -/// - -๐Ÿ•โ” ๐Ÿ‘ฅ โœ ๐Ÿ‘ `OAuth2PasswordBearer` ๐ŸŽ“ ๐Ÿ‘ฅ ๐Ÿšถโ€โ™€๏ธ `tokenUrl` ๐Ÿ”ข. ๐Ÿ‘‰ ๐Ÿ”ข ๐Ÿ”Œ ๐Ÿ“› ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป (๐Ÿ•ธ ๐Ÿƒ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ–ฅ) ๐Ÿ”œ โš™๏ธ ๐Ÿ“จ `username` & `password` โœ” ๐Ÿคš ๐Ÿค. - -{* ../../docs_src/security/tutorial001.py hl[6] *} - -/// tip - -๐Ÿ“ฅ `tokenUrl="token"` ๐Ÿ”— โš– ๐Ÿ“› `token` ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿšซ โœ. โšซ๏ธ โš– ๐Ÿ“›, โšซ๏ธ ๐ŸŒ“ `./token`. - -โ†ฉ๏ธ ๐Ÿ‘ฅ โš™๏ธ โš– ๐Ÿ“›, ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ”Ž `https://example.com/`, โคด๏ธ โšซ๏ธ ๐Ÿ”œ ๐Ÿ”— `https://example.com/token`. โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ”Ž `https://example.com/api/v1/`, โคด๏ธ โšซ๏ธ ๐Ÿ”œ ๐Ÿ”— `https://example.com/api/v1/token`. - -โš™๏ธ โš– ๐Ÿ“› โš  โš’ ๐Ÿ’ญ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿšง ๐Ÿ‘ท ๐Ÿง โš™๏ธ ๐Ÿ’ผ ๐Ÿ’– [โ›… ๐Ÿ—ณ](../../advanced/behind-a-proxy.md){.internal-link target=_blank}. - -/// - -๐Ÿ‘‰ ๐Ÿ”ข ๐Ÿšซ โœ ๐Ÿ‘ˆ ๐Ÿ”— / *โžก ๐Ÿ› ๏ธ*, โœ‹๏ธ ๐Ÿ“ฃ ๐Ÿ‘ˆ ๐Ÿ“› `/token` ๐Ÿ”œ 1๏ธโƒฃ ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ โš™๏ธ ๐Ÿคš ๐Ÿค. ๐Ÿ‘ˆ โ„น โš™๏ธ ๐Ÿ—„, & โคด๏ธ ๐ŸŽ“ ๐Ÿ› ๏ธ ๐Ÿงพ โš™๏ธ. - -๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ”œ โœ โ˜‘ โžก ๐Ÿ› ๏ธ. - -/// info - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“ถ โš  "โœ" ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘Ž ๐Ÿ‘— ๐Ÿ”ข ๐Ÿ“› `tokenUrl` โ†ฉ๏ธ `token_url`. - -๐Ÿ‘ˆ โ†ฉ๏ธ โšซ๏ธ โš™๏ธ ๐ŸŽ ๐Ÿ“› ๐Ÿ—„ ๐Ÿ”Œ. ๐Ÿ‘ˆ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ™† ๐Ÿ‘ซ ๐Ÿ’‚โ€โ™‚ โš– ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“ & ๐Ÿ“‹ โšซ๏ธ ๐Ÿ”Ž ๐ŸŒ– โ„น ๐Ÿ”ƒ โšซ๏ธ. - -/// - -`oauth2_scheme` ๐Ÿ”ข ๐Ÿ‘ `OAuth2PasswordBearer`, โœ‹๏ธ โšซ๏ธ "๐Ÿ‡ง๐Ÿ‡ฒ". - -โšซ๏ธ ๐Ÿ’ช ๐Ÿค™: - -```Python -oauth2_scheme(some, parameters) -``` - -, โšซ๏ธ ๐Ÿ’ช โš™๏ธ โฎ๏ธ `Depends`. - -### โš™๏ธ โšซ๏ธ - -๐Ÿ”œ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘ˆ `oauth2_scheme` ๐Ÿ”— โฎ๏ธ `Depends`. - -{* ../../docs_src/security/tutorial001.py hl[10] *} - -๐Ÿ‘‰ ๐Ÿ”— ๐Ÿ”œ ๐Ÿšš `str` ๐Ÿ‘ˆ ๐Ÿ› ๏ธ ๐Ÿ”ข `token` *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -**FastAPI** ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ’ช โš™๏ธ ๐Ÿ‘‰ ๐Ÿ”— ๐Ÿ”ฌ "๐Ÿ’‚โ€โ™‚ โš–" ๐Ÿ—„ ๐Ÿ”— (& ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ). - -/// info | ๐Ÿ“ก โ„น - -**FastAPI** ๐Ÿ”œ ๐Ÿ’ญ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ’ช โš™๏ธ ๐ŸŽ“ `OAuth2PasswordBearer` (๐Ÿ“ฃ ๐Ÿ”—) ๐Ÿ”ฌ ๐Ÿ’‚โ€โ™‚ โš– ๐Ÿ—„ โ†ฉ๏ธ โšซ๏ธ ๐Ÿ˜– โšช๏ธโžก๏ธ `fastapi.security.oauth2.OAuth2`, โ” ๐Ÿ”„ ๐Ÿ˜– โšช๏ธโžก๏ธ `fastapi.security.base.SecurityBase`. - -๐ŸŒ ๐Ÿ’‚โ€โ™‚ ๐Ÿš™ ๐Ÿ‘ˆ ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ—„ (& ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ) ๐Ÿ˜– โšช๏ธโžก๏ธ `SecurityBase`, ๐Ÿ‘ˆ โ” **FastAPI** ๐Ÿ’ช ๐Ÿ’ญ โ” ๐Ÿ› ๏ธ ๐Ÿ‘ซ ๐Ÿ—„. - -/// - -## โšซ๏ธโ” โšซ๏ธ ๐Ÿ”จ - -โšซ๏ธ ๐Ÿ”œ ๐Ÿšถ & ๐Ÿ‘€ ๐Ÿ“จ ๐Ÿ‘ˆ `Authorization` ๐ŸŽš, โœ… ๐Ÿšฅ ๐Ÿ’ฒ `Bearer ` โž• ๐Ÿค, & ๐Ÿ”œ ๐Ÿ“จ ๐Ÿค `str`. - -๐Ÿšฅ โšซ๏ธ ๐Ÿšซ ๐Ÿ‘€ `Authorization` ๐ŸŽš, โš–๏ธ ๐Ÿ’ฒ ๐Ÿšซ โœ”๏ธ `Bearer ` ๐Ÿค, โšซ๏ธ ๐Ÿ”œ ๐Ÿ“จ โฎ๏ธ 4๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ ๐Ÿ‘” ๐Ÿ“Ÿ โŒ (`UNAUTHORIZED`) ๐Ÿ”—. - -๐Ÿ‘† ๐Ÿšซ โœ”๏ธ โœ… ๐Ÿšฅ ๐Ÿค ๐Ÿ”€ ๐Ÿ“จ โŒ. ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ”ข ๐Ÿ› ๏ธ, โšซ๏ธ ๐Ÿ”œ โœ”๏ธ `str` ๐Ÿ‘ˆ ๐Ÿค. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”„ โšซ๏ธ โช ๐ŸŽ“ ๐Ÿฉบ: - - - -๐Ÿ‘ฅ ๐Ÿšซ โœ” ๐Ÿ”ฌ ๐Ÿค, โœ‹๏ธ ๐Ÿ‘ˆ โ–ถ๏ธ โช. - -## ๐ŸŒƒ - -, 3๏ธโƒฃ โš–๏ธ 4๏ธโƒฃ โž• โธ, ๐Ÿ‘† โช โœ”๏ธ ๐Ÿ’ ๐Ÿ“จ ๐Ÿ’‚โ€โ™‚. diff --git a/docs/em/docs/tutorial/security/get-current-user.md b/docs/em/docs/tutorial/security/get-current-user.md deleted file mode 100644 index 2f4a26f35..000000000 --- a/docs/em/docs/tutorial/security/get-current-user.md +++ /dev/null @@ -1,105 +0,0 @@ -# ๐Ÿคš โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป - -โฎ๏ธ ๐Ÿ“ƒ ๐Ÿ’‚โ€โ™‚ โš™๏ธ (โ” ๐Ÿงข ๐Ÿ”› ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ) ๐Ÿค *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* `token` `str`: - -{* ../../docs_src/security/tutorial001.py hl[10] *} - -โœ‹๏ธ ๐Ÿ‘ˆ ๐Ÿšซ ๐Ÿ‘ˆ โš . - -โžก๏ธ โš’ โšซ๏ธ ๐Ÿค ๐Ÿ‘ฅ โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -## โœ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿท - -๐Ÿฅ‡, โžก๏ธ โœ Pydantic ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿท. - -๐ŸŽ ๐ŸŒŒ ๐Ÿ‘ฅ โš™๏ธ Pydantic ๐Ÿ“ฃ ๐Ÿ’ช, ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ โšซ๏ธ ๐Ÿ™† ๐Ÿ™†: - -{* ../../docs_src/security/tutorial002.py hl[5,12:16] *} - -## โœ `get_current_user` ๐Ÿ”— - -โžก๏ธ โœ ๐Ÿ”— `get_current_user`. - -๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ”— ๐Ÿ’ช โœ”๏ธ ๐ŸŽง-๐Ÿ”— โ“ - -`get_current_user` ๐Ÿ”œ โœ”๏ธ ๐Ÿ”— โฎ๏ธ ๐ŸŽ `oauth2_scheme` ๐Ÿ‘ฅ โœ โญ. - -๐ŸŽ ๐Ÿ‘ฅ ๐Ÿ”จ โญ *โžก ๐Ÿ› ๏ธ* ๐Ÿ”—, ๐Ÿ‘† ๐Ÿ†• ๐Ÿ”— `get_current_user` ๐Ÿ”œ ๐Ÿ“จ `token` `str` โšช๏ธโžก๏ธ ๐ŸŽง-๐Ÿ”— `oauth2_scheme`: - -{* ../../docs_src/security/tutorial002.py hl[25] *} - -## ๐Ÿคš ๐Ÿ‘ฉโ€๐Ÿ’ป - -`get_current_user` ๐Ÿ”œ โš™๏ธ (โŒ) ๐Ÿš™ ๐Ÿ”ข ๐Ÿ‘ฅ โœ, ๐Ÿ‘ˆ โœŠ ๐Ÿค `str` & ๐Ÿ“จ ๐Ÿ‘† Pydantic `User` ๐Ÿท: - -{* ../../docs_src/security/tutorial002.py hl[19:22,26:27] *} - -## ๐Ÿ’‰ โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป - -๐Ÿ”œ ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ ๐ŸŽ `Depends` โฎ๏ธ ๐Ÿ‘† `get_current_user` *โžก ๐Ÿ› ๏ธ*: - -{* ../../docs_src/security/tutorial002.py hl[31] *} - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐Ÿ“ฃ ๐Ÿ†Ž `current_user` Pydantic ๐Ÿท `User`. - -๐Ÿ‘‰ ๐Ÿ”œ โ„น ๐Ÿ‡บ๐Ÿ‡ฒ ๐Ÿ”˜ ๐Ÿ”ข โฎ๏ธ ๐ŸŒ ๐Ÿ› ๏ธ & ๐Ÿ†Ž โœ…. - -/// tip - -๐Ÿ‘† 5๏ธโƒฃ๐Ÿ“† ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ“จ ๐Ÿ’ช ๐Ÿ“ฃ โฎ๏ธ Pydantic ๐Ÿท. - -๐Ÿ“ฅ **FastAPI** ๐Ÿ† ๐Ÿšซ ๐Ÿคš ๐Ÿ˜จ โ†ฉ๏ธ ๐Ÿ‘† โš™๏ธ `Depends`. - -/// - -/// check - -๐ŸŒŒ ๐Ÿ‘‰ ๐Ÿ”— โš™๏ธ ๐Ÿ— โœ” ๐Ÿ‘ฅ โœ”๏ธ ๐ŸŽ ๐Ÿ”— (๐ŸŽ "โ˜‘") ๐Ÿ‘ˆ ๐ŸŒ ๐Ÿ“จ `User` ๐Ÿท. - -๐Ÿ‘ฅ ๐Ÿšซ ๐Ÿšซ โœ”๏ธ ๐Ÿ•ด 1๏ธโƒฃ ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ†Ž ๐Ÿ’ฝ. - -/// - -## ๐ŸŽ ๐Ÿท - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”œ ๐Ÿคš โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”— *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข* & ๐Ÿ™… โฎ๏ธ ๐Ÿ’‚โ€โ™‚ ๐Ÿ› ๏ธ **๐Ÿ”— ๐Ÿ’‰** ๐ŸŽš, โš™๏ธ `Depends`. - -& ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ™† ๐Ÿท โš–๏ธ ๐Ÿ’ฝ ๐Ÿ’‚โ€โ™‚ ๐Ÿ“„ (๐Ÿ‘‰ ๐Ÿ’ผ, Pydantic ๐Ÿท `User`). - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿšซ ๐Ÿšซ โš™๏ธ ๐ŸŽฏ ๐Ÿ’ฝ ๐Ÿท, ๐ŸŽ“ โš–๏ธ ๐Ÿ†Ž. - -๐Ÿ‘† ๐Ÿ’š โœ”๏ธ `id` & `email` & ๐Ÿšซ โœ”๏ธ ๐Ÿ™† `username` ๐Ÿ‘† ๐Ÿท โ“ ๐Ÿ’ญ. ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘‰ ๐ŸŽ ๐Ÿงฐ. - -๐Ÿ‘† ๐Ÿ’š โœ”๏ธ `str`โ“ โš–๏ธ `dict`โ“ โš–๏ธ ๐Ÿ’ฝ ๐ŸŽ“ ๐Ÿท ๐Ÿ‘ ๐Ÿ”— โ“ โšซ๏ธ ๐ŸŒ ๐Ÿ‘ท ๐ŸŽ ๐ŸŒŒ. - -๐Ÿ‘† ๐Ÿค™ ๐Ÿšซ โœ”๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘ˆ ๐Ÿ•น ๐Ÿ‘† ๐Ÿˆธ โœ‹๏ธ ๐Ÿค–, ๐Ÿค–, โš–๏ธ ๐ŸŽ โš™๏ธ, ๐Ÿ‘ˆ โœ”๏ธ ๐Ÿ” ๐Ÿค โ“ ๐Ÿ”„, โšซ๏ธ ๐ŸŒ ๐Ÿ‘ท ๐ŸŽ. - -โš™๏ธ ๐Ÿ™† ๐Ÿ˜‡ ๐Ÿท, ๐Ÿ™† ๐Ÿ˜‡ ๐ŸŽ“, ๐Ÿ™† ๐Ÿ˜‡ ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘† ๐Ÿˆธ. **FastAPI** โœ”๏ธ ๐Ÿ‘† ๐Ÿ“” โฎ๏ธ ๐Ÿ”— ๐Ÿ’‰ โš™๏ธ. - -## ๐Ÿ“Ÿ ๐Ÿ“ - -๐Ÿ‘‰ ๐Ÿ–ผ 5๏ธโƒฃ๐Ÿ“† ๐Ÿ˜‘ ๐Ÿ”. โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ‘ฅ ๐ŸŒ€ ๐Ÿ’‚โ€โ™‚, ๐Ÿ“Š ๐Ÿท, ๐Ÿš™ ๐Ÿ”ข & *โžก ๐Ÿ› ๏ธ* ๐ŸŽ ๐Ÿ“. - -โœ‹๏ธ ๐Ÿ“ฅ ๐Ÿ”‘ โ˜. - -๐Ÿ’‚โ€โ™‚ & ๐Ÿ”— ๐Ÿ’‰ ๐Ÿ’ฉ โœ ๐Ÿ•. - -& ๐Ÿ‘† ๐Ÿ’ช โš’ โšซ๏ธ ๐Ÿ— ๐Ÿ‘† ๐Ÿ’š. & , โœ”๏ธ โšซ๏ธ โœ ๐Ÿ•ด ๐Ÿ•, ๐Ÿ‘ ๐Ÿฅ‰. โฎ๏ธ ๐ŸŒ ๐Ÿ’ช. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ’ฏ ๐Ÿ”— (*โžก ๐Ÿ› ๏ธ*) โš™๏ธ ๐ŸŽ ๐Ÿ’‚โ€โ™‚ โš™๏ธ. - -& ๐ŸŒ ๐Ÿ‘ซ (โš–๏ธ ๐Ÿ™† โ†” ๐Ÿ‘ซ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š) ๐Ÿ’ช โœŠ ๐Ÿ“ˆ ๐Ÿค-โš™๏ธ ๐Ÿ‘ซ ๐Ÿ”— โš–๏ธ ๐Ÿ™† ๐ŸŽ ๐Ÿ”— ๐Ÿ‘† โœ. - -& ๐ŸŒ ๐Ÿ‘‰ ๐Ÿ’ฏ *โžก ๐Ÿ› ๏ธ* ๐Ÿ’ช ๐Ÿคช 3๏ธโƒฃ โธ: - -{* ../../docs_src/security/tutorial002.py hl[30:32] *} - -## ๐ŸŒƒ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”œ ๐Ÿคš โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”— ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ ๐Ÿ”ข*. - -๐Ÿ‘ฅ โช ๐Ÿ˜ฌ ๐Ÿ“ค. - -๐Ÿ‘ฅ ๐Ÿ’ช ๐Ÿšฎ *โžก ๐Ÿ› ๏ธ* ๐Ÿ‘ฉโ€๐Ÿ’ป/๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿค™ ๐Ÿ“จ `username` & `password`. - -๐Ÿ‘ˆ ๐Ÿ‘Ÿ โญ. diff --git a/docs/em/docs/tutorial/security/index.md b/docs/em/docs/tutorial/security/index.md deleted file mode 100644 index 1a47e5510..000000000 --- a/docs/em/docs/tutorial/security/index.md +++ /dev/null @@ -1,106 +0,0 @@ -# ๐Ÿ’‚โ€โ™‚ - -๐Ÿ“ค ๐Ÿ“š ๐ŸŒŒ ๐Ÿต ๐Ÿ’‚โ€โ™‚, ๐Ÿค & โœ”. - -& โšซ๏ธ ๐Ÿ›Ž ๐Ÿ— & "โš " โ”. - -๐Ÿ“š ๐Ÿ› ๏ธ & โš™๏ธ ๐Ÿต ๐Ÿ’‚โ€โ™‚ & ๐Ÿค โœŠ ๐Ÿฆ ๐Ÿ’ธ ๐ŸŽฏ & ๐Ÿ“Ÿ (๐Ÿ“š ๐Ÿ’ผ โšซ๏ธ ๐Ÿ’ช 5๏ธโƒฃ0๏ธโƒฃ ๐Ÿ’ฏ โš–๏ธ ๐ŸŒ… ๐ŸŒ ๐Ÿ“Ÿ โœ). - -**FastAPI** ๐Ÿšš ๐Ÿ“š ๐Ÿงฐ โ„น ๐Ÿ‘† ๐Ÿ™… โฎ๏ธ **๐Ÿ’‚โ€โ™‚** ๐Ÿ’ช, ๐Ÿ“‰, ๐Ÿฉ ๐ŸŒŒ, ๐Ÿต โœ”๏ธ ๐Ÿ”ฌ & ๐Ÿ’ก ๐ŸŒ ๐Ÿ’‚โ€โ™‚ ๐Ÿ”ง. - -โœ‹๏ธ ๐Ÿฅ‡, โžก๏ธ โœ… ๐Ÿคช ๐Ÿ”ง. - -## ๐Ÿƒ โ“ - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’… ๐Ÿ”ƒ ๐Ÿ™† ๐Ÿ‘‰ โš– & ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ’‚โ€โ™‚ โฎ๏ธ ๐Ÿค โš“๏ธ ๐Ÿ”› ๐Ÿ†” & ๐Ÿ” *โ–ถ๏ธ๏ธ ๐Ÿ”œ*, ๐Ÿšถ โญ ๐Ÿ“ƒ. - -## Oauth2๏ธโƒฃ - -Oauth2๏ธโƒฃ ๐Ÿ”ง ๐Ÿ‘ˆ ๐Ÿ”ฌ ๐Ÿ“š ๐ŸŒŒ ๐Ÿต ๐Ÿค & โœ”. - -โšซ๏ธ ๐Ÿ”ฌ ๐Ÿ”ง & ๐Ÿ“” ๐Ÿ“š ๐Ÿ— โš™๏ธ ๐Ÿ’ผ. - -โšซ๏ธ ๐Ÿ”Œ ๐ŸŒŒ ๐Ÿ”“ โš™๏ธ "๐Ÿฅ‰ ๐Ÿฅณ". - -๐Ÿ‘ˆ โšซ๏ธโ” ๐ŸŒ โš™๏ธ โฎ๏ธ "๐Ÿ’ณ โฎ๏ธ ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ“‚" โš™๏ธ ๐Ÿ”˜. - -### โœณ 1๏ธโƒฃ - -๐Ÿ“ค โœณ 1๏ธโƒฃ, โ” ๐Ÿ“ถ ๐ŸŽ โšช๏ธโžก๏ธ Oauth2๏ธโƒฃ, & ๐ŸŒ– ๐Ÿ—, โšซ๏ธ ๐Ÿ”Œ ๐Ÿ”— ๐Ÿ”ง ๐Ÿ”› โ” ๐Ÿ—œ ๐Ÿ“ป. - -โšซ๏ธ ๐Ÿšซ ๐Ÿ“ถ ๐ŸŒŸ โš–๏ธ โš™๏ธ ๐Ÿ›Ž. - -Oauth2๏ธโƒฃ ๐Ÿšซ โœ” โ” ๐Ÿ—œ ๐Ÿ“ป, โšซ๏ธ โŒ› ๐Ÿ‘† โœ”๏ธ ๐Ÿ‘† ๐Ÿˆธ ๐Ÿฆ โฎ๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”. - -/// tip - -๐Ÿ“„ ๐Ÿ”ƒ **๐Ÿ› ๏ธ** ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โ” โš’ ๐Ÿ†™ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ†“, โš™๏ธ Traefik & โžก๏ธ ๐Ÿ—œ. - -/// - -## ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”— - -๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”— โž•1๏ธโƒฃ ๐Ÿ”ง, ๐Ÿงข ๐Ÿ”› **Oauth2๏ธโƒฃ**. - -โšซ๏ธ โ†” Oauth2๏ธโƒฃ โœ” ๐Ÿ‘œ ๐Ÿ‘ˆ ๐Ÿ“ถ ๐ŸŒŒ Oauth2๏ธโƒฃ, ๐Ÿ”„ โš’ โšซ๏ธ ๐ŸŒ… ๐Ÿ› ๏ธ. - -๐Ÿ–ผ, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ’ณ โš™๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”— (โ” ๐Ÿ”˜ โš™๏ธ Oauth2๏ธโƒฃ). - -โœ‹๏ธ ๐Ÿ‘ฑ๐Ÿ“” ๐Ÿ’ณ ๐Ÿšซ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”—. โšซ๏ธ โœ”๏ธ ๐Ÿšฎ ๐Ÿ‘ ๐Ÿ› Oauth2๏ธโƒฃ. - -### ๐Ÿ‘ฉโ€๐Ÿ’ป (๐Ÿšซ "๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”—") - -๐Ÿ“ค "๐Ÿ‘ฉโ€๐Ÿ’ป" ๐Ÿ”ง. ๐Ÿ‘ˆ ๐Ÿ”„ โŽ ๐ŸŽ ๐Ÿ‘œ **๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”—**, โœ‹๏ธ ๐Ÿšซ โš“๏ธ ๐Ÿ”› Oauth2๏ธโƒฃ. - -, โšซ๏ธ ๐Ÿ ๐ŸŒ– โš™๏ธ. - -โšซ๏ธ ๐Ÿšซ ๐Ÿ“ถ ๐ŸŒŸ โš–๏ธ โš™๏ธ ๐Ÿ›Ž. - -## ๐Ÿ—„ - -๐Ÿ—„ (โช ๐Ÿ’ญ ๐Ÿฆ) ๐Ÿ“‚ ๐Ÿ”ง ๐Ÿ— ๐Ÿ”— (๐Ÿ”œ ๐Ÿ• ๐Ÿ’พ ๐Ÿ›). - -**FastAPI** โš“๏ธ ๐Ÿ”› **๐Ÿ—„**. - -๐Ÿ‘ˆ โšซ๏ธโ” โš’ โšซ๏ธ ๐Ÿ’ช โœ”๏ธ ๐Ÿ’— ๐Ÿง ๐ŸŽ“ ๐Ÿงพ ๐Ÿ”ข, ๐Ÿ“Ÿ โšก, โ™’๏ธ. - -๐Ÿ—„ โœ”๏ธ ๐ŸŒŒ ๐Ÿ”ฌ ๐Ÿ’— ๐Ÿ’‚โ€โ™‚ "โš–". - -โš™๏ธ ๐Ÿ‘ซ, ๐Ÿ‘† ๐Ÿ’ช โœŠ ๐Ÿ“ˆ ๐ŸŒ ๐Ÿ‘ซ ๐Ÿฉ-โš“๏ธ ๐Ÿงฐ, ๐Ÿ”Œ ๐Ÿ‘‰ ๐ŸŽ“ ๐Ÿงพ โš™๏ธ. - -๐Ÿ—„ ๐Ÿ”ฌ ๐Ÿ“„ ๐Ÿ’‚โ€โ™‚ โš–: - -* `apiKey`: ๐Ÿˆธ ๐ŸŽฏ ๐Ÿ”‘ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ: - * ๐Ÿ”ข ๐Ÿ”ข. - * ๐ŸŽš. - * ๐Ÿช. -* `http`: ๐Ÿฉ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿค โš™๏ธ, ๐Ÿ”Œ: - * `bearer`: ๐ŸŽš `Authorization` โฎ๏ธ ๐Ÿ’ฒ `Bearer ` โž• ๐Ÿค. ๐Ÿ‘‰ ๐Ÿ˜– โšช๏ธโžก๏ธ Oauth2๏ธโƒฃ. - * ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ”ฐ ๐Ÿค. - * ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” ๐Ÿ“ฐ, โ™’๏ธ. -* `oauth2`: ๐ŸŒ Oauth2๏ธโƒฃ ๐ŸŒŒ ๐Ÿต ๐Ÿ’‚โ€โ™‚ (๐Ÿค™ "๐Ÿ’ง"). - * ๐Ÿ“š ๐Ÿ‘ซ ๐Ÿ’ง โ˜‘ ๐Ÿ— โœณ 2๏ธโƒฃ.0๏ธโƒฃ ๐Ÿค ๐Ÿ•โ€๐Ÿฆบ (๐Ÿ’– ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ“‚, โ™’๏ธ): - * `implicit` - * `clientCredentials` - * `authorizationCode` - * โœ‹๏ธ ๐Ÿ“ค 1๏ธโƒฃ ๐ŸŽฏ "๐Ÿ’ง" ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ‘Œ โš™๏ธ ๐Ÿšš ๐Ÿค ๐ŸŽ ๐Ÿˆธ ๐Ÿ”—: - * `password`: โญ ๐Ÿ“ƒ ๐Ÿ”œ ๐Ÿ“” ๐Ÿ–ผ ๐Ÿ‘‰. -* `openIdConnect`: โœ”๏ธ ๐ŸŒŒ ๐Ÿ”ฌ โ” ๐Ÿ”Ž Oauth2๏ธโƒฃ ๐Ÿค ๐Ÿ“Š ๐Ÿ”. - * ๐Ÿ‘‰ ๐Ÿง ๐Ÿ” โšซ๏ธโ” ๐Ÿ”ฌ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”— ๐Ÿ”ง. - - -/// tip - -๐Ÿ› ๏ธ ๐ŸŽ ๐Ÿค/โœ” ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ’– ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ“‚, โ™’๏ธ. ๐Ÿ’ช & ๐Ÿ“ถ โฉ. - -๐ŸŒ… ๐Ÿ— โš  ๐Ÿ— ๐Ÿค/โœ” ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ’– ๐Ÿ‘ˆ, โœ‹๏ธ **FastAPI** ๐Ÿค ๐Ÿ‘† ๐Ÿงฐ โšซ๏ธ ๐Ÿ’ช, โช ๐Ÿ”จ ๐Ÿ‹๏ธ ๐Ÿ‹โ€โ™‚ ๐Ÿ‘†. - -/// - -## **FastAPI** ๐Ÿš™ - -FastAPI ๐Ÿšš ๐Ÿ“š ๐Ÿงฐ ๐Ÿ”  ๐Ÿ‘‰ ๐Ÿ’‚โ€โ™‚ โš– `fastapi.security` ๐Ÿ•น ๐Ÿ‘ˆ ๐Ÿ“‰ โš™๏ธ ๐Ÿ‘‰ ๐Ÿ’‚โ€โ™‚ ๐Ÿ› ๏ธ. - -โญ ๐Ÿ“ƒ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โ” ๐Ÿšฎ ๐Ÿ’‚โ€โ™‚ ๐Ÿ‘† ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿ“š ๐Ÿงฐ ๐Ÿšš **FastAPI**. - -& ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โ” โšซ๏ธ ๐Ÿคš ๐Ÿ” ๐Ÿ› ๏ธ ๐Ÿ”˜ ๐ŸŽ“ ๐Ÿงพ โš™๏ธ. diff --git a/docs/em/docs/tutorial/security/oauth2-jwt.md b/docs/em/docs/tutorial/security/oauth2-jwt.md deleted file mode 100644 index ee7bc2d28..000000000 --- a/docs/em/docs/tutorial/security/oauth2-jwt.md +++ /dev/null @@ -1,275 +0,0 @@ -# Oauth2๏ธโƒฃ โฎ๏ธ ๐Ÿ” (& ๐Ÿ”), ๐Ÿ“จ โฎ๏ธ ๐Ÿฅ™ ๐Ÿค - -๐Ÿ”œ ๐Ÿ‘ˆ ๐Ÿ‘ฅ โœ”๏ธ ๐ŸŒ ๐Ÿ’‚โ€โ™‚ ๐Ÿ’ง, โžก๏ธ โš’ ๐Ÿˆธ ๐Ÿค™ ๐Ÿ”, โš™๏ธ ๐Ÿฅ™ ๐Ÿค & ๐Ÿ” ๐Ÿ” ๐Ÿ”. - -๐Ÿ‘‰ ๐Ÿ“Ÿ ๐Ÿ•ณ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค™ โš™๏ธ ๐Ÿ‘† ๐Ÿˆธ, ๐Ÿ–Š ๐Ÿ” #๏ธโƒฃ ๐Ÿ‘† ๐Ÿ’ฝ, โ™’๏ธ. - -๐Ÿ‘ฅ ๐Ÿ”œ โ–ถ๏ธ โšช๏ธโžก๏ธ ๐ŸŒโ” ๐Ÿ‘ฅ โ—€๏ธ โฎ๏ธ ๐Ÿ“ƒ & ๐Ÿ“ˆ โšซ๏ธ. - -## ๐Ÿ”ƒ ๐Ÿฅ™ - -๐Ÿฅ™ โ›“ "๐ŸŽป ๐Ÿ•ธ ๐Ÿค". - -โšซ๏ธ ๐Ÿฉ ๐Ÿšซ ๐ŸŽป ๐ŸŽš ๐Ÿ“ ๐Ÿ’ง ๐ŸŽป ๐Ÿต ๐Ÿš€. โšซ๏ธ ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ‘‰: - -``` -eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c -``` - -โšซ๏ธ ๐Ÿšซ ๐Ÿ—œ,, ๐Ÿ™† ๐Ÿ’ช ๐Ÿ›ก โ„น โšช๏ธโžก๏ธ ๐ŸŽš. - -โœ‹๏ธ โšซ๏ธ ๐Ÿ›‘. , ๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ“จ ๐Ÿค ๐Ÿ‘ˆ ๐Ÿ‘† โ™จ, ๐Ÿ‘† ๐Ÿ’ช โœ” ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿค™ โ™จ โšซ๏ธ. - -๐Ÿ‘ˆ ๐ŸŒŒ, ๐Ÿ‘† ๐Ÿ’ช โœ ๐Ÿค โฎ๏ธ ๐Ÿ‘”, โžก๏ธ ๐Ÿ’ฌ, 1๏ธโƒฃ ๐Ÿ—“๏ธ. & โคด๏ธ ๐Ÿ•โ” ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘Ÿ ๐Ÿ”™ โญ ๐Ÿ“† โฎ๏ธ ๐Ÿค, ๐Ÿ‘† ๐Ÿ’ญ ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ•น ๐Ÿ‘† โš™๏ธ. - -โฎ๏ธ ๐Ÿ—“๏ธ, ๐Ÿค ๐Ÿ”œ ๐Ÿ•› & ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿšซ โœ” & ๐Ÿ”œ โœ”๏ธ ๐Ÿ›‘ ๐Ÿ”„ ๐Ÿคš ๐Ÿ†• ๐Ÿค. & ๐Ÿšฅ ๐Ÿ‘ฉโ€๐Ÿ’ป (โš–๏ธ ๐Ÿฅ‰ ๐Ÿฅณ) ๐Ÿ”„ ๐Ÿ”€ ๐Ÿค ๐Ÿ”€ ๐Ÿ‘”, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ”Ž โšซ๏ธ, โ†ฉ๏ธ ๐Ÿ’ณ ๐Ÿ”œ ๐Ÿšซ ๐Ÿ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿคพ โฎ๏ธ ๐Ÿฅ™ ๐Ÿค & ๐Ÿ‘€ โ” ๐Ÿ‘ซ ๐Ÿ‘ท, โœ… https://jwt.io. - -## โŽ `python-jose` - -๐Ÿ‘ฅ ๐Ÿ’ช โŽ `python-jose` ๐Ÿ— & โœ” ๐Ÿฅ™ ๐Ÿค ๐Ÿ: - -
- -```console -$ pip install "python-jose[cryptography]" - ----> 100% -``` - -
- -๐Ÿ-๐Ÿ‡ฉ๐Ÿ‡ฌ ๐Ÿšš ๐Ÿ” ๐Ÿ‘ฉโ€๐Ÿ’ป โž•. - -๐Ÿ“ฅ ๐Ÿ‘ฅ โš™๏ธ ๐Ÿ‘ 1๏ธโƒฃ: )/โš›. - -/// tip - -๐Ÿ‘‰ ๐Ÿ”ฐ โช โš™๏ธ PyJWT. - -โœ‹๏ธ โšซ๏ธ โ„น โš™๏ธ ๐Ÿ-๐Ÿ‡ฉ๐Ÿ‡ฌ โ†ฉ๏ธ โšซ๏ธ ๐Ÿšš ๐ŸŒ โš’ โšช๏ธโžก๏ธ PyJWT โž• โž• ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ช โช ๐Ÿ•โ” ๐Ÿ— ๐Ÿ› ๏ธ โฎ๏ธ ๐ŸŽ ๐Ÿงฐ. - -/// - -## ๐Ÿ” ๐Ÿ” - -"๐Ÿ”" โ›“ ๐Ÿญ ๐ŸŽš (๐Ÿ” ๐Ÿ‘‰ ๐Ÿ’ผ) ๐Ÿ”˜ ๐Ÿ” ๐Ÿ”ข (๐ŸŽป) ๐Ÿ‘ˆ ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ™ƒ. - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿšถโ€โ™€๏ธ โšซ๏ธโ” ๐ŸŽ ๐ŸŽš (โšซ๏ธโ” ๐ŸŽ ๐Ÿ”) ๐Ÿ‘† ๐Ÿคš โšซ๏ธโ” ๐ŸŽ ๐Ÿ™ƒ. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ ๐Ÿ—œ โšช๏ธโžก๏ธ ๐Ÿ™ƒ ๐Ÿ”™ ๐Ÿ”. - -### โšซ๏ธโ” โš™๏ธ ๐Ÿ” ๐Ÿ” - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ฝ ๐Ÿ“Ž, ๐Ÿง™โ€โ™€ ๐Ÿ† ๐Ÿšซ โœ”๏ธ ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป' ๐Ÿ”ข ๐Ÿ”, ๐Ÿ•ด#๏ธโƒฃ. - -, ๐Ÿง™โ€โ™€ ๐Ÿ† ๐Ÿšซ ๐Ÿ’ช ๐Ÿ”„ โš™๏ธ ๐Ÿ‘ˆ ๐Ÿ” โž•1๏ธโƒฃ โš™๏ธ (๐Ÿ“š ๐Ÿ‘ฉโ€๐Ÿ’ป โš™๏ธ ๐ŸŽ ๐Ÿ” ๐ŸŒ, ๐Ÿ‘‰ ๐Ÿ”œ โš ). - -## โŽ `passlib` - -๐Ÿ‡ธ๐Ÿ‡ฒ ๐Ÿ‘‘ ๐Ÿ ๐Ÿ“ฆ ๐Ÿต ๐Ÿ”#๏ธโƒฃ. - -โšซ๏ธ ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ“š ๐Ÿ” ๐Ÿ” ๐Ÿ“Š & ๐Ÿš™ ๐Ÿ‘ท โฎ๏ธ ๐Ÿ‘ซ. - -๐Ÿ‘ ๐Ÿ“Š "๐Ÿก". - -, โŽ ๐Ÿ‡ธ๐Ÿ‡ฒ โฎ๏ธ ๐Ÿก: - -
- -```console -$ pip install "passlib[bcrypt]" - ----> 100% -``` - -
- -/// tip - -โฎ๏ธ `passlib`, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— โšซ๏ธ ๐Ÿ’ช โœ ๐Ÿ” โœ **โœณ**, **๐Ÿบ** ๐Ÿ’‚โ€โ™‚ ๐Ÿ”Œ-โš–๏ธ ๐Ÿ“š ๐ŸŽ. - -, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ’ช, ๐Ÿ–ผ, ๐Ÿ’ฐ ๐ŸŽ ๐Ÿ“Š โšช๏ธโžก๏ธ โœณ ๐Ÿˆธ ๐Ÿ’ฝ โฎ๏ธ FastAPI ๐Ÿˆธ. โš–๏ธ ๐Ÿ“‰ โ†” โœณ ๐Ÿˆธ โš™๏ธ ๐ŸŽ ๐Ÿ’ฝ. - - & ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿ’ช ๐Ÿ’ณ โšช๏ธโžก๏ธ ๐Ÿ‘† โœณ ๐Ÿ“ฑ โš–๏ธ โšช๏ธโžก๏ธ ๐Ÿ‘† **FastAPI** ๐Ÿ“ฑ, ๐ŸŽ ๐Ÿ•ฐ. - -/// - -## #๏ธโƒฃ & โœ” ๐Ÿ” - -๐Ÿ—„ ๐Ÿงฐ ๐Ÿ‘ฅ ๐Ÿ’ช โšช๏ธโžก๏ธ `passlib`. - -โœ ๐Ÿ‡ธ๐Ÿ‡ฒ "๐Ÿ”‘". ๐Ÿ‘‰ โšซ๏ธโ” ๐Ÿ”œ โš™๏ธ #๏ธโƒฃ & โœ” ๐Ÿ”. - -/// tip - -๐Ÿ‡ธ๐Ÿ‡ฒ ๐Ÿ”‘ โœ”๏ธ ๐Ÿ› ๏ธ โš™๏ธ ๐ŸŽ ๐Ÿ” ๐Ÿ“Š, ๐Ÿ”Œ ๐Ÿ˜ข ๐Ÿ— ๐Ÿ• ๐Ÿ•ด โœ” โœ” ๐Ÿ‘ซ, โ™’๏ธ. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โšซ๏ธ โœ & โœ” ๐Ÿ” ๐Ÿ— โž•1๏ธโƒฃ โš™๏ธ (๐Ÿ’– โœณ) โœ‹๏ธ #๏ธโƒฃ ๐Ÿ™† ๐Ÿ†• ๐Ÿ” โฎ๏ธ ๐ŸŽ ๐Ÿ“Š ๐Ÿ’– ๐Ÿก. - - & ๐Ÿ”— โฎ๏ธ ๐ŸŒ ๐Ÿ‘ซ ๐ŸŽ ๐Ÿ•ฐ. - -/// - -โœ ๐Ÿš™ ๐Ÿ”ข #๏ธโƒฃ ๐Ÿ” ๐Ÿ‘Ÿ โšช๏ธโžก๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -& โž•1๏ธโƒฃ ๐Ÿš™ โœ” ๐Ÿšฅ ๐Ÿ“จ ๐Ÿ” ๐Ÿ #๏ธโƒฃ ๐Ÿช. - -& โž•1๏ธโƒฃ 1๏ธโƒฃ ๐Ÿ”“ & ๐Ÿ“จ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -{* ../../docs_src/security/tutorial004.py hl[7,48,55:56,59:60,69:75] *} - -/// note - -๐Ÿšฅ ๐Ÿ‘† โœ… ๐Ÿ†• (โŒ) ๐Ÿ’ฝ `fake_users_db`, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โ” #๏ธโƒฃ ๐Ÿ” ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ”œ: `"$2b$12$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW"`. - -/// - -## ๐Ÿต ๐Ÿฅ™ ๐Ÿค - -๐Ÿ—„ ๐Ÿ•น โŽ. - -โœ ๐ŸŽฒ ใŠ™ ๐Ÿ”‘ ๐Ÿ‘ˆ ๐Ÿ”œ โš™๏ธ ๐Ÿ›‘ ๐Ÿฅ™ ๐Ÿค. - -๐Ÿ— ๐Ÿ” ๐ŸŽฒ ใŠ™ ๐Ÿ”‘ โš™๏ธ ๐Ÿ“‹: - -
- -```console -$ openssl rand -hex 32 - -09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 -``` - -
- -& ๐Ÿ“ ๐Ÿ”ข ๐Ÿ”ข `SECRET_KEY` (๐Ÿšซ โš™๏ธ 1๏ธโƒฃ ๐Ÿ–ผ). - -โœ ๐Ÿ”ข `ALGORITHM` โฎ๏ธ ๐Ÿ“Š โš™๏ธ ๐Ÿ›‘ ๐Ÿฅ™ ๐Ÿค & โš’ โšซ๏ธ `"HS256"`. - -โœ ๐Ÿ”ข ๐Ÿ‘” ๐Ÿค. - -๐Ÿ”ฌ Pydantic ๐Ÿท ๐Ÿ‘ˆ ๐Ÿ”œ โš™๏ธ ๐Ÿค ๐Ÿ”— ๐Ÿ“จ. - -โœ ๐Ÿš™ ๐Ÿ”ข ๐Ÿ— ๐Ÿ†• ๐Ÿ” ๐Ÿค. - -{* ../../docs_src/security/tutorial004.py hl[6,12:14,28:30,78:86] *} - -## โ„น ๐Ÿ”— - -โ„น `get_current_user` ๐Ÿ“จ ๐ŸŽ ๐Ÿค โญ, โœ‹๏ธ ๐Ÿ‘‰ ๐Ÿ•ฐ, โš™๏ธ ๐Ÿฅ™ ๐Ÿค. - -๐Ÿ”ฃ ๐Ÿ“จ ๐Ÿค, โœ” โšซ๏ธ, & ๐Ÿ“จ โฎ๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป. - -๐Ÿšฅ ๐Ÿค โŒ, ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” โŒ โ–ถ๏ธ๏ธ โ†–๏ธ. - -{* ../../docs_src/security/tutorial004.py hl[89:106] *} - -## โ„น `/token` *โžก ๐Ÿ› ๏ธ* - -โœ `timedelta` โฎ๏ธ ๐Ÿ‘” ๐Ÿ•ฐ ๐Ÿค. - -โœ ๐ŸŽฐ ๐Ÿฅ™ ๐Ÿ” ๐Ÿค & ๐Ÿ“จ โšซ๏ธ. - -{* ../../docs_src/security/tutorial004.py hl[115:130] *} - -### ๐Ÿ“ก โ„น ๐Ÿ”ƒ ๐Ÿฅ™ "๐Ÿ“„" `sub` - -๐Ÿฅ™ ๐Ÿ”ง ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ“ค ๐Ÿ”‘ `sub`, โฎ๏ธ ๐Ÿ“„ ๐Ÿค. - -โšซ๏ธ ๐Ÿ“ฆ โš™๏ธ โšซ๏ธ, โœ‹๏ธ ๐Ÿ‘ˆ ๐ŸŒโ” ๐Ÿ‘† ๐Ÿ”œ ๐Ÿšฎ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ†”, ๐Ÿ‘ฅ โš™๏ธ โšซ๏ธ ๐Ÿ“ฅ. - -๐Ÿฅ™ 5๏ธโƒฃ๐Ÿ“† โš™๏ธ ๐ŸŽ ๐Ÿ‘œ โ†–๏ธ โšช๏ธโžก๏ธ โš– ๐Ÿ‘ฉโ€๐Ÿ’ป & ๐Ÿค ๐Ÿ‘ซ ๐ŸŽญ ๐Ÿ› ๏ธ ๐Ÿ”— ๐Ÿ”› ๐Ÿ‘† ๐Ÿ› ๏ธ. - -๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ฌ "๐Ÿš˜" โš–๏ธ "๐Ÿ“ฐ ๐Ÿค". - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ โœ” ๐Ÿ”ƒ ๐Ÿ‘ˆ ๐Ÿ‘จโ€๐Ÿ’ผ, ๐Ÿ’– "๐Ÿ’พ" (๐Ÿš˜) โš–๏ธ "โœ" (๐Ÿ“ฐ). - -& โคด๏ธ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค ๐Ÿ‘ˆ ๐Ÿฅ™ ๐Ÿค ๐Ÿ‘ฉโ€๐Ÿ’ป (โš–๏ธ ๐Ÿค–), & ๐Ÿ‘ซ ๐Ÿ’ช โš™๏ธ โšซ๏ธ ๐ŸŽญ ๐Ÿ‘ˆ ๐ŸŽฏ (๐Ÿ’พ ๐Ÿš˜, โš–๏ธ โœ ๐Ÿ“ฐ ๐Ÿค) ๐Ÿต ๐Ÿ’†โ€โ™‚ โœ”๏ธ ๐Ÿง, โฎ๏ธ ๐Ÿฅ™ ๐Ÿค ๐Ÿ‘† ๐Ÿ› ๏ธ ๐Ÿ— ๐Ÿ‘ˆ. - -โš™๏ธ ๐Ÿ‘ซ ๐Ÿ’ญ, ๐Ÿฅ™ ๐Ÿ’ช โš™๏ธ ๐ŸŒŒ ๐ŸŒ– ๐Ÿค“ ๐Ÿ˜. - -๐Ÿ“š ๐Ÿ’ผ, ๐Ÿ“š ๐Ÿ‘ˆ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ’ช โœ”๏ธ ๐ŸŽ ๐Ÿ†”, โžก๏ธ ๐Ÿ’ฌ `foo` (๐Ÿ‘ฉโ€๐Ÿ’ป `foo`, ๐Ÿš˜ `foo`, & ๐Ÿ“ฐ ๐Ÿค `foo`). - -, โŽ ๐Ÿ†” ๐Ÿ’ฅ, ๐Ÿ•โ” ๐Ÿ— ๐Ÿฅ™ ๐Ÿค ๐Ÿ‘ฉโ€๐Ÿ’ป, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”ก ๐Ÿ’ฒ `sub` ๐Ÿ”‘, โœ… โฎ๏ธ `username:`. , ๐Ÿ‘‰ ๐Ÿ–ผ, ๐Ÿ’ฒ `sub` ๐Ÿ’ช โœ”๏ธ: `username:johndoe`. - -โš  ๐Ÿ‘œ โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ `sub` ๐Ÿ”‘ ๐Ÿ”œ โœ”๏ธ ๐Ÿ˜ ๐Ÿ†” ๐Ÿคญ ๐ŸŽ‚ ๐Ÿˆธ, & โšซ๏ธ ๐Ÿ”œ ๐ŸŽป. - -## โœ… โšซ๏ธ - -๐Ÿƒ ๐Ÿ’ฝ & ๐Ÿšถ ๐Ÿฉบ: http://127.0.0.1:8000/docs. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿ’–: - - - -โœ” ๐Ÿˆธ ๐ŸŽ ๐ŸŒŒ โญ. - -โš™๏ธ ๐ŸŽ“: - -๐Ÿ†”: `johndoe` -๐Ÿ”: `secret` - -/// check - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ•ณ ๐Ÿ“Ÿ ๐Ÿ”ข ๐Ÿ” "`secret`", ๐Ÿ‘ฅ ๐Ÿ•ด โœ”๏ธ #๏ธโƒฃ โฌ. - -/// - - - -๐Ÿค™ ๐Ÿ”— `/users/me/`, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš ๐Ÿ“จ: - -```JSON -{ - "username": "johndoe", - "email": "johndoe@example.com", - "full_name": "John Doe", - "disabled": false -} -``` - - - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ“‚ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿงฐ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘€ โ” ๐Ÿ“Š ๐Ÿ“จ ๐Ÿ•ด ๐Ÿ”Œ ๐Ÿค, ๐Ÿ” ๐Ÿ•ด ๐Ÿ“จ ๐Ÿฅ‡ ๐Ÿ“จ ๐Ÿ”“ ๐Ÿ‘ฉโ€๐Ÿ’ป & ๐Ÿคš ๐Ÿ‘ˆ ๐Ÿ” ๐Ÿค, โœ‹๏ธ ๐Ÿšซ โฎ๏ธ: - - - -/// note - -๐Ÿ‘€ ๐ŸŽš `Authorization`, โฎ๏ธ ๐Ÿ’ฒ ๐Ÿ‘ˆ โ–ถ๏ธ โฎ๏ธ `Bearer `. - -/// - -## ๐Ÿง โš™๏ธ โฎ๏ธ `scopes` - -Oauth2๏ธโƒฃ โœ”๏ธ ๐Ÿ”‘ "โ†”". - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ‘ซ ๐Ÿšฎ ๐ŸŽฏ โš’ โœ” ๐Ÿฅ™ ๐Ÿค. - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿค ๐Ÿ‘‰ ๐Ÿค ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”— โš–๏ธ ๐Ÿฅ‰ ๐Ÿฅณ, ๐Ÿ”— โฎ๏ธ ๐Ÿ‘† ๐Ÿ› ๏ธ โฎ๏ธ โš’ ๐Ÿšซ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ก โ” โš™๏ธ ๐Ÿ‘ซ & โ” ๐Ÿ‘ซ ๐Ÿ› ๏ธ ๐Ÿ”˜ **FastAPI** โช **๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ**. - -## ๐ŸŒƒ - -โฎ๏ธ โšซ๏ธโ” ๐Ÿ‘† โœ”๏ธ ๐Ÿ‘€ ๐Ÿ†™ ๐Ÿ”œ, ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ†™ ๐Ÿ” **FastAPI** ๐Ÿˆธ โš™๏ธ ๐Ÿฉ ๐Ÿ’– Oauth2๏ธโƒฃ & ๐Ÿฅ™. - -๐ŸŒ– ๐Ÿ™† ๐Ÿ› ๏ธ ๐Ÿšš ๐Ÿ’‚โ€โ™‚ โ–ถ๏ธ๏ธ ๐Ÿ‘ ๐Ÿ— ๐Ÿ“„ ๐Ÿ”œ. - -๐Ÿ“š ๐Ÿ“ฆ ๐Ÿ‘ˆ ๐Ÿ“‰ โšซ๏ธ ๐Ÿ“š โœ”๏ธ โš’ ๐Ÿ“š โš  โฎ๏ธ ๐Ÿ’ฝ ๐Ÿท, ๐Ÿ’ฝ, & ๐Ÿ’ช โš’. & ๐Ÿ‘‰ ๐Ÿ“ฆ ๐Ÿ‘ˆ ๐Ÿ“‰ ๐Ÿ‘œ ๐Ÿ’โ€โ™‚๏ธ ๐ŸŒ… ๐Ÿค™ โœ”๏ธ ๐Ÿ’‚โ€โ™‚ โš  ๐Ÿ”˜. - ---- - -**FastAPI** ๐Ÿšซ โš’ ๐Ÿ™† โš  โฎ๏ธ ๐Ÿ™† ๐Ÿ’ฝ, ๐Ÿ’ฝ ๐Ÿท โš–๏ธ ๐Ÿงฐ. - -โšซ๏ธ ๐Ÿค ๐Ÿ‘† ๐ŸŒ ๐Ÿ’ช โš’ ๐Ÿ• ๐Ÿ‘ˆ ๐Ÿ‘– ๐Ÿ‘† ๐Ÿ— ๐Ÿ†. - -& ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ ๐Ÿ”— ๐Ÿ“š ๐Ÿ‘ ๐Ÿšง & ๐Ÿ›Ž โš™๏ธ ๐Ÿ“ฆ ๐Ÿ’– `passlib` & `python-jose`, โ†ฉ๏ธ **FastAPI** ๐Ÿšซ ๐Ÿšš ๐Ÿ™† ๐Ÿ— ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ ๐Ÿ”ข ๐Ÿ“ฆ. - -โœ‹๏ธ โšซ๏ธ ๐Ÿšš ๐Ÿ‘† ๐Ÿงฐ ๐Ÿ“‰ ๐Ÿ› ๏ธ ๐ŸŒ… ๐Ÿ’ช ๐Ÿต ๐ŸŽฏ ๐Ÿ’ช, โš–, โš–๏ธ ๐Ÿ’‚โ€โ™‚. - -& ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ & ๐Ÿ› ๏ธ ๐Ÿ”, ๐Ÿฉ ๐Ÿ› ๏ธ, ๐Ÿ’– Oauth2๏ธโƒฃ ๐Ÿ“ถ ๐Ÿ™… ๐ŸŒŒ. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿ’ก ๐ŸŒ… **๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ** ๐Ÿ”ƒ โ” โš™๏ธ Oauth2๏ธโƒฃ "โ†”", ๐ŸŒ– ๐Ÿ‘Œ-๐Ÿงฝ โœ” โš™๏ธ, ๐Ÿ“„ ๐Ÿ‘ซ ๐ŸŽ ๐Ÿฉ. Oauth2๏ธโƒฃ โฎ๏ธ โ†” ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿ“š ๐Ÿฆ ๐Ÿค ๐Ÿ•โ€๐Ÿฆบ, ๐Ÿ’– ๐Ÿ‘ฑ๐Ÿ“”, ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”, ๐Ÿ“‚, ๐Ÿคธโ€โ™‚, ๐Ÿ‘ฑ๐Ÿ“”, โ™’๏ธ. โœ” ๐Ÿฅ‰ ๐Ÿฅณ ๐Ÿˆธ ๐Ÿ”— โฎ๏ธ ๐Ÿ‘ซ ๐Ÿ”— ๐Ÿ”› ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ‘ซ ๐Ÿ‘ฉโ€๐Ÿ’ป. diff --git a/docs/em/docs/tutorial/security/simple-oauth2.md b/docs/em/docs/tutorial/security/simple-oauth2.md deleted file mode 100644 index 1fd513d48..000000000 --- a/docs/em/docs/tutorial/security/simple-oauth2.md +++ /dev/null @@ -1,289 +0,0 @@ -# ๐Ÿ™… Oauth2๏ธโƒฃ โฎ๏ธ ๐Ÿ” & ๐Ÿ“จ - -๐Ÿ”œ โžก๏ธ ๐Ÿ— โšช๏ธโžก๏ธ โฎ๏ธ ๐Ÿ“ƒ & ๐Ÿšฎ โŒ ๐Ÿ• โœ”๏ธ ๐Ÿ ๐Ÿ’‚โ€โ™‚ ๐Ÿ’ง. - -## ๐Ÿคš `username` & `password` - -๐Ÿ‘ฅ ๐Ÿ”œ โš™๏ธ **FastAPI** ๐Ÿ’‚โ€โ™‚ ๐Ÿš™ ๐Ÿคš `username` & `password`. - -Oauth2๏ธโƒฃ โœ” ๐Ÿ‘ˆ ๐Ÿ•โ” โš™๏ธ "๐Ÿ” ๐Ÿ’ง" (๐Ÿ‘ˆ ๐Ÿ‘ฅ โš™๏ธ) ๐Ÿ‘ฉโ€๐Ÿ’ป/๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”œ ๐Ÿ“จ `username` & `password` ๐Ÿ‘ ๐Ÿ“จ ๐Ÿ’ฝ. - -& ๐Ÿ”Œ ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ‘ โœ”๏ธ ๐ŸŒŸ ๐Ÿ’– ๐Ÿ‘ˆ. `user-name` โš–๏ธ `email` ๐Ÿšซ๐Ÿ”œ ๐Ÿ‘ท. - -โœ‹๏ธ ๐Ÿšซ ๐Ÿ˜Ÿ, ๐Ÿ‘† ๐Ÿ’ช ๐ŸŽฆ โšซ๏ธ ๐Ÿ‘† ๐ŸŽ‹ ๐Ÿ‘† ๐Ÿ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ•ธ. - -& ๐Ÿ‘† ๐Ÿ’ฝ ๐Ÿท ๐Ÿ’ช โš™๏ธ ๐Ÿ™† ๐ŸŽ ๐Ÿ“› ๐Ÿ‘† ๐Ÿ’š. - -โœ‹๏ธ ๐Ÿ’ณ *โžก ๐Ÿ› ๏ธ*, ๐Ÿ‘ฅ ๐Ÿ’ช โš™๏ธ ๐Ÿ‘‰ ๐Ÿ“› ๐Ÿ”— โฎ๏ธ ๐Ÿ”Œ (& ๐Ÿ’ช, ๐Ÿ–ผ, โš™๏ธ ๐Ÿ› ๏ธ ๐Ÿ› ๏ธ ๐Ÿงพ โš™๏ธ). - -๐Ÿ”Œ ๐Ÿ‡ต๐Ÿ‡ธ ๐Ÿ‘ˆ `username` & `password` ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ’ฝ (, ๐Ÿ™…โ€โ™‚ ๐ŸŽป ๐Ÿ“ฅ). - -### `scope` - -๐Ÿ”Œ ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ช ๐Ÿ“จ โž•1๏ธโƒฃ ๐Ÿ“จ ๐Ÿ‘ "`scope`". - -๐Ÿ“จ ๐Ÿ‘ ๐Ÿ“› `scope` (โญ), โœ‹๏ธ โšซ๏ธ ๐Ÿค™ ๐Ÿ“ ๐ŸŽป โฎ๏ธ "โ†”" ๐ŸŽ ๐Ÿš€. - -๐Ÿ”  "โ†”" ๐ŸŽป (๐Ÿต ๐Ÿš€). - -๐Ÿ‘ซ ๐Ÿ›Ž โš™๏ธ ๐Ÿ“ฃ ๐ŸŽฏ ๐Ÿ’‚โ€โ™‚ โœ”, ๐Ÿ–ผ: - -* `users:read` โš–๏ธ `users:write` โš  ๐Ÿ–ผ. -* `instagram_basic` โš™๏ธ ๐Ÿ‘ฑ๐Ÿ“” / ๐Ÿ‘ฑ๐Ÿ“”. -* `https://www.googleapis.com/auth/drive` โš™๏ธ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”. - -/// info - -Oauth2๏ธโƒฃ "โ†”" ๐ŸŽป ๐Ÿ‘ˆ ๐Ÿ“ฃ ๐ŸŽฏ โœ” โœ”. - -โšซ๏ธ ๐Ÿšซ ๐Ÿค” ๐Ÿšฅ โšซ๏ธ โœ”๏ธ ๐ŸŽ ๐Ÿฆน ๐Ÿ’– `:` โš–๏ธ ๐Ÿšฅ โšซ๏ธ ๐Ÿ“›. - -๐Ÿ‘ˆ โ„น ๐Ÿ› ๏ธ ๐ŸŽฏ. - -Oauth2๏ธโƒฃ ๐Ÿ‘ซ ๐ŸŽป. - -/// - -## ๐Ÿ“Ÿ ๐Ÿคš `username` & `password` - -๐Ÿ”œ โžก๏ธ โš™๏ธ ๐Ÿš™ ๐Ÿšš **FastAPI** ๐Ÿต ๐Ÿ‘‰. - -### `OAuth2PasswordRequestForm` - -๐Ÿฅ‡, ๐Ÿ—„ `OAuth2PasswordRequestForm`, & โš™๏ธ โšซ๏ธ ๐Ÿ”— โฎ๏ธ `Depends` *โžก ๐Ÿ› ๏ธ* `/token`: - -{* ../../docs_src/security/tutorial003.py hl[4,76] *} - -`OAuth2PasswordRequestForm` ๐ŸŽ“ ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ“ฃ ๐Ÿ“จ ๐Ÿ’ช โฎ๏ธ: - -* `username`. -* `password`. -* ๐Ÿ“ฆ `scope` ๐Ÿ‘ ๐Ÿฆ ๐ŸŽป, โœ ๐ŸŽป ๐ŸŽ ๐Ÿš€. -* ๐Ÿ“ฆ `grant_type`. - -/// tip - -Oauth2๏ธโƒฃ ๐Ÿ”Œ ๐Ÿค™ *๐Ÿšš* ๐Ÿ‘ `grant_type` โฎ๏ธ ๐Ÿ”ง ๐Ÿ’ฒ `password`, โœ‹๏ธ `OAuth2PasswordRequestForm` ๐Ÿšซ ๐Ÿ› ๏ธ โšซ๏ธ. - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ› ๏ธ โšซ๏ธ, โš™๏ธ `OAuth2PasswordRequestFormStrict` โ†ฉ๏ธ `OAuth2PasswordRequestForm`. - -/// - -* ๐Ÿ“ฆ `client_id` (๐Ÿ‘ฅ ๐Ÿšซ ๐Ÿ’ช โšซ๏ธ ๐Ÿ‘† ๐Ÿ–ผ). -* ๐Ÿ“ฆ `client_secret` (๐Ÿ‘ฅ ๐Ÿšซ ๐Ÿ’ช โšซ๏ธ ๐Ÿ‘† ๐Ÿ–ผ). - -/// info - -`OAuth2PasswordRequestForm` ๐Ÿšซ ๐ŸŽ ๐ŸŽ“ **FastAPI** `OAuth2PasswordBearer`. - -`OAuth2PasswordBearer` โš’ **FastAPI** ๐Ÿ’ญ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿ’‚โ€โ™‚ โš–. โšซ๏ธ ๐Ÿšฎ ๐Ÿ‘ˆ ๐ŸŒŒ ๐Ÿ—„. - -โœ‹๏ธ `OAuth2PasswordRequestForm` ๐ŸŽ“ ๐Ÿ”— ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ โœ ๐Ÿ‘†, โš–๏ธ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ“ฃ `Form` ๐Ÿ”ข ๐Ÿ”—. - -โœ‹๏ธ โšซ๏ธ โš  โš™๏ธ ๐Ÿ’ผ, โšซ๏ธ ๐Ÿšš **FastAPI** ๐Ÿ”—, โš’ โšซ๏ธ โฉ. - -/// - -### โš™๏ธ ๐Ÿ“จ ๐Ÿ’ฝ - -/// tip - -๐Ÿ‘ ๐Ÿ”— ๐ŸŽ“ `OAuth2PasswordRequestForm` ๐Ÿ† ๐Ÿšซ โœ”๏ธ ๐Ÿ”ข `scope` โฎ๏ธ ๐Ÿ“ ๐ŸŽป ๐Ÿ‘ฝ ๐Ÿš€, โ†ฉ๏ธ, โšซ๏ธ ๐Ÿ”œ โœ”๏ธ `scopes` ๐Ÿ”ข โฎ๏ธ โ˜‘ ๐Ÿ“‡ ๐ŸŽป ๐Ÿ”  โ†” ๐Ÿ“จ. - -๐Ÿ‘ฅ ๐Ÿšซ โš™๏ธ `scopes` ๐Ÿ‘‰ ๐Ÿ–ผ, โœ‹๏ธ ๐Ÿ› ๏ธ ๐Ÿ“ค ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช โšซ๏ธ. - -/// - -๐Ÿ”œ, ๐Ÿคš ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Š โšช๏ธโžก๏ธ (โŒ) ๐Ÿ’ฝ, โš™๏ธ `username` โšช๏ธโžก๏ธ ๐Ÿ“จ ๐Ÿ‘. - -๐Ÿšฅ ๐Ÿ“ค ๐Ÿ™…โ€โ™‚ โœ… ๐Ÿ‘ฉโ€๐Ÿ’ป, ๐Ÿ‘ฅ ๐Ÿ“จ โŒ ๐Ÿ’ฌ "โŒ ๐Ÿ†” โš–๏ธ ๐Ÿ”". - -โŒ, ๐Ÿ‘ฅ โš™๏ธ โš  `HTTPException`: - -{* ../../docs_src/security/tutorial003.py hl[3,77:79] *} - -### โœ… ๐Ÿ” - -๐Ÿ‘‰ โ˜ ๐Ÿ‘ฅ โœ”๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Š โšช๏ธโžก๏ธ ๐Ÿ‘† ๐Ÿ’ฝ, โœ‹๏ธ ๐Ÿ‘ฅ ๐Ÿšซ โœ… ๐Ÿ”. - -โžก๏ธ ๐Ÿšฎ ๐Ÿ‘ˆ ๐Ÿ’ฝ Pydantic `UserInDB` ๐Ÿท ๐Ÿฅ‡. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿ™… ๐Ÿ–Š ๐Ÿ”ข ๐Ÿ”,, ๐Ÿ‘ฅ ๐Ÿ”œ โš™๏ธ (โŒ) ๐Ÿ” ๐Ÿ” โš™๏ธ. - -๐Ÿšฅ ๐Ÿ” ๐Ÿšซ ๐Ÿ, ๐Ÿ‘ฅ ๐Ÿ“จ ๐ŸŽ โŒ. - -#### ๐Ÿ” ๐Ÿ” - -"๐Ÿ”" โ›“: ๐Ÿญ ๐ŸŽš (๐Ÿ” ๐Ÿ‘‰ ๐Ÿ’ผ) ๐Ÿ”˜ ๐Ÿ” ๐Ÿ”ข (๐ŸŽป) ๐Ÿ‘ˆ ๐Ÿ‘€ ๐Ÿ’– ๐Ÿ™ƒ. - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿšถโ€โ™€๏ธ โšซ๏ธโ” ๐ŸŽ ๐ŸŽš (โšซ๏ธโ” ๐ŸŽ ๐Ÿ”) ๐Ÿ‘† ๐Ÿคš โšซ๏ธโ” ๐ŸŽ ๐Ÿ™ƒ. - -โœ‹๏ธ ๐Ÿ‘† ๐Ÿšซ๐Ÿ”œ ๐Ÿ—œ โšช๏ธโžก๏ธ ๐Ÿ™ƒ ๐Ÿ”™ ๐Ÿ”. - -##### โšซ๏ธโ” โš™๏ธ ๐Ÿ” ๐Ÿ” - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ฝ ๐Ÿ“Ž, ๐Ÿง™โ€โ™€ ๐Ÿ† ๐Ÿšซ โœ”๏ธ ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป' ๐Ÿ”ข ๐Ÿ”, ๐Ÿ•ด#๏ธโƒฃ. - -, ๐Ÿง™โ€โ™€ ๐Ÿ† ๐Ÿšซ ๐Ÿ’ช ๐Ÿ”„ โš™๏ธ ๐Ÿ‘ˆ ๐ŸŽ ๐Ÿ” โž•1๏ธโƒฃ โš™๏ธ (๐Ÿ“š ๐Ÿ‘ฉโ€๐Ÿ’ป โš™๏ธ ๐ŸŽ ๐Ÿ” ๐ŸŒ, ๐Ÿ‘‰ ๐Ÿ”œ โš ). - -{* ../../docs_src/security/tutorial003.py hl[80:83] *} - -#### ๐Ÿ”ƒ `**user_dict` - -`UserInDB(**user_dict)` โ›“: - -*๐Ÿšถโ€โ™€๏ธ ๐Ÿ”‘ & ๐Ÿ’ฒ `user_dict` ๐Ÿ”— ๐Ÿ”‘-๐Ÿ’ฒ โŒ, ๐ŸŒ“:* - -```Python -UserInDB( - username = user_dict["username"], - email = user_dict["email"], - full_name = user_dict["full_name"], - disabled = user_dict["disabled"], - hashed_password = user_dict["hashed_password"], -) -``` - -/// info - -๐ŸŒ… ๐Ÿ ๐Ÿ”‘ `**๐Ÿ‘ฉโ€๐Ÿ’ป_ #๏ธโƒฃ ` โœ… ๐Ÿ”™ [๐Ÿงพ **โž• ๐Ÿท**](../extra-models.md#user_indict){.internal-link target=_blank}. - -/// - -## ๐Ÿ“จ ๐Ÿค - -๐Ÿ“จ `token` ๐Ÿ”— ๐Ÿ”œ ๐ŸŽป ๐ŸŽš. - -โšซ๏ธ ๐Ÿ”œ โœ”๏ธ `token_type`. ๐Ÿ‘† ๐Ÿ’ผ, ๐Ÿ‘ฅ โš™๏ธ "๐Ÿ“จ" ๐Ÿค, ๐Ÿค ๐Ÿ†Ž ๐Ÿ”œ "`bearer`". - -& โšซ๏ธ ๐Ÿ”œ โœ”๏ธ `access_token`, โฎ๏ธ ๐ŸŽป โš— ๐Ÿ‘† ๐Ÿ” ๐Ÿค. - -๐Ÿ‘‰ ๐Ÿ™… ๐Ÿ–ผ, ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ• ๐Ÿ˜Ÿ & ๐Ÿ“จ ๐ŸŽ `username` ๐Ÿค. - -/// tip - -โญ ๐Ÿ“ƒ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ ๐ŸŽฐ ๐Ÿ” ๐Ÿ› ๏ธ, โฎ๏ธ ๐Ÿ” #๏ธโƒฃ & ๐Ÿฅ™ ๐Ÿค. - -โœ‹๏ธ ๐Ÿ”œ, โžก๏ธ ๐ŸŽฏ ๐Ÿ”› ๐ŸŽฏ โ„น ๐Ÿ‘ฅ ๐Ÿ’ช. - -/// - -{* ../../docs_src/security/tutorial003.py hl[85] *} - -/// tip - -๐Ÿ”Œ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ“จ ๐ŸŽป โฎ๏ธ `access_token` & `token_type`, ๐ŸŽ ๐Ÿ‘‰ ๐Ÿ–ผ. - -๐Ÿ‘‰ ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿ‘† ๐Ÿ‘† ๐Ÿ“Ÿ, & โš’ ๐Ÿ’ญ ๐Ÿ‘† โš™๏ธ ๐Ÿ“š ๐ŸŽป ๐Ÿ”‘. - -โšซ๏ธ ๐ŸŒ– ๐Ÿ•ด ๐Ÿ‘œ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿ’ญ โ˜‘ ๐Ÿ‘†, ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ”ง. - -๐ŸŽ‚, **FastAPI** ๐Ÿต โšซ๏ธ ๐Ÿ‘†. - -/// - -## โ„น ๐Ÿ”— - -๐Ÿ”œ ๐Ÿ‘ฅ ๐Ÿ”œ โ„น ๐Ÿ‘† ๐Ÿ”—. - -๐Ÿ‘ฅ ๐Ÿ’š ๐Ÿคš `current_user` *๐Ÿ•ด* ๐Ÿšฅ ๐Ÿ‘‰ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆ. - -, ๐Ÿ‘ฅ โœ ๐ŸŒ– ๐Ÿ”— `get_current_active_user` ๐Ÿ‘ˆ ๐Ÿ”„ โš™๏ธ `get_current_user` ๐Ÿ”—. - -๐Ÿ‘ฏโ€โ™‚๏ธ ๐Ÿ‘‰ ๐Ÿ”— ๐Ÿ”œ ๐Ÿ“จ ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” โŒ ๐Ÿšฅ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿšซ ๐Ÿ”€, โš–๏ธ ๐Ÿšฅ ๐Ÿ”•. - -, ๐Ÿ‘† ๐Ÿ”—, ๐Ÿ‘ฅ ๐Ÿ”œ ๐Ÿ•ด ๐Ÿคš ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿšฅ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”€, โ˜‘ ๐Ÿ”“, & ๐Ÿฆ: - -{* ../../docs_src/security/tutorial003.py hl[58:66,69:72,90] *} - -/// info - -๐ŸŒ– ๐ŸŽš `WWW-Authenticate` โฎ๏ธ ๐Ÿ’ฒ `Bearer` ๐Ÿ‘ฅ ๐Ÿ›ฌ ๐Ÿ“ฅ ๐Ÿ• ๐Ÿ”Œ. - -๐Ÿ™† ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” (โŒ) ๐Ÿ‘” ๐Ÿ“Ÿ 4๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ "โ›”" ๐Ÿค” ๐Ÿ“จ `WWW-Authenticate` ๐ŸŽš. - -๐Ÿ’ผ ๐Ÿ“จ ๐Ÿค (๐Ÿ‘† ๐Ÿ’ผ), ๐Ÿ’ฒ ๐Ÿ‘ˆ ๐ŸŽš ๐Ÿ”œ `Bearer`. - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿค™ ๐Ÿšถ ๐Ÿ‘ˆ โž• ๐ŸŽš & โšซ๏ธ ๐Ÿ”œ ๐Ÿ‘ท. - -โœ‹๏ธ โšซ๏ธ ๐Ÿšš ๐Ÿ“ฅ ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ”ง. - -, ๐Ÿ“ค 5๏ธโƒฃ๐Ÿ“† ๐Ÿงฐ ๐Ÿ‘ˆ โŒ› & โš™๏ธ โšซ๏ธ (๐Ÿ”œ โš–๏ธ ๐Ÿ”ฎ) & ๐Ÿ‘ˆ ๐Ÿ’ช โš  ๐Ÿ‘† โš–๏ธ ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป, ๐Ÿ”œ โš–๏ธ ๐Ÿ”ฎ. - -๐Ÿ‘ˆ ๐Ÿ’ฐ ๐Ÿฉ... - -/// - -## ๐Ÿ‘€ โšซ๏ธ ๐ŸŽฏ - -๐Ÿ“‚ ๐ŸŽ“ ๐Ÿฉบ: http://127.0.0.1:8000/docs. - -### ๐Ÿ”“ - -๐Ÿ–Š "โœ”" ๐Ÿ”ผ. - -โš™๏ธ ๐ŸŽ“: - -๐Ÿ‘ฉโ€๐Ÿ’ป: `johndoe` - -๐Ÿ”: `secret` - - - -โฎ๏ธ ๐Ÿ”— โš™๏ธ, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โšซ๏ธ ๐Ÿ’–: - - - -### ๐Ÿคš ๐Ÿ‘† ๐Ÿ‘ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ’ฝ - -๐Ÿ”œ โš™๏ธ ๐Ÿ› ๏ธ `GET` โฎ๏ธ โžก `/users/me`. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ“Š, ๐Ÿ’–: - -```JSON -{ - "username": "johndoe", - "email": "johndoe@example.com", - "full_name": "John Doe", - "disabled": false, - "hashed_password": "fakehashedsecret" -} -``` - - - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ–Š ๐Ÿ”’ โ„น & โ, & โคด๏ธ ๐Ÿ”„ ๐ŸŽ ๐Ÿ› ๏ธ ๐Ÿ”„, ๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ” 4๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ โŒ: - -```JSON -{ - "detail": "Not authenticated" -} -``` - -### ๐Ÿ”• ๐Ÿ‘ฉโ€๐Ÿ’ป - -๐Ÿ”œ ๐Ÿ”„ โฎ๏ธ ๐Ÿ”• ๐Ÿ‘ฉโ€๐Ÿ’ป, ๐Ÿ”“ โฎ๏ธ: - -๐Ÿ‘ฉโ€๐Ÿ’ป: `alice` - -๐Ÿ”: `secret2` - -& ๐Ÿ”„ โš™๏ธ ๐Ÿ› ๏ธ `GET` โฎ๏ธ โžก `/users/me`. - -๐Ÿ‘† ๐Ÿ”œ ๐Ÿคš "๐Ÿ”• ๐Ÿ‘ฉโ€๐Ÿ’ป" โŒ, ๐Ÿ’–: - -```JSON -{ - "detail": "Inactive user" -} -``` - -## ๐ŸŒƒ - -๐Ÿ‘† ๐Ÿ”œ โœ”๏ธ ๐Ÿงฐ ๐Ÿ› ๏ธ ๐Ÿ ๐Ÿ’‚โ€โ™‚ โš™๏ธ โš“๏ธ ๐Ÿ”› `username` & `password` ๐Ÿ‘† ๐Ÿ› ๏ธ. - -โš™๏ธ ๐Ÿ‘ซ ๐Ÿงฐ, ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ’‚โ€โ™‚ โš™๏ธ ๐Ÿ”— โฎ๏ธ ๐Ÿ™† ๐Ÿ’ฝ & โฎ๏ธ ๐Ÿ™† ๐Ÿ‘ฉโ€๐Ÿ’ป โš–๏ธ ๐Ÿ’ฝ ๐Ÿท. - -๐Ÿ•ด โ„น โŒ ๐Ÿ‘ˆ โšซ๏ธ ๐Ÿšซ ๐Ÿค™ "๐Ÿ”". - -โญ ๐Ÿ“ƒ ๐Ÿ‘† ๐Ÿ”œ ๐Ÿ‘€ โ” โš™๏ธ ๐Ÿ” ๐Ÿ” ๐Ÿ” ๐Ÿ—ƒ & ๐Ÿฅ™ ๐Ÿค. diff --git a/docs/em/docs/tutorial/static-files.md b/docs/em/docs/tutorial/static-files.md deleted file mode 100644 index 27685c06d..000000000 --- a/docs/em/docs/tutorial/static-files.md +++ /dev/null @@ -1,40 +0,0 @@ -# ๐ŸŽป ๐Ÿ“ - -๐Ÿ‘† ๐Ÿ’ช ๐Ÿฆ ๐ŸŽป ๐Ÿ“ ๐Ÿ” โšช๏ธโžก๏ธ ๐Ÿ“ โš™๏ธ `StaticFiles`. - -## โš™๏ธ `StaticFiles` - -* ๐Ÿ—„ `StaticFiles`. -* "๐Ÿ—ป" `StaticFiles()` ๐Ÿ‘ ๐ŸŽฏ โžก. - -{* ../../docs_src/static_files/tutorial001.py hl[2,6] *} - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.staticfiles import StaticFiles`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.staticfiles` `fastapi.staticfiles` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ โšซ๏ธ ๐Ÿค™ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -### โšซ๏ธโ” "๐Ÿ—œ" - -"๐Ÿ—œ" โ›“ โŽ ๐Ÿ "๐Ÿ”ฌ" ๐Ÿˆธ ๐ŸŽฏ โžก, ๐Ÿ‘ˆ โคด๏ธ โœŠ ๐Ÿ’… ๐Ÿšš ๐ŸŒ ๐ŸŽง-โžก. - -๐Ÿ‘‰ ๐ŸŽ โšช๏ธโžก๏ธ โš™๏ธ `APIRouter` ๐Ÿ—ป ๐Ÿˆธ ๐Ÿ• ๐Ÿ”ฌ. ๐Ÿ—„ & ๐Ÿฉบ โšช๏ธโžก๏ธ ๐Ÿ‘† ๐Ÿ‘‘ ๐Ÿˆธ ๐Ÿ† ๐Ÿšซ ๐Ÿ”Œ ๐Ÿ•ณ โšช๏ธโžก๏ธ ๐Ÿ—ป ๐Ÿˆธ, โ™’๏ธ. - -๐Ÿ‘† ๐Ÿ’ช โœ ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ‘‰ **๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ**. - -## โ„น - -๐Ÿฅ‡ `"/static"` ๐Ÿ”— ๐ŸŽง-โžก ๐Ÿ‘‰ "๐ŸŽง-๐Ÿˆธ" ๐Ÿ”œ "๐Ÿ—ป" ๐Ÿ”›. , ๐Ÿ™† โžก ๐Ÿ‘ˆ โ–ถ๏ธ โฎ๏ธ `"/static"` ๐Ÿ”œ ๐Ÿต โšซ๏ธ. - -`directory="static"` ๐Ÿ”— ๐Ÿ“› ๐Ÿ“ ๐Ÿ‘ˆ ๐Ÿ”Œ ๐Ÿ‘† ๐ŸŽป ๐Ÿ“. - -`name="static"` ๐Ÿค โšซ๏ธ ๐Ÿ“› ๐Ÿ‘ˆ ๐Ÿ’ช โš™๏ธ ๐Ÿ”˜ **FastAPI**. - -๐ŸŒ ๐Ÿ‘ซ ๐Ÿ”ข ๐Ÿ’ช ๐ŸŽ ๐ŸŒ˜ "`static`", ๐Ÿ”† ๐Ÿ‘ซ โฎ๏ธ ๐Ÿ’ช & ๐ŸŽฏ โ„น ๐Ÿ‘† ๐Ÿ‘ ๐Ÿˆธ. - -## ๐ŸŒ… โ„น - -๐ŸŒ– โ„น & ๐ŸŽ› โœ… ๐Ÿ’ƒ ๐Ÿฉบ ๐Ÿ”ƒ ๐ŸŽป ๐Ÿ“. diff --git a/docs/em/docs/tutorial/testing.md b/docs/em/docs/tutorial/testing.md deleted file mode 100644 index 2e4a531f7..000000000 --- a/docs/em/docs/tutorial/testing.md +++ /dev/null @@ -1,185 +0,0 @@ -# ๐Ÿ”ฌ - -๐Ÿ‘ ๐Ÿ’ƒ, ๐Ÿ”ฌ **FastAPI** ๐Ÿˆธ โฉ & ๐Ÿ˜Œ. - -โšซ๏ธ โš“๏ธ ๐Ÿ”› ๐Ÿ‡ธ๐Ÿ‡ฒ, โ” ๐Ÿ”„ ๐Ÿ— โš“๏ธ ๐Ÿ”› ๐Ÿ“จ, โšซ๏ธ ๐Ÿ“ถ ๐Ÿ˜ฐ & ๐Ÿ‹๏ธ. - -โฎ๏ธ โšซ๏ธ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โœณ ๐Ÿ”— โฎ๏ธ **FastAPI**. - -## โš™๏ธ `TestClient` - -/// info - -โš™๏ธ `TestClient`, ๐Ÿฅ‡ โŽ `httpx`. - -๐Ÿคถ โ“‚. `pip install httpx`. - -/// - -๐Ÿ—„ `TestClient`. - -โœ `TestClient` ๐Ÿšถโ€โ™€๏ธ ๐Ÿ‘† **FastAPI** ๐Ÿˆธ โšซ๏ธ. - -โœ ๐Ÿ”ข โฎ๏ธ ๐Ÿ“› ๐Ÿ‘ˆ โ–ถ๏ธ โฎ๏ธ `test_` (๐Ÿ‘‰ ๐Ÿฉ `pytest` ๐Ÿ›). - -โš™๏ธ `TestClient` ๐ŸŽš ๐ŸŽ ๐ŸŒŒ ๐Ÿ‘† โฎ๏ธ `httpx`. - -โœ ๐Ÿ™… `assert` ๐Ÿ“„ โฎ๏ธ ๐Ÿฉ ๐Ÿ ๐Ÿงฌ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โœ… (๐Ÿ”„, ๐Ÿฉ `pytest`). - -{* ../../docs_src/app_testing/tutorial001.py hl[2,12,15:18] *} - -/// tip - -๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿ˜ `def`, ๐Ÿšซ `async def`. - - & ๐Ÿค™ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ˜ ๐Ÿค™, ๐Ÿšซ โš™๏ธ `await`. - -๐Ÿ‘‰ โœ” ๐Ÿ‘† โš™๏ธ `pytest` ๐Ÿ”— ๐Ÿต ๐Ÿคข. - -/// - -/// note | ๐Ÿ“ก โ„น - -๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `from starlette.testclient import TestClient`. - -**FastAPI** ๐Ÿšš ๐ŸŽ `starlette.testclient` `fastapi.testclient` ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ โšซ๏ธ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ. - -/// - -/// tip - -๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š ๐Ÿค™ `async` ๐Ÿ”ข ๐Ÿ‘† ๐Ÿ’ฏ โ†–๏ธ โšช๏ธโžก๏ธ ๐Ÿ“จ ๐Ÿ“จ ๐Ÿ‘† FastAPI ๐Ÿˆธ (โœ… ๐Ÿ” ๐Ÿ’ฝ ๐Ÿ”ข), โœ”๏ธ ๐Ÿ‘€ [๐Ÿ” ๐Ÿ’ฏ](../advanced/async-tests.md){.internal-link target=_blank} ๐Ÿง ๐Ÿ”ฐ. - -/// - -## ๐ŸŽ ๐Ÿ’ฏ - -๐ŸŽฐ ๐Ÿˆธ, ๐Ÿ‘† ๐ŸŽฒ ๐Ÿ”œ โœ”๏ธ ๐Ÿ‘† ๐Ÿ’ฏ ๐ŸŽ ๐Ÿ“. - -& ๐Ÿ‘† **FastAPI** ๐Ÿˆธ 5๏ธโƒฃ๐Ÿ“† โœ ๐Ÿ“š ๐Ÿ“/๐Ÿ•น, โ™’๏ธ. - -### **FastAPI** ๐Ÿ“ฑ ๐Ÿ“ - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘† โœ”๏ธ ๐Ÿ“ ๐Ÿ“Š ๐Ÿ”ฌ [๐Ÿฆ ๐Ÿˆธ](bigger-applications.md){.internal-link target=_blank}: - -``` -. -โ”œโ”€โ”€ app -โ”‚ย ย  โ”œโ”€โ”€ __init__.py -โ”‚ย ย  โ””โ”€โ”€ main.py -``` - -๐Ÿ“ `main.py` ๐Ÿ‘† โœ”๏ธ ๐Ÿ‘† **FastAPI** ๐Ÿ“ฑ: - - -{* ../../docs_src/app_testing/main.py *} - -### ๐Ÿ”ฌ ๐Ÿ“ - -โคด๏ธ ๐Ÿ‘† ๐Ÿ’ช โœ”๏ธ ๐Ÿ“ `test_main.py` โฎ๏ธ ๐Ÿ‘† ๐Ÿ’ฏ. โšซ๏ธ ๐Ÿ’ช ๐Ÿ–– ๐Ÿ”› ๐ŸŽ ๐Ÿ ๐Ÿ“ฆ (๐ŸŽ ๐Ÿ“ โฎ๏ธ `__init__.py` ๐Ÿ“): - -``` hl_lines="5" -. -โ”œโ”€โ”€ app -โ”‚ย ย  โ”œโ”€โ”€ __init__.py -โ”‚ย ย  โ”œโ”€โ”€ main.py -โ”‚ย ย  โ””โ”€โ”€ test_main.py -``` - -โ†ฉ๏ธ ๐Ÿ‘‰ ๐Ÿ“ ๐ŸŽ ๐Ÿ“ฆ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โš– ๐Ÿ—„ ๐Ÿ—„ ๐ŸŽš `app` โšช๏ธโžก๏ธ `main` ๐Ÿ•น (`main.py`): - -{* ../../docs_src/app_testing/test_main.py hl[3] *} - -...& โœ”๏ธ ๐Ÿ“Ÿ ๐Ÿ’ฏ ๐Ÿ’– โญ. - -## ๐Ÿ”ฌ: โ†” ๐Ÿ–ผ - -๐Ÿ”œ โžก๏ธ โ†” ๐Ÿ‘‰ ๐Ÿ–ผ & ๐Ÿšฎ ๐ŸŒ– โ„น ๐Ÿ‘€ โ” ๐Ÿ’ฏ ๐ŸŽ ๐Ÿ•. - -### โ†” **FastAPI** ๐Ÿ“ฑ ๐Ÿ“ - -โžก๏ธ ๐Ÿ˜ฃ โฎ๏ธ ๐ŸŽ ๐Ÿ“ ๐Ÿ“Š โญ: - -``` -. -โ”œโ”€โ”€ app -โ”‚ย ย  โ”œโ”€โ”€ __init__.py -โ”‚ย ย  โ”œโ”€โ”€ main.py -โ”‚ย ย  โ””โ”€โ”€ test_main.py -``` - -โžก๏ธ ๐Ÿ’ฌ ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ“ `main.py` โฎ๏ธ ๐Ÿ‘† **FastAPI** ๐Ÿ“ฑ โœ”๏ธ ๐ŸŽ **โžก ๐Ÿ› ๏ธ**. - -โšซ๏ธ โœ”๏ธ `GET` ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ“จ โŒ. - -โšซ๏ธ โœ”๏ธ `POST` ๐Ÿ› ๏ธ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ“จ ๐Ÿ“š โŒ. - -๐Ÿ‘ฏโ€โ™‚๏ธ *โžก ๐Ÿ› ๏ธ* ๐Ÿšš `X-Token` ๐ŸŽš. - -{* ../../docs_src/app_testing/app_b/main.py *} - -### โ†” ๐Ÿ”ฌ ๐Ÿ“ - -๐Ÿ‘† ๐Ÿ’ช โคด๏ธ โ„น `test_main.py` โฎ๏ธ โ†” ๐Ÿ’ฏ: - -{* ../../docs_src/app_testing/app_b/test_main.py *} - -๐Ÿ•โ” ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿšถโ€โ™€๏ธ โ„น ๐Ÿ“จ & ๐Ÿ‘† ๐Ÿšซ ๐Ÿ’ญ โ”, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”Ž (๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ”) โ” โšซ๏ธ `httpx`, โš–๏ธ โ” โšซ๏ธ โฎ๏ธ `requests`, ๐Ÿ‡ธ๐Ÿ‡ฒ ๐Ÿ”ง โš“๏ธ ๐Ÿ”› ๐Ÿ“จ' ๐Ÿ”ง. - -โคด๏ธ ๐Ÿ‘† ๐ŸŽ ๐Ÿ‘† ๐Ÿ’ฏ. - -๐Ÿคถ โ“‚.: - -* ๐Ÿšถโ€โ™€๏ธ *โžก* โš–๏ธ *๐Ÿ”ข* ๐Ÿ”ข, ๐Ÿšฎ โšซ๏ธ ๐Ÿ“› โšซ๏ธ. -* ๐Ÿšถโ€โ™€๏ธ ๐ŸŽป ๐Ÿ’ช, ๐Ÿšถโ€โ™€๏ธ ๐Ÿ ๐ŸŽš (โœ… `dict`) ๐Ÿ”ข `json`. -* ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ“จ *๐Ÿ“จ ๐Ÿ’ฝ* โ†ฉ๏ธ ๐ŸŽป, โš™๏ธ `data` ๐Ÿ”ข โ†ฉ๏ธ. -* ๐Ÿšถโ€โ™€๏ธ *๐ŸŽš*, โš™๏ธ `dict` `headers` ๐Ÿ”ข. -* *๐Ÿช*, `dict` `cookies` ๐Ÿ”ข. - -๐ŸŒ– โ„น ๐Ÿ”ƒ โ” ๐Ÿšถโ€โ™€๏ธ ๐Ÿ’ฝ ๐Ÿ‘ฉโ€๐Ÿ’ป (โš™๏ธ `httpx` โš–๏ธ `TestClient`) โœ… ๐Ÿ‡ธ๐Ÿ‡ฒ ๐Ÿงพ. - -/// info - -๐Ÿ—’ ๐Ÿ‘ˆ `TestClient` ๐Ÿ“จ ๐Ÿ’ฝ ๐Ÿ‘ˆ ๐Ÿ’ช ๐Ÿ—œ ๐ŸŽป, ๐Ÿšซ Pydantic ๐Ÿท. - -๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ Pydantic ๐Ÿท ๐Ÿ‘† ๐Ÿ’ฏ & ๐Ÿ‘† ๐Ÿ’š ๐Ÿ“จ ๐Ÿšฎ ๐Ÿ’ฝ ๐Ÿˆธ โฎ๏ธ ๐Ÿ”ฌ, ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ `jsonable_encoder` ๐Ÿ”ฌ [๐ŸŽป ๐Ÿ”— ๐Ÿ”ข](encoder.md){.internal-link target=_blank}. - -/// - -## ๐Ÿƒ โšซ๏ธ - -โฎ๏ธ ๐Ÿ‘ˆ, ๐Ÿ‘† ๐Ÿ’ช โŽ `pytest`: - -
- -```console -$ pip install pytest - ----> 100% -``` - -
- -โšซ๏ธ ๐Ÿ”œ ๐Ÿ” ๐Ÿ“ & ๐Ÿ’ฏ ๐Ÿ”, ๐Ÿ› ๏ธ ๐Ÿ‘ซ, & ๐Ÿ“„ ๐Ÿ ๐Ÿ”™ ๐Ÿ‘†. - -๐Ÿƒ ๐Ÿ’ฏ โฎ๏ธ: - -
- -```console -$ pytest - -================ test session starts ================ -platform linux -- Python 3.6.9, pytest-5.3.5, py-1.8.1, pluggy-0.13.1 -rootdir: /home/user/code/superawesome-cli/app -plugins: forked-1.1.3, xdist-1.31.0, cov-2.8.1 -collected 6 items - ----> 100% - -test_main.py ...... [100%] - -================= 1 passed in 0.03s ================= -``` - -
diff --git a/docs/em/mkdocs.yml b/docs/em/mkdocs.yml deleted file mode 100644 index de18856f4..000000000 --- a/docs/em/mkdocs.yml +++ /dev/null @@ -1 +0,0 @@ -INHERIT: ../en/mkdocs.yml