django中间件

wsgiref(django自带的web服务网关接口)

wsgiref 将浏览器发送过来的数据进行切分,在django存的数据要返回去,这个时候wsgiref就会帮你们打包返回去,打包成http协议的格式再发出去,因为我们后端处理的数据大部分都是字典的,不符合http协议数据格式

WSGI是一种协议,wsgiref,uwsgi都是基于WSGI协议实现的一个功能模块

一分钟之内来了多少次,如果一分钟来了30次,我就把你禁掉,在中间件做全局禁戒的时候是最好的选择,整个django项目都是中间件帮你把控的,全局的频率限制,访问限制都可以用中间件

七个中间件,依次经过我这七个中间件,才能达到我urls.py,返回的时候也要经过,消息的进出都要经过我的中间件,访问频率的限速,一个请求来了,可以获取到对应ip地址,在中间件里面做个session

django中间件

django中间件

创一个文件夹(mymiddleware)

文件夹下创middleware文件(支持自定义中间件)

 1 from django.utils.deprecation import MiddlewareMixin
 2 from django.shortcuts import HttpResponse,render
 3 
 4 class MyMiddleWare(MiddlewareMixin):  #一定要继承这个类
 5     def process_request(self, request):
 6         print('我是第一个自定义的中间件中的process_request')
 7 
 8     def process_response(self, request,response): 形参中存在response必须返回
 9         print('我是第一个自定义的中间件中的process_response方法')
10         return response

django中间件

到settings里面添加

django中间件

django中间件

django中间件第二个自定义中间件

django中间件

django中间件

django中间件django中间件
1 #然后做测试  return HttpResponse
2 class MyMiddleWare(MiddlewareMixin):  #一定要继承这个类
3     def process_request(self, request):
4         print('我是第一个自定义的中间件中的process_request')
5         return HttpResponse('我是第一个中间件里面返回的对象')
6 
7     def process_response(self, request,response):
8         print('我是第一个自定义的中间件中的process_response方法')
9         return response
return HttpResponse

django中间件

django中间件

 1 #然后做测试  return render (也是同级别返回)
 2 class MyMiddleWare(MiddlewareMixin):  #一定要继承这个类
 3     def process_request(self, request):
 4         print('我是第一个自定义的中间件中的process_request')
 5         return render(request,'index.html')
 6 
 7     def process_response(self, request,response):
 8         print('我是第一个自定义的中间件中的process_response方法')
 9         return response
10 
11     结果
12     我是第一个自定义的中间件中的process_request
13     [16 / Jun / 2019 11: 12:50] "GET /index/ HTTP/1.1"
14     200
15     800
16     我是第一个自定义的中间件中的process_response方法

django自定义中间件自定义的方法

1.process_request:请求到来时会执行(必须掌握)
2.process_response:响应返回时会执行(必须掌握)
并且需要指定每一个方法什么时候触发(必须掌握)

3.process_view:路由匹配成功执行视图函数之前,会依次process_view方法
4.process_exception:视图函数中报错,会依次执行process_exception方法
5.process_template_response:视图函数必须返回render对象时才会触发process_template_response方法(了解即可)
django中间件django中间件
 1 class MyMiddleWare(MiddlewareMixin):  #一定要继承这个类
 2     def process_request(self, request):
 3         print('我是第一个自定义的中间件中的process_request')
 4 
 5     def process_response(self, request,response):
 6         print('我是第一个自定义的中间件中的process_response方法')
 7         return response
 8 
 9     def process_view(self,request,view_func,view_args,view_kwargs):  view_func是即将执行的视图函数名(函数地址)
10         #request是wsgiref网关接口帮你处理好的
11         print('我是第一个自定义的中间件process_view方法')
12         print(view_func.__name__)
13 
14 
15 class MyMiddleWare1(MiddlewareMixin):  #一定要继承这个类
16     def process_request(self, request):
17         print('我是第二个自定义的中间件中的process_request')
18 
19     def process_response(self, request, response):
20         print('我是第二个自定义的中间件中的process_response方法')
21         return response
22 
23     def process_view(self, request, view_func, view_args, view_kwargs):
24         # request是wsgiref网关接口帮你处理好的
25         print('我是第二个自定义的中间件process_view方法')
26         print(view_func.__name__)
process_view

django中间件

django中间件django中间件
 1 class MyMiddleWare(MiddlewareMixin):  #一定要继承这个类
 2     def process_request(self, request):
 3         print('我是第一个自定义的中间件中的process_request')
 4 
 5     def process_response(self, request,response):
 6         print('我是第一个自定义的中间件中的process_response方法')
 7         return response
 8 
 9     def process_view(self,request,view_func,view_args,view_kwargs):
10         #request是wsgiref网关接口帮你处理好的
11         print('我是第一个自定义的中间件process_view方法')
12         print(view_func.__name__)
13 
14     def process_exception(self, request,exception):
15         print('我是第一个自定义的中间件中process_exception方法')
16         print(exception)
17 
18 
19 class MyMiddleWare1(MiddlewareMixin):  #一定要继承这个类
20     def process_request(self, request):
21         print('我是第二个自定义的中间件中的process_request')
22 
23     def process_response(self, request, response):
24         print('我是第二个自定义的中间件中的process_response方法')
25         return response
26 
27     def process_view(self, request, view_func, view_args, view_kwargs):
28         # request是wsgiref网关接口帮你处理好的
29         print('我是第二个自定义的中间件process_view方法')
30         print(view_func.__name__)
31 
32     def process_exception(self, request, exception):
33         print('我是第二个自定义的中间件中process_exception方法')
34         print(exception)
process_exception

django中间件

django中间件

django中间件django中间件
 1 class MyMiddleWare(MiddlewareMixin):  #一定要继承这个类
 2     def process_request(self, request):
 3         print('我是第一个自定义的中间件中的process_request')
 4 
 5     def process_response(self, request,response):
 6         print('我是第一个自定义的中间件中的process_response方法')
 7         return response
 8 
 9     def process_view(self,request,view_func,view_args,view_kwargs):
10         #request是wsgiref网关接口帮你处理好的
11         print('我是第一个自定义的中间件process_view方法')
12         print(view_func.__name__)
13 
14     def process_exception(self, request,exception):
15         print('我是第一个自定义的中间件中process_exception方法')
16         print(exception)
17 
18     def process_template_response(self, request, response):
19         print('我是第一个自定义的中间件中process_exception方法')
20         return response
21 
22 
23 class MyMiddleWare1(MiddlewareMixin):  #一定要继承这个类
24     def process_request(self, request):
25         print('我是第二个自定义的中间件中的process_request')
26 
27     def process_response(self, request, response):
28         print('我是第二个自定义的中间件中的process_response方法')
29         return response
30 
31     def process_view(self, request, view_func, view_args, view_kwargs):
32         # request是wsgiref网关接口帮你处理好的
33         print('我是第二个自定义的中间件process_view方法')
34         print(view_func.__name__)
35 
36     def process_exception(self, request, exception):
37         print('我是第二个自定义的中间件中process_exception方法')
38         print(exception)
39 
40     def process_template_response(self, request, response):
41         print('我是第二个自定义的中间件中process_exception方法')
42         return response
process_template_response
django中间件django中间件
 1 def index(request):
 2     print('我是视图函数')
 3     allala
 4     return HttpResponse('我是视图函数')
 5 
 6 
 7 def index(request):
 8     print('app01 中的 index视图')
 9 
10     def render():
11         print('in index/render')
12         return HttpResponse('098k')
13     rep= HttpResponse('ok')
14     rep.render = render()
15     return rep
views.py

django中间件

相关文章: