반응형
조건을 충족하는 모든 뷰에 선택적으로 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
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python에서 특정 길이의 임의 문자열을 생성하는 가장 좋은 방법은 무엇입니까? (0) | 2021.01.08 |
---|---|
파이썬 백 스페이스 키 입력을 발생시키는 Python 코드? (0) | 2021.01.08 |
파이썬 주어진 증분으로 숫자 범위를 만드는 방법 (0) | 2021.01.08 |
파이썬 Pandas 시리즈에서 요소의 색인 찾기 (0) | 2021.01.08 |
파이썬 Set 객체에서 요소의 인덱스를 얻는 방법 (0) | 2021.01.08 |
댓글