mirror of https://github.com/tiangolo/fastapi.git
🌐 Add Persian translation for `docs/fa/docs/tutorial/middleware.md` (#9695)
This commit is contained in:
parent
08b98adea6
commit
e3728489fa
|
|
@ -0,0 +1,59 @@
|
|||
# میانافزار - middleware
|
||||
|
||||
شما میتوانید میانافزارها را در **FastAPI** اضافه کنید.
|
||||
|
||||
"میانافزار" یک تابع است که با هر درخواست(request) قبل از پردازش توسط هر path operation (عملیات مسیر) خاص کار میکند. همچنین با هر پاسخ(response) قبل از بازگشت آن نیز کار میکند.
|
||||
|
||||
* هر **درخواستی (request)** که به برنامه شما می آید را می گیرد.
|
||||
* سپس می تواند کاری برای آن **درخواست** انجام دهید یا هر کد مورد نیازتان را اجرا کنید.
|
||||
* سپس **درخواست** را به بخش دیگری از برنامه (توسط یک path operation مشخص) برای پردازش ارسال می کند.
|
||||
* سپس **پاسخ** تولید شده توسط برنامه را (توسط یک path operation مشخص) دریافت میکند.
|
||||
* می تواند کاری با **پاسخ** انجام دهید یا هر کد مورد نیازتان را اجرا کند.
|
||||
* سپس **پاسخ** را برمی گرداند.
|
||||
|
||||
!!! توجه "جزئیات فنی"
|
||||
در صورت وجود وابستگی هایی با `yield`، کد خروجی **پس از** اجرای میانافزار اجرا خواهد شد.
|
||||
|
||||
در صورت وجود هر گونه وظایف پس زمینه (که در ادامه توضیح داده میشوند)، تمام میانافزارها *پس از آن* اجرا خواهند شد.
|
||||
|
||||
## ساخت یک میان افزار
|
||||
|
||||
برای ایجاد یک میانافزار، از دکوریتور `@app.middleware("http")` در بالای یک تابع استفاده میشود.
|
||||
|
||||
تابع میان افزار دریافت می کند:
|
||||
* `درخواست`
|
||||
* تابع `call_next` که `درخواست` را به عنوان پارامتر دریافت می کند
|
||||
* این تابع `درخواست` را به *path operation* مربوطه ارسال می کند.
|
||||
* سپس `پاسخ` تولید شده توسط *path operation* مربوطه را برمیگرداند.
|
||||
* شما میتوانید سپس `پاسخ` را تغییر داده و پس از آن را برگردانید.
|
||||
|
||||
```Python hl_lines="8-9 11 14"
|
||||
{!../../../docs_src/middleware/tutorial001.py!}
|
||||
```
|
||||
|
||||
!!! نکته به خاطر داشته باشید که هدرهای اختصاصی سفارشی را می توان با استفاده از پیشوند "X-" اضافه کرد.
|
||||
|
||||
اما اگر هدرهای سفارشی دارید که میخواهید مرورگر کاربر بتواند آنها را ببیند، باید آنها را با استفاده از پارامتر `expose_headers` که در مستندات <a href="https://www.starlette.io/middleware/#corsmiddleware" class="external-link" target="_blank">CORS از Starlette</a> توضیح داده شده است، به پیکربندی CORS خود اضافه کنید.
|
||||
|
||||
!!! توجه "جزئیات فنی"
|
||||
شما همچنین میتوانید از `from starlette.requests import Request` استفاده کنید.
|
||||
|
||||
**FastAPI** این را به عنوان یک سهولت برای شما به عنوان برنامهنویس فراهم میکند. اما این مستقیما از Starlette به دست میآید.
|
||||
|
||||
### قبل و بعد از `پاسخ`
|
||||
|
||||
شما میتوانید کدی را برای اجرا با `درخواست`، قبل از اینکه هر *path operation* آن را دریافت کند، اضافه کنید.
|
||||
|
||||
همچنین پس از تولید `پاسخ`، قبل از بازگشت آن، میتوانید کدی را اضافه کنید.
|
||||
|
||||
به عنوان مثال، میتوانید یک هدر سفارشی به نام `X-Process-Time` که شامل زمان پردازش درخواست و تولید پاسخ به صورت ثانیه است، اضافه کنید.
|
||||
|
||||
```Python hl_lines="10 12-13"
|
||||
{!../../../docs_src/middleware/tutorial001.py!}
|
||||
```
|
||||
|
||||
## سایر میان افزار
|
||||
|
||||
شما میتوانید بعداً در مورد میانافزارهای دیگر در [راهنمای کاربر پیشرفته: میانافزار پیشرفته](../advanced/middleware.md){.internal-link target=_blank} بیشتر بخوانید.
|
||||
|
||||
شما در بخش بعدی در مورد این که چگونه با استفاده از یک میانافزار، <abbr title="Cross-Origin Resource Sharing">CORS</abbr> را مدیریت کنید، خواهید خواند.
|
||||
Loading…
Reference in New Issue