본문 바로가기
파이썬

파이썬 Django에서 커스텀 미들웨어를 설정하는 방법

by º기록 2021. 1. 8.
반응형

조건을 충족하는 모든 뷰에 선택적으로 kwarg를 전달하는 미들웨어를 만들려고합니다.

문제는 미들웨어를 설정하는 방법의 예를 찾을 수 없다는 것입니다. 원하는 메서드 인 process_view 를 재정의하는 클래스를 보았습니다.

Class CheckConditionMiddleware(object):  
    def process_view(self, request):  

        return None  

하지만이 수업은 어디에 두어야합니까? 미들웨어 앱을 만들고 그 안에이 클래스를 넣은 다음 settings.middleware 에서 참조합니까?

 

해결 방법

 

없는 경우 다음 구조에 따라 앱 내에 middleware 폴더를 만들어야합니다.

yourproject/yourapp/middleware

폴더 미들웨어는 settings.py, urls, templates ...와 같은 폴더에 있어야합니다.

중요 : 앱이이 폴더를 인식 할 수 있도록 미들웨어 폴더 안에 __init__.py 빈 파일을 만드는 것을 잊지 마세요.

이제 사용자 지정 미들웨어 용 파일을 만들어야합니다.이 예에서는 IP를 기반으로 사용자를 필터링하는 미들웨어를 원한다고 가정하고 미들웨어 내부에 filter_ip_middleware.py 라는 파일을 만듭니다. 이 코드가있는 폴더 :

class FilterIPMiddleware(object):
    # Check if client IP is allowed
    def process_request(self, request):
        allowed_ips = ['192.168.1.1', '123.123.123.123', etc...] # Authorized ip's
        ip = request.META.get('REMOTE_ADDR') # Get client IP
        if ip not in allowed_ips:
            raise Http403 # If user is not allowed raise Error

       # If IP is allowed we don't do anything
       return None

우리는 다음을 찾아야합니다.

settings.py 안에 미들웨어를 추가해야합니다 ( 마지막 위치에 추가 ). 다음과 같아야합니다.

MIDDLEWARE = ( #  Before Django 1.10 the setting name was 'MIDDLEWARE_CLASSES'
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
     # Above are django standard middlewares

     # Now we add here our custom middleware
     'yourapp.middleware.filter_ip_middleware.FilterIPMiddleware'
)

완료! 이제 모든 클라이언트의 모든 요청이 사용자 지정 미들웨어를 호출하고 사용자 지정 코드를 처리합니다!

 

참조 페이지 https://stackoverflow.com/questions/18322262

 

 

반응형

댓글