Django 중간 키 및 컨텍스트 프로세서
4114 단어 DjanGo
Django
중간부품Middleware
경량급, 밑바닥의'플러그인'시스템으로 Django
의 요청과 응답 처리 과정에 개입하여 Django
의 입력이나 출력을 수정할 수 있다.중간부품 활성화
Django
프로필에 MIDDLEWARE_CLASSES
모듈에 추가해야 합니다.사용자 정의 중간부품
모든 중간부품 구성 요소는 하나의 독립된 Python 클래스로 다음 방법 중 하나 이상을 정의할 수 있습니다
settings.py
와 같은 디렉터리에서 mymiddleware.py
파일을 만들고 클래스MyException
를 정의하여 사용자 정의 이상process_exception
을 실현하는 방법#---------mymiddleware.py------------
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
#
class MyException(MiddlewareMixin):
def process_exception(self,request,exception):
return HttpResponse(exception)
#
from ts22.models import UserModel
class UserMiddleware(MiddlewareMixin):
def __init(self,get_response):
self.get_response = get_response
def __call__(self,request):
# request view
username = request.session.get('username',' ')
user = UserModel.objects.filter(username=username).first()
if user and not hasattr(request,'myuser'):
setattr(request,'myuser',user)
response = self.get_response(request)
# response
return response
클래스
MyException
를 settings.py
중간부품에 등록하기#---------setting.py------------
MIDDLEWARE_CLASSES = (
...
'test11.mymiddleware.MyException',
'test11.myMiddleware.UserMiddleware',
)
# test11 。
템플릿 컨텍스트 프로세서
settings.py
에는 현재 사용 중인 컨텍스트 프로세서가 포함되어 있습니다.그의 역할은 각각 response
에 자신이 추가하고자 하는 매개 변수를 제공할 수 있다는 것이다.settings.py->TEMPLATES->OPTIONS->context_processors
에 사용된 컨텍스트 프로세서의 역할:django.template.context_processors.debug: debug 。
django.template.context_processors.request: request 。
django.contrib.auth.context_processors.auth: user 。
django.contrib.messages.context_processors.messages: messages 。
컨텍스트 프로세서를 사용자화하려면 다음과 같이 하십시오.
중간부품은 리퀘스트에 속성을 추가하는 것과 유사하지만,
템플릿에 속성을 추가하는 것과 유사하다.하나는 위로, 하나는 아래로.settings.py
와 같은 디렉터리에서 mycontextprocessor.py
파일을 만들고 myuser
함수를 정의합니다#-------------mycontextprocessor.py------------
def myuser(request):
username = request.session.get('username', ' ')
user = UserModel.objects.filter(username=username).first()
if user:
return {'myuser': username}
else:
return {}
# :1. request 2.
우리가 정의한 상하문 프로세서를 settings에 놓으십시오.py->TEMPLATES->OPTIONS->context_processors에 있습니다.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'test11.mycontextprocessor.myuser',
],
},
},
]