码迷,mamicode.com
首页 > Web开发 > 详细

HTML5标签2

时间:2020-08-09 19:11:42      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:sch   ESS   相关   手写   code   行合并   type属性   sel   姓名   

django请求生命周期

请求 -- wsgi封装socket和http协议解包 -- 顺序执行中间件 -- url控制器 -- view视图函数 -- 倒序执行中间件 -- wsgi按http协议封装响应数据 -- 响应

中间件

自定义中间件

1.应用下创建一个文件夹,文件夹下面创建一个xx.py文件
from django.utils.deprecation import MiddlewareMixin
class MD1(MiddlewareMixin):
	def process_request(self,request):
		...
	def process_response(self,request,response):
		...
		return response
2.在settings.py  MIDDLEWARE 中写入自定义中间件的路径(多个中间件的话注意摆放顺序)

中间件方法

1.process_request方法(*):
    def process_request(self,request):
		...
# 它的返回值为None或者HttpResponse对象.返回值如果为None,交给下一个中间件处理,流程正常.如果是HttpResponse对象,则直接开始返回流程,并将该HttpResponse作为response返回给浏览器.
# 多个中间件中的process_request方法是按照MIDDLEWARE中的注册顺序 顺序 执行的.
        
2.process_response方法(*):
    def process_response(self,request,response):
		...
		return response
# response是视图函数返回的HttpResponse对象.该方法必须返回HttpResponse对象.
# 多个中间件中的process_response方法是按照MIDDLEWARE中的注册顺序 倒序 执行的.

3.process_view方法:
    def process_view(self, request, view_func, view_args, view_kwargs):
        ...
# view_func是Django即将使用的视图函数

4.process_exception方法:
    def process_exception(self, request, exception):
        ...
# 视图函数出错才会执行

5.process_template_response方法(用的比较少):
    def process_template_response(self, request, response):
        ...
# 它的参数,request是HttpRequest对象,response是TemplateResponse对象(由视图函数或者中间件产生).
# process_template_response是在视图函数执行完成后立即执行,但是它有一个前提条件,那就是视图函数返回的对象有一个render()方法.注意!此render()不是我们平时模板渲染的方法!
views.py:
    def index(request):
        print(‘我是index视图函数‘)
		def render():
            print(‘我是自定义的render‘)
            return HttpResponse(‘我是自定义的render方法的返回值‘)	# 最后页面拿到的结果是这个
        ret = HttpResponse(‘我是index视图函数的返回值‘)   # 这个HttpRequest对象的内容没有意义,会被覆盖
        ret.render = render		# 将自定义的render方法作为属性封装给了HttpRequest对象
        return ret
自定义中间件:
    def process_template_response(self, request, response):
        ...
        return response		# 这个方法也必须要返回response

小结:搞清楚整个django请求的生命周期是重点,这样才能知道哪个环节可以拓展.中间件的学习重点在于搞清楚中间件的执行顺序,以及其方法的执行顺序,在做这方面项目或练习的时候最好画个草图,这样逻辑会更加清晰.

HTML5标签2

标签:sch   ESS   相关   手写   code   行合并   type属性   sel   姓名   

原文地址:https://www.cnblogs.com/xc-dh/p/13463674.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!