diff --git a/docs/hi/docs/advanced/advanced-python-types.md b/docs/hi/docs/advanced/advanced-python-types.md index d73a95fd86..85204e563b 100644 --- a/docs/hi/docs/advanced/advanced-python-types.md +++ b/docs/hi/docs/advanced/advanced-python-types.md @@ -13,7 +13,7 @@ from typing import Union def say_hi(name: Union[str, None]): - print(f"Hi {name}!") + print(f"Hi {name}!") ``` `typing` में `Optional` के साथ यह declare करने का एक shortcut भी है कि कोई चीज़ `None` हो सकती है। diff --git a/docs/hi/docs/advanced/async-tests.md b/docs/hi/docs/advanced/async-tests.md index dee1651268..3b7e682945 100644 --- a/docs/hi/docs/advanced/async-tests.md +++ b/docs/hi/docs/advanced/async-tests.md @@ -71,7 +71,7 @@ marker `@pytest.mark.anyio` pytest को बताता है कि इस t यह इसके बराबर है: ```Python -response = client.get('/') +response = client.get("/") ``` ...जिसका उपयोग हम `TestClient` के साथ अपनी requests बनाने के लिए करते थे। @@ -84,7 +84,7 @@ response = client.get('/') /// warning | चेतावनी -अगर आपकी application lifespan events पर निर्भर करती है, तो `AsyncClient` इन events को trigger नहीं करेगा। यह सुनिश्चित करने के लिए कि वे trigger हों, [florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage) से `LifespanManager` का उपयोग करें। +अगर आपकी application lifespan event पर निर्भर करती है, तो `AsyncClient` इन event को trigger नहीं करेगा। यह सुनिश्चित करने के लिए कि वे trigger हों, [florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage) से `LifespanManager` का उपयोग करें। /// diff --git a/docs/hi/docs/advanced/behind-a-proxy.md b/docs/hi/docs/advanced/behind-a-proxy.md index 7890efb44b..15ea1b416a 100644 --- a/docs/hi/docs/advanced/behind-a-proxy.md +++ b/docs/hi/docs/advanced/behind-a-proxy.md @@ -8,7 +8,7 @@ आपकी application के सामने मौजूद **proxy** आम तौर पर requests को आपके **server** तक भेजने से पहले तुरंत कुछ headers सेट करेगा, ताकि server को पता चल सके कि request proxy द्वारा **forwarded** की गई थी, उसे मूल (public) URL पता चल सके, जिसमें domain शामिल हो, कि वह HTTPS उपयोग कर रहा है, आदि। -**server** program (उदाहरण के लिए **FastAPI CLI** के जरिए **Uvicorn**) इन headers को समझने में सक्षम है, और फिर वह जानकारी आपकी application को पास कर सकता है। +`fastapi run` द्वारा शुरू किया गया **server** इन headers को समझने में सक्षम है, और फिर वह जानकारी आपकी application को पास कर सकता है। लेकिन security के लिए, क्योंकि server को यह नहीं पता कि वह किसी trusted proxy के पीछे है, वह उन headers को interpret नहीं करेगा। @@ -34,8 +34,6 @@ Proxy headers हैं: ```console $ uv run fastapi run --forwarded-allow-ips="*" - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -101,7 +99,7 @@ sequenceDiagram आपके पास ऐसा proxy हो सकता है जो आपकी application में एक path prefix जोड़ता हो। -इन मामलों में आप अपनी application configure करने के लिए `root_path` का उपयोग कर सकते हैं। +इन मामलों में आप `fastapi run --root-path` के साथ server configure कर सकते हैं। `root_path` ASGI specification द्वारा प्रदान किया गया एक mechanism है (जिस पर FastAPI, Starlette के जरिए, बना है)। @@ -117,7 +115,7 @@ sequenceDiagram {* ../../docs_src/behind_a_proxy/tutorial001_py310.py hl[6] *} -और proxy app server (शायद FastAPI CLI के जरिए Uvicorn) तक request भेजने से पहले तुरंत **path prefix** को **"strip"** कर देगा, आपकी application को यह भरोसा दिलाते हुए कि वह `/app` पर serve हो रही है, ताकि आपको prefix `/api/v1` शामिल करने के लिए अपना सारा code update न करना पड़े। +और proxy server तक request भेजने से पहले तुरंत **path prefix** को **"strip"** कर देगा, आपकी application को यह भरोसा दिलाते हुए कि वह `/app` पर serve हो रही है, ताकि आपको prefix `/api/v1` शामिल करने के लिए अपना सारा code update न करना पड़े। यहाँ तक, सब कुछ सामान्य रूप से काम करेगा। @@ -161,7 +159,7 @@ Docs UI को OpenAPI schema में यह declare करने की भ } ``` -इस उदाहरण में, "Proxy" कुछ **Traefik** जैसा हो सकता है। और server **Uvicorn** के साथ FastAPI CLI जैसा हो सकता है, जो आपकी FastAPI application चला रहा है। +इस उदाहरण में, "Proxy" कुछ **Traefik** जैसा हो सकता है। और `fastapi run` आपकी FastAPI application चलाने वाला server शुरू करेगा। ### `root_path` प्रदान करना { #providing-the-root-path } @@ -171,14 +169,10 @@ Docs UI को OpenAPI schema में यह declare करने की भ ```console $ uv run fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` -अगर आप Hypercorn उपयोग करते हैं, तो उसमें भी option `--root-path` है। - /// note | तकनीकी विवरण ASGI specification इस use case के लिए `root_path` define करती है। @@ -195,14 +189,12 @@ ASGI specification इस use case के लिए `root_path` define करत {* ../../docs_src/behind_a_proxy/tutorial001_py310.py hl[8] *} -फिर, अगर आप Uvicorn को इस तरह शुरू करते हैं: +फिर, अगर आप server को इस तरह शुरू करते हैं:
```console $ uv run fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
@@ -216,30 +208,11 @@ Response कुछ ऐसा होगा: } ``` -### FastAPI app में `root_path` सेट करना { #setting-the-root-path-in-the-fastapi-app } +/// warning | Deprecated `root_path` parameter -वैकल्पिक रूप से, अगर आपके पास `--root-path` या equivalent जैसा command line option देने का तरीका नहीं है, तो आप अपनी FastAPI app बनाते समय `root_path` parameter सेट कर सकते हैं: +FastAPI 0.145.0 और उससे पहले के versions में, `root_path` को `FastAPI()` में भी configure किया जा सकता था। यह parameter अब deprecated है क्योंकि इसका व्यवहार server configuration के अनुरूप नहीं था। इसके बजाय `fastapi run --root-path /api/v1` उपयोग करें। -{* ../../docs_src/behind_a_proxy/tutorial002_py310.py hl[3] *} - -`root_path` को `FastAPI` में पास करना, Uvicorn या Hypercorn को `--root-path` command line option पास करने के equivalent होगा। - -### `root_path` के बारे में { #about-root-path } - -ध्यान रखें कि server (Uvicorn) उस `root_path` का उपयोग app को पास करने के अलावा किसी और चीज़ के लिए नहीं करेगा। - -लेकिन अगर आप अपने browser में [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app) पर जाते हैं, तो आपको normal response दिखाई देगा: - -```JSON -{ - "message": "Hello World", - "root_path": "/api/v1" -} -``` - -इसलिए, यह `http://127.0.0.1:8000/api/v1/app` पर access किए जाने की अपेक्षा नहीं करेगा। - -Uvicorn अपेक्षा करेगा कि proxy Uvicorn को `http://127.0.0.1:8000/app` पर access करे, और फिर ऊपर extra `/api/v1` prefix जोड़ना proxy की जिम्मेदारी होगी। +/// ## Stripped path prefix वाले proxies के बारे में { #about-proxies-with-a-stripped-path-prefix } @@ -247,7 +220,7 @@ Uvicorn अपेक्षा करेगा कि proxy Uvicorn को `http: शायद कई cases में default यह होगा कि proxy के पास stripped path prefix नहीं होगा। -ऐसे case में (बिना stripped path prefix के), proxy कुछ `https://myawesomeapp.com` जैसा listen करेगा, और फिर अगर browser `https://myawesomeapp.com/api/v1/app` पर जाता है और आपका server (जैसे Uvicorn) `http://127.0.0.1:8000` पर listen करता है, तो proxy (बिना stripped path prefix के) Uvicorn को उसी path पर access करेगा: `http://127.0.0.1:8000/api/v1/app`। +ऐसे case में (बिना stripped path prefix के), proxy कुछ `https://myawesomeapp.com` जैसा listen करेगा, और फिर अगर browser `https://myawesomeapp.com/api/v1/app` पर जाता है और आपका server `http://127.0.0.1:8000` पर listen करता है, तो proxy (बिना stripped path prefix के) server को उसी path पर access करेगा: `http://127.0.0.1:8000/api/v1/app`। ## Traefik के साथ local testing { #testing-locally-with-traefik } @@ -302,7 +275,7 @@ Uvicorn अपेक्षा करेगा कि proxy Uvicorn को `http: यह file Traefik को path prefix `/api/v1` उपयोग करने के लिए configure करती है। -और फिर Traefik अपनी requests को `http://127.0.0.1:8000` पर चल रहे आपके Uvicorn पर redirect करेगा। +और फिर Traefik अपनी requests को `http://127.0.0.1:8000` पर चल रहे आपके server पर forward करेगा। अब Traefik शुरू करें: @@ -322,15 +295,13 @@ INFO[0000] Configuration loaded from file: /home/user/awesomeapi/traefik.toml ```console $ uv run fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 - -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` ### Responses जाँचें { #check-the-responses } -अब, अगर आप Uvicorn के port वाले URL पर जाते हैं: [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app), तो आपको normal response दिखाई देगा: +अब, अगर आप server के port वाले URL पर जाते हैं: [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app), तो आपको normal response दिखाई देगा: ```JSON { @@ -360,15 +331,15 @@ $ uv run fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 बेशक, यहाँ विचार यह है कि हर कोई app को proxy के जरिए access करेगा, इसलिए path prefix `/api/v1` वाला version "correct" है। -और बिना path prefix वाला version (`http://127.0.0.1:8000/app`), जो सीधे Uvicorn द्वारा प्रदान किया गया है, केवल _proxy_ (Traefik) के access के लिए होगा। +और बिना path prefix वाला version (`http://127.0.0.1:8000/app`), जो सीधे server द्वारा प्रदान किया गया है, केवल _proxy_ (Traefik) के access के लिए होगा। -यह दिखाता है कि Proxy (Traefik) path prefix का उपयोग कैसे करता है और server (Uvicorn) option `--root-path` से `root_path` का उपयोग कैसे करता है। +यह दिखाता है कि Proxy (Traefik) path prefix का उपयोग कैसे करता है और server option `--root-path` से `root_path` का उपयोग कैसे करता है। ### Docs UI जाँचें { #check-the-docs-ui } लेकिन यहाँ मज़ेदार हिस्सा है। ✨ -App को access करने का "official" तरीका उस path prefix वाले proxy के जरिए होगा जिसे हमने define किया है। इसलिए, जैसा कि हम अपेक्षा करेंगे, अगर आप Uvicorn द्वारा सीधे serve किया गया docs UI try करते हैं, URL में path prefix के बिना, तो यह काम नहीं करेगा, क्योंकि यह proxy के जरिए access किए जाने की अपेक्षा करता है। +App को access करने का "official" तरीका उस path prefix वाले proxy के जरिए होगा जिसे हमने define किया है। इसलिए, जैसा कि हम अपेक्षा करेंगे, अगर आप server द्वारा सीधे serve किया गया docs UI try करते हैं, URL में path prefix के बिना, तो यह काम नहीं करेगा, क्योंकि यह proxy के जरिए access किए जाने की अपेक्षा करता है। आप इसे [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) पर देख सकते हैं: @@ -398,7 +369,7 @@ Default रूप से, **FastAPI** OpenAPI schema में `root_path` क अगर आप `servers` की custom list पास करते हैं और कोई `root_path` है (क्योंकि आपकी API proxy के पीछे रहती है), तो **FastAPI** list की शुरुआत में इस `root_path` के साथ एक "server" insert करेगा। -उदाहरण के लिए: +उदाहरण के लिए, उसी `fastapi run --root-path /api/v1` server configuration का उपयोग करने पर: {* ../../docs_src/behind_a_proxy/tutorial003_py310.py hl[4:7] *} @@ -455,7 +426,7 @@ OpenAPI specification में `servers` property optional है। अगर आप नहीं चाहते कि **FastAPI** `root_path` का उपयोग करके automatic server शामिल करे, तो आप parameter `root_path_in_servers=False` उपयोग कर सकते हैं: -{* ../../docs_src/behind_a_proxy/tutorial004_py310.py hl[9] *} +{* ../../docs_src/behind_a_proxy/tutorial004_py310.py hl[8] *} और फिर यह उसे OpenAPI schema में शामिल नहीं करेगा। diff --git a/docs/hi/docs/advanced/security/http-basic-auth.md b/docs/hi/docs/advanced/security/http-basic-auth.md index 172694ef9e..d99a0246af 100644 --- a/docs/hi/docs/advanced/security/http-basic-auth.md +++ b/docs/hi/docs/advanced/security/http-basic-auth.md @@ -12,7 +12,7 @@ HTTP Basic Auth में, application एक header की अपेक्ष फिर, जब आप वह username और password टाइप करते हैं, तो browser उन्हें header में अपने-आप भेज देता है। -## Simple HTTP Basic Auth { #simple-http-basic-auth } +## सरल HTTP Basic Auth { #simple-http-basic-auth } * `HTTPBasic` और `HTTPBasicCredentials` import करें। * `HTTPBasic` का उपयोग करके एक "`security` scheme" बनाएँ। @@ -45,7 +45,9 @@ HTTP Basic Auth में, application एक header की अपेक्ष यह इसके समान होगा: ```Python -if not (credentials.username == "stanleyjobson") or not (credentials.password == "swordfish"): +if not (credentials.username == "stanleyjobson") or not ( + credentials.password == "swordfish" +): # कोई error लौटाएँ ... ``` diff --git a/docs/hi/docs/advanced/templates.md b/docs/hi/docs/advanced/templates.md index a79b025db1..5e9f1b38f8 100644 --- a/docs/hi/docs/advanced/templates.md +++ b/docs/hi/docs/advanced/templates.md @@ -1,3 +1,7 @@ +--- +render_macros: false +--- + # Templates { #templates } आप **FastAPI** के साथ अपनी पसंद का कोई भी template engine उपयोग कर सकते हैं। @@ -63,14 +67,10 @@ FastAPI 0.108.0, Starlette 0.29.0 से पहले, `name` पहला param उस HTML में जिसमें यह शामिल है: -{% raw %} - ```jinja Item ID: {{ id }} ``` -{% endraw %} - ...यह आपके द्वारा pass किए गए "context" `dict` से लिया गया `id` दिखाएगा: ```Python @@ -89,22 +89,48 @@ Item ID: 42 इसलिए, इस section के साथ: -{% raw %} - ```jinja ``` -{% endraw %} - ...यह उसी URL का link generate करेगा जिसे *path operation function* `read_item(id=id)` handle करेगा। -उदाहरण के लिए, `42` की ID के साथ, यह render होगा: +`url_for()` वर्तमान request के आधार पर scheme और host सहित एक absolute URL return करता है। + +उदाहरण के लिए, यदि आपका application `https://example.com` पर serve किया जाता है, तो `42` की ID के साथ, यह render होगा: + +```html + +``` + +### Templates में URL paths { #url-paths-in-templates } + +उसी साइट के links के लिए, आप केवल URL path प्राप्त करने के लिए `.path` attribute का उपयोग कर सकते हैं, उदाहरण के लिए, `templates/item_path.html` में: + +```jinja hl_lines="4 7" +{!../../docs_src/templates/templates/item_path.html!} +``` + +Template का नाम `TemplateResponse` को pass करें: + +{* ../../docs_src/templates/tutorial002_py310.py ln[14:18] hl[17] *} + +उसी उदाहरण में, item का link इस तरह render होगा: ```html ``` +शुरुआती `/` इस path को वर्तमान साइट के root के सापेक्ष बनाता है। + +`.path` attribute में scheme, host, query parameters और fragment शामिल नहीं होते। किसी अन्य host के links के लिए पूरे URL का उपयोग करें। + +/// tip | सुझाव + +यदि आपका application किसी proxy के पीछे है, तो [Proxy के पीछे](behind-a-proxy.md) में बताए अनुसार forwarded headers और `root_path` configure करें। + +/// + ## Templates और static files { #templates-and-static-files } आप template के अंदर `url_for()` का भी उपयोग कर सकते हैं, और इसे, उदाहरण के लिए, उन `StaticFiles` के साथ उपयोग कर सकते हैं जिन्हें आपने `name="static"` के साथ mount किया है। diff --git a/docs/hi/docs/async.md b/docs/hi/docs/async.md index 8841c92be5..e1286dc9b3 100644 --- a/docs/hi/docs/async.md +++ b/docs/hi/docs/async.md @@ -15,7 +15,7 @@ results = await some_library() तो, अपने *path operation functions* को `async def` के साथ declare करें, जैसे: ```Python hl_lines="2" -@app.get('/') +@app.get("/") async def read_results(): results = await some_library() return results @@ -32,7 +32,7 @@ async def read_results(): अगर आप ऐसी third party library का उपयोग कर रहे हैं जो किसी चीज़ (database, API, file system, आदि) से communicate करती है और `await` का उपयोग करने का support नहीं रखती, (वर्तमान में अधिकांश database libraries के साथ यही स्थिति है), तो अपने *path operation functions* को सामान्य रूप से, केवल `def` के साथ declare करें, जैसे: ```Python hl_lines="2" -@app.get('/') +@app.get("/") def results(): results = some_library() return results @@ -343,7 +343,7 @@ burgers = get_burgers(2) तो, अगर आप कोई library use कर रहे हैं जो आपको बताती है कि आप उसे `await` के साथ call कर सकते हैं, तो आपको उसका उपयोग करने वाले *path operation functions* को `async def` के साथ create करना होगा, जैसे: ```Python hl_lines="2-3" -@app.get('/burgers') +@app.get("/burgers") async def read_burgers(): burgers = await get_burgers(2) return burgers diff --git a/docs/hi/docs/features.md b/docs/hi/docs/features.md index 56d042dc77..d1ac680fae 100644 --- a/docs/hi/docs/features.md +++ b/docs/hi/docs/features.md @@ -1,14 +1,14 @@ -# विशेषताएँ { #features } +# Features { #features } -## FastAPI की विशेषताएँ { #fastapi-features } +## FastAPI के features { #fastapi-features } **FastAPI** आपको निम्नलिखित देता है: -### खुले मानकों पर आधारित { #based-on-open-standards } +### खुले standards पर आधारित { #based-on-open-standards } * API बनाने के लिए [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification), जिसमें path operations, parameters, request bodies, security, आदि की घोषणाएँ शामिल हैं। * [**JSON Schema**](https://json-schema.org/) के साथ automatic data model documentation (क्योंकि OpenAPI स्वयं JSON Schema पर आधारित है)। -* इन मानकों के इर्द-गिर्द डिज़ाइन किया गया, एक बहुत सावधानीपूर्वक अध्ययन के बाद। ऊपर से बाद में जोड़ी गई परत की तरह नहीं। +* इन standards के इर्द-गिर्द डिज़ाइन किया गया, एक बहुत सावधानीपूर्वक अध्ययन के बाद। ऊपर से बाद में जोड़ी गई परत की तरह नहीं। * यह कई भाषाओं में automatic **client code generation** का उपयोग करने की भी अनुमति देता है। ### Automatic docs { #automatic-docs } @@ -36,6 +36,7 @@ from datetime import date from pydantic import BaseModel + # किसी variable को str के रूप में घोषित करें # और function के अंदर editor support पाएँ def main(user_id: str): @@ -75,7 +76,7 @@ my_second_user: User = User(**second_user_data) पूरे framework को उपयोग में आसान और सहज बनाने के लिए डिज़ाइन किया गया था, development शुरू करने से पहले ही सभी निर्णयों को कई editors पर test किया गया, ताकि सबसे अच्छा development experience सुनिश्चित किया जा सके। -Python developer surveys में, यह स्पष्ट है [कि सबसे अधिक उपयोग की जाने वाली सुविधाओं में से एक "autocompletion" है](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)। +Python developer surveys में, यह स्पष्ट है [कि सबसे अधिक उपयोग किए जाने वाले features में से एक "autocompletion" है](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)। पूरा **FastAPI** framework इसे पूरा करने के लिए डिज़ाइन किया गया है। Autocompletion हर जगह काम करता है। @@ -157,7 +158,7 @@ FastAPI में एक बेहद आसान, लेकिन बेहद * 100% type annotated code base। * Production applications में उपयोग किया गया। -## Starlette की विशेषताएँ { #starlette-features } +## Starlette के features { #starlette-features } **FastAPI** [**Starlette**](https://starlette.dev/) के साथ पूरी तरह compatible है (और उसी पर आधारित है)। इसलिए, आपके पास जो भी अतिरिक्त Starlette code है, वह भी काम करेगा। @@ -175,7 +176,7 @@ FastAPI में एक बेहद आसान, लेकिन बेहद * 100% test coverage। * 100% type annotated codebase। -## Pydantic की विशेषताएँ { #pydantic-features } +## Pydantic के features { #pydantic-features } **FastAPI** [**Pydantic**](https://pydantic.dev/docs/) के साथ पूरी तरह compatible है (और उसी पर आधारित है)। इसलिए, आपके पास जो भी अतिरिक्त Pydantic code है, वह भी काम करेगा। diff --git a/docs/hi/docs/index.md b/docs/hi/docs/index.md index c0ead3314e..02650b7cdb 100644 --- a/docs/hi/docs/index.md +++ b/docs/hi/docs/index.md @@ -40,7 +40,7 @@ include_yaml: FastAPI एक आधुनिक, तेज़ (उच्च-प्रदर्शन) web framework है जो standard Python type hints के आधार पर Python से APIs बनाने के लिए है। -मुख्य विशेषताएँ: +मुख्य features: * **तेज़**: बहुत उच्च प्रदर्शन, **NodeJS** और **Go** के समकक्ष (Starlette और Pydantic की बदौलत)। [उपलब्ध सबसे तेज़ Python frameworks में से एक](#performance)। * **कोड लिखने में तेज़**: features विकसित करने की गति लगभग 200% से 300% तक बढ़ाएँ। * @@ -89,7 +89,7 @@ FastAPI एक आधुनिक, तेज़ (उच्च-प्रदर्
-
+
@@ -105,7 +105,7 @@ FastAPI एक आधुनिक, तेज़ (उच्च-प्रदर्