~3 دقیقه مطالعه • بروزرسانی ۲۳ اسفند ۱۴۰۴
مقدمه
جنگو مجموعهای از view decorators ارائه میدهد که میتوانند برای کنترل رفتار ویوها در سطح HTTP، کش، فشردهسازی و مدیریت هدرها استفاده شوند. این دکوراتورها به توسعهدهندگان اجازه میدهند تا بدون تغییر منطق اصلی ویو، رفتار آن را به شکل دقیق و استاندارد تنظیم کنند.
محدود کردن روشهای HTTP
ماژول django.views.decorators.http دکوراتورهایی برای محدود کردن دسترسی به ویو بر اساس نوع درخواست ارائه میدهد. در صورت عدم تطابق، پاسخ HttpResponseNotAllowed بازگردانده میشود.
استفاده از require_http_methods
این دکوراتور مشخص میکند که ویو فقط مجموعهای از متدهای خاص را بپذیرد:
from django.views.decorators.http import require_http_methods
@require_http_methods(["GET", "POST"])
def my_view(request):
passنام متدها باید با حروف بزرگ نوشته شوند.
دکوراتورهای اختصاصی
require_GET: فقط متدGETمجاز است.require_POST: فقط متدPOSTمجاز است.require_safe: فقط متدهایGETوHEADمجاز هستند.
متد HEAD معمولاً مانند GET پردازش میشود، اما محتوای پاسخ حذف میگردد. به همین دلیل، استفاده از require_safe در بسیاری از موارد مناسبتر است.
پردازش شرطی ویو
برای کنترل کش و مدیریت درخواستهای شرطی، جنگو دکوراتورهای زیر را ارائه میدهد:
condition: پردازش شرطی بر اساسETagیاLast-Modified.conditional_page: مشابه رفتارConditionalGetMiddlewareاما در سطح ویو.etag: تولید هدرETagبرای پاسخ.last_modified: تولید هدرLast-Modified.
این دکوراتورها به بهینهسازی کش و کاهش بار سرور کمک میکنند.
فشردهسازی GZip
برای فعالسازی فشردهسازی محتوا در سطح ویو، از دکوراتور gzip_page استفاده میشود:
gzip_page: در صورت پشتیبانی مرورگر، پاسخ را باgzipفشرده میکند.
این دکوراتور هدر Vary را نیز تنظیم میکند تا کشها بر اساس Accept-Encoding تصمیمگیری کنند.
مدیریت هدرهای Vary
هدر Vary مشخص میکند که کش باید بر اساس کدام هدرهای درخواست، کلید کش را تولید کند. جنگو دکوراتورهای زیر را برای کنترل این رفتار ارائه میدهد:
vary_on_cookie: کش را بر اساس کوکیها تفکیک میکند.vary_on_headers: کش را بر اساس هدرهای مشخصشده تفکیک میکند.
این دکوراتورها برای کنترل دقیق رفتار کش در صفحات پویا بسیار مفید هستند.
کنترل کش
ماژول django.views.decorators.cache ابزارهایی برای کنترل کش سمت سرور و کلاینت ارائه میدهد.
دکوراتور cache_control
این دکوراتور هدر Cache-Control را با استفاده از آرگومانهای ورودی اصلاح میکند.
دکوراتور never_cache
این دکوراتور هدرهای زیر را اضافه میکند:
Expiresبا زمان فعلیCache-Control: max-age=0, no-cache, no-store, must-revalidate, private
این دکوراتور تضمین میکند که صفحه هرگز کش نشود.
سفارشیسازی رفتار CommonMiddleware
ماژول django.views.decorators.common امکان کنترل رفتار CommonMiddleware را در سطح ویو فراهم میکند.
no_append_slash: جلوگیری از افزودن خودکار اسلش انتهایی توسطAPPEND_SLASH.
جمعبندی
دکوراتورهای ویو در جنگو ابزارهای قدرتمندی برای کنترل رفتار درخواستها، مدیریت کش، فشردهسازی، و محدودسازی متدهای HTTP هستند. استفاده صحیح از این دکوراتورها باعث افزایش امنیت، بهبود عملکرد و استانداردسازی رفتار ویوها در پروژههای جنگو میشود.
نوشته و پژوهش شده توسط دکتر شاهین صیامی