wsgiref(django自带的web服务网关接口)
wsgiref 将浏览器发送过来的数据进行切分,在django存的数据要返回去,这个时候wsgiref就会帮你们打包返回去,打包成http协议的格式再发出去,因为我们后端处理的数据大部分都是字典的,不符合http协议数据格式
WSGI是一种协议,wsgiref,uwsgi都是基于WSGI协议实现的一个功能模块
一分钟之内来了多少次,如果一分钟来了30次,我就把你禁掉,在中间件做全局禁戒的时候是最好的选择,整个django项目都是中间件帮你把控的,全局的频率限制,访问限制都可以用中间件
七个中间件,依次经过我这七个中间件,才能达到我urls.py,返回的时候也要经过,消息的进出都要经过我的中间件,访问频率的限速,一个请求来了,可以获取到对应ip地址,在中间件里面做个session
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
到settings里面添加
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
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方法(了解即可)
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__)
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)
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
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