몇 주 동안 스크립트를 작성하다가 오늘 드디어 웹 프레임워크를 접하게 되었습니다. Python의 웹 프레임워크를 배우려면 Django가 거의 필수 과정입니다. 이번에는 먼저 시작하겠습니다. 작업은 설정에 버전을 추가하는 것입니다. 정적 CSS 및 js의 경로를 렌더링할 때 "example.v1124.css"와 같은 버전 번호를 첨부한 다음 요청 요청에서 버전 번호를 제거합니다. 왜 이런 일을 하는가? 이렇게 하면 프런트 엔드의 정적 파일 출력 경로에 버전 번호가 추가됩니다. 이런 방식으로 새 정적 파일이 개발되면 클라이언트는 로컬 캐시를 강제로 새로 고치게 됩니다. 이를 위해서는 먼저 설정 파일에서 구성해야 하며, 수정될 때마다 설정에서 버전 번호를 직접 읽을 수 있도록 해야 합니다. 1. Django 미들웨어의 요청 주기
즉, 각 요청은 먼저 미들웨어의 process_request 함수를 통과합니다. 이 함수는 None 또는 an을 반환합니다. HttpResponse 객체가 반환되면 처리는 계속됩니다. 다른 미들웨어가 HttpResponse를 반환하면 프로세스가 중단되고 웹 페이지로 반환됩니다.
2. 미들웨어 사용자 정의 및 등록1. 미들웨어 생성프로젝트 루트 디렉터리에 미들웨어 py 파일 생성:1 class RequestExeute(object): 2 def process_request(self, request): 3 print('process_request') 4 5 def process_view(self, request, callback, callback_args, callback_kwargs): 6 print('process_view') 7 8 def process_exception(self, request, exception): 9 """10 当views函数出错时执行11 :param request: 12 :param exception: 13 :return: 14 """15 print('process_exception')16 17 def process_response(self, request, response):18 """19 必须return HttpResponse20 :param request: 21 :param response: 22 :return: 23 """24 print('process_response')25 return response26 27 def process_template_response(self, request, response):28 """29 视图函数的返回值中,如果有render方法,才被调用30 :param request:31 :param response:32 :return:33 """34 print('process_template_response')35 return responsemd.py 2. 설정에서. py 파일을 실행하려는 순서대로 등록하세요:
ps. 버전 1.9 이하에서는 미들웨어의 키워드가 다음과 같습니다: MIDDLEWARE_CLASSES
MIDDLEWARE_CLASSES = ('zqxt.middleware.BlockedIpMiddleware', ...其它的中间件 )3. 미들웨어의 메소드 실행 순서 1.
1 from django.shortcuts import HttpResponse 2 from django.utils.deprecation import MiddlewareMixin 3 class M1(MiddlewareMixin): 4 def process_request(self, request): 5 print('m1.request') 6 # return HttpResponse('request_m1') 7 8 def process_view(self, request, callback, callback_args, callback_kwargs): 9 print('m1.view')10 # response = callback(request, *callback_args, **callback_kwargs)11 # return response12 13 def process_response(self, request, response):14 print('m1.response')15 return response16 17 def process_exception(self, request, exception):18 print('m1.process_exception')19 return HttpResponse('m1.process_exception')20 21 def process_template_response(self, request, response):22 """23 视图函数的返回值中,如果有render方法,才被调用24 :param request:25 :param response:26 :return:27 """28 print('m1.process_template_response')29 return response30 31 32 class M2(MiddlewareMixin):33 def process_request(self, request):34 print('m2.request')35 36 def process_view(self, request, callback, callback_args, callback_kwargs):37 print('m2.view')38 # response = callback(request, *callback_args, **callback_kwargs)39 # return response40 41 def process_response(self, request, response):42 print('m2.response')43 return response44 45 def process_exception(self, request, exception):46 print('m2.process_exception')47 return HttpResponse('m2.process_exception')48 49 def process_template_response(self, request, response):50 """51 视图函数的返回值中,如果有render方法,才被调用52 :param request:53 :param response:54 :return:55 """56 print('m2.process_template_response')57 return response
1 from django.shortcuts import HttpResponse 2 from django.utils.deprecation import MiddlewareMixin 3 class M1(MiddlewareMixin): 4 def process_request(self, request): 5 print('m1.request') 6 return HttpResponse('request_m1') 7 8 def process_view(self, request, callback, callback_args, callback_kwargs): 9 print('m1.view')10 # response = callback(request, *callback_args, **callback_kwargs)11 # return response12 13 def process_response(self, request, response):14 print('m1.response')15 return response16 17 def process_exception(self, request, exception):18 print('m1.process_exception')19 return HttpResponse('m1.process_exception')20 21 def process_template_response(self, request, response):22 """23 视图函数的返回值中,如果有render方法,才被调用24 :param request:25 :param response:26 :return:27 """28 print('m1.process_template_response')29 return response30 31 32 class M2(MiddlewareMixin):33 def process_request(self, request):34 print('m2.request')35 36 def process_view(self, request, callback, callback_args, callback_kwargs):37 print('m2.view')38 # response = callback(request, *callback_args, **callback_kwargs)39 # return response40 41 def process_response(self, request, response):42 print('m2.response')43 return response44 45 def process_exception(self, request, exception):46 print('m2.process_exception')47 return HttpResponse('m2.process_exception')48 49 def process_template_response(self, request, response):50 """51 视图函数的返回值中,如果有render方法,才被调用52 :param request:53 :param response:54 :return:55 """56 print('m2.process_template_response')57 return response58 59 60 # class RequestExeute(object):61 # def process_request(self, request):62 # print('process_request')63 #64 # def process_view(self, request, callback, callback_args, callback_kwargs):65 # print('process_view')66 #67 # def process_exception(self, request, exception):68 # """69 # 当views函数出错时执行70 # :param request:71 # :param exception:72 # :return:73 # """74 # print('process_exception')75 #76 # def process_response(self, request, response):77 # """78 # 必须return HttpResponse79 # :param request:80 # :param response:81 # :return:82 # """83 # print('process_response')84 # return response85 #86 # def process_template_response(self, request, response):87 # """88 # 视图函数的返回值中,如果有render方法,才被调用89 # :param request:90 # :param response:91 # :return:92 # """93 # print('process_template_response')94 # return response
1 from django.shortcuts import HttpResponse 2 from django.utils.deprecation import MiddlewareMixin 3 class M1(MiddlewareMixin): 4 def process_request(self, request): 5 print('m1.request') 6 # return HttpResponse('request_m1') 7 8 def process_view(self, request, callback, callback_args, callback_kwargs): 9 print('m1.view')10 response = callback(request, *callback_args, **callback_kwargs)11 return response12 13 def process_response(self, request, response):14 print('m1.response')15 return response16 17 def process_exception(self, request, exception):18 print('m1.process_exception')19 return HttpResponse('m1.process_exception')20 21 def process_template_response(self, request, response):22 """23 视图函数的返回值中,如果有render方法,才被调用24 :param request:25 :param response:26 :return:27 """28 print('m1.process_template_response')29 return response30 31 32 class M2(MiddlewareMixin):33 def process_request(self, request):34 print('m2.request')35 36 def process_view(self, request, callback, callback_args, callback_kwargs):37 print('m2.view')38 # response = callback(request, *callback_args, **callback_kwargs)39 # return response40 41 def process_response(self, request, response):42 print('m2.response')43 return response44 45 def process_exception(self, request, exception):46 print('m2.process_exception')47 return HttpResponse('m2.process_exception')48 49 def process_template_response(self, request, response):50 """51 视图函数的返回值中,如果有render方法,才被调用52 :param request:53 :param response:54 :return:55 """56 print('m2.process_template_response')57 return response
m1 process_view가 HttpResponse
m1.request m2.request m1.view m2.response m1.respons
위 내용은 Django 미들웨어에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!