کاربرد دکوراتورهای ویو در جنگو و مدیریت رفتار درخواست‌ها

این مقاله به بررسی دکوراتورهای ویو در جنگو می‌پردازد؛ ابزارهایی که امکان کنترل روش‌های مجاز HTTP، پردازش شرطی، فشرده‌سازی GZip، مدیریت هدرهای Vary، کنترل کش و سفارشی‌سازی رفتار CommonMiddleware را فراهم می‌کنند. این دکوراتورها به توسعه‌دهندگان کمک می‌کنند تا رفتار ویوها را دقیق‌تر و استانداردتر مدیریت کنند.

دکوراتور ویوHTTP Methodsکش جنگو

~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 هستند. استفاده صحیح از این دکوراتورها باعث افزایش امنیت، بهبود عملکرد و استانداردسازی رفتار ویوها در پروژه‌های جنگو می‌شود.


نوشته و پژوهش شده توسط دکتر شاهین صیامی