Middleware در جنگو ابزاری است که برای پردازش درخواست‌ها و پاسخ‌ها قبل و بعد از رسیدن آن‌ها به viewها استفاده می‌شود. این ابزار به توسعه‌دهندگان این امکان را می‌دهد که مواردی مانند احراز هویت، کرنل‌ها، و حتی مدیریت خطاها را بدون نیاز به تغییر در کد viewها مدیریت کنند. در این مقاله، به آموزش پیاده‌سازی middleware در جنگو خواهیم پرداخت.

۱. تعریف middleware

Middleware‌ها در جنگو یک سری کلا‌س‌ها هستند که می‌توانند به صورت زنجیره‌ای در درخواست‌ها و پاسخ‌ها عمل کنند. هر middleware می‌تواند پردازش‌های خاصی را بر روی درخواست‌ها یا پاسخ‌ها انجام دهد و در نهایت به middleware بعدی در زنجیره منتقل شود.

۲. ایجاد یک middleware جدید

برای ایجاد یک middleware جدید، می‌توانید مراحل زیر را دنبال کنید:

  1. ایجاد یک فایل جدید: به پوشه اپلیکیشن خود بروید (به عنوان مثال، myapp) و یک فایل جدید به نام middleware.py ایجاد کنید.

  2. نوشتن middleware: در فایل middleware.py، یک کلاس جدید ایجاد کنید که باید حداقل شامل دو متد باقی‌مانده باشد: __init__ و __call__. به عنوان مثال:

# myapp/middleware.py

class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        
    def __call__(self, request):
        # کد قبل از پردازش درخواست
        response = self.get_response(request)
        # کد بعد از پردازش پاسخ
        return response

در اینجا، get_response تابعی است که پاسخ را برای درخواست دریافت می‌کند. شما می‌توانید در متد __call__ هر منطقی که می‌خواهید را اجرا کنید.

آموزش جنگو (رایگان)

۳. ثبت middleware در تنظیمات

پس از ایجاد middleware، باید آن را در تنظیمات پروژه‌ی خود ثبت کنید. برای این کار، به فایل settings.py خود بروید و آن را به لیست MIDDLEWARE اضافه کنید:

# project/settings.py

MIDDLEWARE = [
    ...
    'myapp.middleware.SimpleMiddleware',
    ...
]

مهم است که ترتیب middleware‌ها در این لیست مهم است، زیرا ترتیب آنها بر روی روند درخواست‌ها و پاسخ‌ها تأثیر می‌گذارد.

۴. استفاده از middleware برای اهداف مختلف

شما می‌توانید از middleware برای موارد مختلفی استفاده کنید:

  • احراز هویت: بررسی اینکه آیا کاربر وارد سیستم شده است یا خیر.
  • مدیریت خطا: ثبت خطاها و ارسال پاسخ‌های مناسب به کاربران.
  • تنظیمات سفارشی: تغییر هدرها و پارامترهای درخواست یا پاسخ.

به عنوان مثال، اگر بخواهید middleware‌ای بنویسید که از اتفاق افتادن خطاها خودداری کند، می‌توانید کد زیر را اضافه کنید:

def __call__(self, request):
    try:
        response = self.get_response(request)
    except Exception as e:
        # پردازش خطا
        return HttpResponse('Error occurred: {}'.format(e))
    return response

نتیجه‌ گیری

Middleware در جنگو ابزاری بسیار مفید برای توسعه‌دهندگان است که می‌توانند با استفاده از آن ساده‌تر درخواست‌ها و پاسخ‌ها را مدیریت کنند. با پیاده‌سازی middleware، شما می‌توانید به راحتی عملکرد اپلیکیشن خود را بهبود ببخشید و قابلیت‌های جدیدی به آن اضافه کنید.