Django 미들웨어 실행 순서 자세히 알 아 보기
Django 의 중간 부품 은 경량급,하부 플러그 인 시스템 으로 Django 의 요청 과 응답 처리 과정 에 개입 하여 Django 의 입력 이나 출력 을 수정 할 수 있 습 니 다.미들웨어 의 디자인 은 개발 자 에 게 무 침입 식 개발 방식 을 제공 하여 Django 프레임 워 크 의 건장 성 을 강화 했다.
우 리 는 중간 부품 을 사용 하여 Django 처리 보기 의 서로 다른 단계 에서 입력 이나 출력 에 관여 할 수 있 습 니 다.
1 중간 부품 의 정의 방법
중간 부품 공장 함 수 를 정의 하고 다른 호출 이 가능 한 중간 부품 을 되 돌려 줍 니 다.
미들웨어 공장 함 수 는 호출 가능 한 get 을 받 아야 합 니 다.response 대상.
되 돌아 오 는 미들웨어 도 호출 될 수 있 는 대상 이 며,보기 처럼 request 대상 인 자 를 받 아 response 대상 을 되 돌려 야 합 니 다.
def simple_middleware(get_response):
# Django 。
def middleware(request):
# 。
response = get_response(request)
# 。
return response
return middleware
예 를 들 어 users 응용 프로그램 에 middleware.py 파일 을 새로 만 듭 니 다.
def my_middleware(get_response):
print('init ')
def middleware(request):
print('before request ')
response = get_response(request)
print('after response ')
return response
return middleware
미들웨어 를 정의 한 후 settings.py 파일 에 미들웨어 를 추가 해 야 합 니 다.
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'users.middleware.my_middleware', #
]
보 기 를 정의 하여 테스트 합 니 다.
def demo_view(request):
print('view ')
return HttpResponse('OK')
실행 결과메모:Django 는 디 버 깅 모드 에서 실 행 됩 니 다.미들웨어 init 부분 은 두 번 호출 될 수 있 습 니 다.
2 실행 절차
3.여러 미들웨어 의 실행 순서
4.567917.요청 보기 가 처리 되 기 전에 중간 부품 은 위 에서 아래로 순서대로 실 행 됩 니 다4.567917.요청 보기 가 처 리 된 후 미들웨어 는 아래 에서 위로 순서대로 실 행 됩 니 다
예시:
두 개의 미들웨어 정의
def my_middleware(get_response):
print('init ')
def middleware(request):
print('before request ')
response = get_response(request)
print('after response ')
return response
return middleware
def my_middleware2(get_response):
print('init2 ')
def middleware(request):
print('before request 2 ')
response = get_response(request)
print('after response 2 ')
return response
return middleware
중간 부품 두 개 추가
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'users.middleware.my_middleware', #
'users.middleware.my_middleware2', #
]
실행 결과init 2 호출 됨
init 호출 됨
before request 호출 됨
before request 2 호출 됨
view 보기 호출 됨
after response 2 호출 됨
after response 호출 됨
결론:미들웨어 의 본질 은 바로 장식 기 이다.장식 기 에 대해 제 가 예전 에 수필 에서 도 상세 하 게 말 했 듯 이 장식 기의 본질 은 바로 폐쇄 적 인 것 입 니 다.
장식 기 에 있어 서 이 프로그램 은 위 에서 아래로 실 행 됩 니 다.장식 기 1-3 을 기록 한 다음 에 함 수 를 읽 었 을 때 장식 기 는 장식 을 시작 합 니 다.함수 의 인용 을 장식 기 에 전달 하고 장식 기 3 부터 위로 장식 하기 시 작 했 습 니 다.그래서 이때 장식 기 3 의 초기 화 를 실행 하고 장식 한 함 수 를 새로운 함수 로 생각 합 니 다.다시 새로운 인용 을 장식 기 2 에 전달 한 다음 에 장식 기 2 를 초기 화하 고 새로운 함수 의 인용 을 장식 기 1 에 전달 하여 장식 합 니 다.이때 장식 기 1 의 초기 화 를 시작 하고 실행 을 시작 합 니 다.그 다음 에 실행 순 서 는 1-3 장식 을 수행 하 는 내 용 입 니 다.마지막 으로 원래 의 함 수 를 실행 합 니 다.기 존 함수 의 기능 과 특성 에 대한 요구 에 도달 하 다.
장식 기:프로그램 시작 순서,위 에서 아래로 읽 기-아래 에서 위로 장식-위 에서 아래로 실행
미들웨어 에서 실행 순 서 는 같 습 니 다.미들웨어 장식 은 보기 함수 나 시도 클래스 일 뿐 입 니 다.init()가 초기 화 됩 니 다.제 가 장식 기 순 서 를 설명 할 때 초기 화 는 현재 init()입 니 다.즉,중간 부품 은 실행 에 있어 서도 가장 가 까 운 함수 나 클래스 의 미들웨어 부터 초기 화 됩 니 다.미들웨어 등록 시...여러 개의 미들웨어 가 있 으 면 프로그램 은 위 에서 아래로 미들웨어 를 확인 하고 이 어 보기 함 수 를 실행 할 때 부터 아래 에서 위로 init()를 진행 합 니 다.여기 서 init()를 초기 화 하 는 것 은 Flask 프레임 워 크 의 네 가지 요청 체크 에서 요청 을 시작 하기 전에 한 번 실행 하 는 것 과 유사 합 니 다.아래 에서 위로 init 를 실행 한 다음 위 에서 아래로 요청 을 수행 하기 전에 실행 할 코드 를 초기 화 합 니 다.요청 이 끝 난 후 아래 에서 위로 요청 한 코드 를 실행 합 니 다.
미들웨어:프로그램 시작 순서,위 에서 아래로 읽 기-아래 에서 위로 init()-위 에서 아래로 요청 을 실행 하기 전-보기 의 요청-아래 에서 위로 요청 을 실행 한 후
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.