-
-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
🌐 Add Persian translation for
docs/fa/docs/tutorial/middleware.md
(#…
- Loading branch information
1 parent
08b98ad
commit e372848
Showing
1 changed file
with
59 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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> را مدیریت کنید، خواهید خواند. |