미들웨어(Middleware)는 소프트웨어 개발에서 여러 컴포넌트들 간의 통신을 중개하거나 변형하는 소프트웨어 디자인 패턴입니다. Django에서의 미들웨어는 웹 애플리케이션의 요청과 응답을 처리하는 핵심 요소 중 하나입니다. 이는 요청이 처리되기 전과 후에 실행되어 요청과 응답을 수정하거나 처리할 수 있습니다.
미들웨어는 다음과 같은 역할을 수행합니다.
def simple_middleware(get_response):
# One-time configuration and initialization.
def middleware(request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
return middleware
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
객체 생성을 서브 클래스에서 결정하도록 하는 디자인 패턴입니다. 미들웨어에서는 특정 메소드를 구현하여 요청 및 응답을 처리할 수 있습니다.
class CustomMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def process_view(self, request, view_func, view_args, view_kwargs):
# 뷰 실행 전에 호출됩니다.
# request: HttpRequest 객체
# view_func: 호출할 뷰 함수
# view_args: 뷰 함수에 전달될 위치 인수
# view_kwargs: 뷰 함수에 전달될 키워드 인수
pass
def process_exception(self, request, exception):
# 뷰에서 예외가 발생할 때 호출됩니다.
# request: HttpRequest 객체
# exception: 발생한 예외 객체
pass
def process_template_response(self, request, response):
# 템플릿 응답 객체를 받아 처리합니다.
# request: HttpRequest 객체
# response: TemplateResponse 객체
pass
상위에서 하위로 하위에서 상위로 순차적으로 실행됩니다.
참고링크 : https://docs.djangoproject.com/en/2.2/topics/http/middleware/#