一、WSGI接口
WSGI服务网关接口:Web Server Gateway Interface缩写。
WSGI是python定义的Web服务器和Web应用程序之间或框架之间的通用接口标准。
WSGI定义:Web开发者实现了一个函数,并响应HTTP请求。
WSGI将Web组件分成三类:Web服务器(WSGI Server),Web中间件(WSGI Middleware),Web用用程序(WSGI Application).
Web服务器接收HTTP请求,调用WSGI接口标准注册的WSGI Application,最后将响应返回给客户端。
Web应用的本质:1.浏览器发送HTTP请求。
2.服务器接收请求,生成HTML页面。
3.服务器将HTML页面当成HTTP响应的body发送给浏览器。
4.浏览器接收到HTTP响应,并从HTTP Body中HTML并渲染出来
二、中间件
django的中间件(Middleware),其实就是一个类,在请求前和请求后,django会根据自己的规则并在合适的时机执行中间件中相应的方法。
中间件的官方说法是中间件是一个用来处理django的请求和相应的框架级别的钩子。在全局范围内改变django的输入和输出,每个中间件都有特定的功能。
中间件可以定义五个方法:1.process_request(self, request)
2.process_response(self, request, response)
3.process_view(self, request, view_func, view_args, view_kwargs)
4.process_exception(self, request, exception)
5.process_template_response(self, request, response)
以上方法返回的可以是None也可以是HttpResponse对象,如果是None,这继续按照django的规则继续执行下面的中间件,如果是HttpResponse对象,则直接把对象返回给用户。
process_request
process_request有一个参数,就是request,这个request和视图函数中的request是一样的。它的返回值可以是None也可以是HttpResponse对象。返回值是None的话,按正常流程继续走,交给下一个中间件处理,如果是HttpResponse对象,Django将不执行视图函数,而将相应对象返回给浏览器。
- 中间件的process_request方法是在执行视图函数之前执行的。
- 当配置多个中间件时,会按照MIDDLEWARE中的注册顺序,也就是列表的索引值,从前到后依次执行的。
- 不同中间件之间传递的request都是同一个对象
process_response
process_response有两个参数,一个是request,一个是response。这里面的request和process_request里面的参数request是一样的对象,response是视图函数返给回给用户的是Httpresponse对象,并且该方法返回值必须是HttpResponse对象。
- 中间件的process_response方法是在执行视图函数之后执行的。
- 当配置多个中间件时,会按照MIddleware注册顺序的倒序执行,从后往前执行。
process_view
process_view有四个参数:1.request是HttpResponse对象
2.view_func是django即将用到的视图函数,它是实际的视图函数
3.view_args是传递给视图函数的位置参数的列表
4.view_kwargs是传递给视图函数的关键之参数的字典
5.args和kwargs都不包含第一个参数request
- 中间件的process_view方法是在执行视图函数之前执行的。
- process_view方法是在所有的process_request方法执行完之后执行的
- 当配置多个中间件时,会按照Middleware的注册顺序从前往后执行
process_view它应该返回一个None或HttpResponse对象,如果返回None,则继续执行剩下的中间件的process_view方法,如果返回HttpResponse对象,则不再执行剩下的process_view和后面的视图函数,直接执行
原文地址:https://www.cnblogs.com/aaronthon/p/9484468.html