Django 중간 키 및 컨텍스트 프로세서

4114 단어 DjanGo
중간부품과 상하문 프로세서Django 중간부품Middleware경량급, 밑바닥의'플러그인'시스템으로 Django의 요청과 응답 처리 과정에 개입하여 Django의 입력이나 출력을 수정할 수 있다.
중간부품 활성화Django 프로필에 MIDDLEWARE_CLASSES 모듈에 추가해야 합니다.
사용자 정의 중간부품
모든 중간부품 구성 요소는 하나의 독립된 Python 클래스로 다음 방법 중 하나 이상을 정의할 수 있습니다
  • _init _:매개 변수가 필요 없습니다. 서버가 첫 번째 요청에 응답할 때 현재 중간부품을 사용할지 여부를 확인하는 데 사용합니다.
  • process_request(request): 보기를 실행하기 전에 호출되고 요청마다 호출되며 None 또는 Http Response 대상을 되돌려줍니다
  • process_view(request,view func,view args,view kwargs): 보기를 호출하기 전에 호출되고 요청마다 호출되며 None 또는 HttpResponse 대상
  • 으로 돌아갑니다.
  • process_template_response(request,response): 보기가 실행된 후에 호출되고 요청마다 호출되며render 방법을 실현한 응답 대상
  • 을 되돌려줍니다.
  • process_response(request,response): 모든 응답이 브라우저로 되돌아오기 전에 호출되고 요청마다 호출되며 Http Response 대상
  • 으로 돌아갑니다.
  • process_exception(request,response,exception): 보기가 이상을 던졌을 때 호출하고 요청마다 호출하며 HttpResponse 대상을 되돌려줍니다
  • 예: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
    
    

    클래스MyExceptionsettings.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',
                ],
            },
        },
    ]
    

    좋은 웹페이지 즐겨찾기