Django之组件--中间件
2019-01-23 15:12
267 查看
Django之组件--中间件
中间件
中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能
自定义中间件:
1 写一个类,继承MiddlewareMixin, 2 在类中写方法: process_request 3 在settings中配置
from django.utils.deprecation import MiddlewareMixin class CORSMiddle(MiddlewareMixin): def process_response(self,request,response): # 从什么地址跨 response['Access-Control-Allow-Origin'] = 'http://127.0.0.1:8001' # 非简单请求, if request.method == 'OPTIONS': # 如果是put和delete方法,重新再发一次请求 response['Access-Control-Allow-Methods'] = 'PUT,DELETE' response['Access-Control-Allow-Headers']='Content-Type' return response mid.py自定义跨域
自定义中间件的5个方法:
process_request(self,request)
-执行顺序,settings中中间件自上而下执行 -请求来的时候会执行它 -request对象,就是本次请求的request对象,对它处理后,视图函数拿到的就是处理后的request对象
-可以拿到所有request请求内容!
process_view(self, request, callback, callback_args, callback_kwargs)
-callback是视图函数,callback_args, callback_kwargs是视图函数的参数 -可以调用callback方法
process_template_response(self,request,response)(忘掉)
-只有视图函数返回的对象中有render方法的时候,才会执行 process_exception(self, request, exception) -视图函数出错,会执行它
process_response(self, request, response)
-执行顺序,settings中中间件自下而上执行 -响应走的时候,会执行它 -request对象,就是本次请求的request对象,response是响应对象(HttpResponse的对象) -如果process_request方法返回HttpResponse的对象,请求直接返回,按中间件方法执行顺序往回走
-必须return返回
-
csrf中间件:
xss攻击/csrf跨站请求伪造
在不注释csrf中间件的情况下,在ajax提交数据的时候,必须将写在浏览器的key和value带回去,不然会被django框架禁止。
'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()
在csrf不注释的情况下用ajax完成post请求:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="/static/jquery-3.3.1.js"></script> </head> <body> {% csrf_token %} <p>姓名:<input type="text" id="name"></p> <p>密码:<input type="password" id="pwd"></p> <p>信息:<input type="text" id="info"></p> <p> <button id="submit">提交</button> </p> </body> <script> $('#submit').click(function () { $.ajax({ url: '/test_ajax/', type: 'post', data: { name: $('#name').val(), pwd: $('#pwd').val() 'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val() }, success: function (data) { $('#info').val(data) console.log(data) } } ) }) </script> </html> 前台前台
def test_ajax(request): if request.method == 'GET': return render(request,'testajax.html') name = request.POST.get('name') pwd = request.POST.get('pwd') if name =='chuck' and pwd == "123": return HttpResponse('登陆成功')后台
posted @ 2019-01-23 15:12 ChuckXue 阅读(...) 评论(...) 编辑 收藏
相关文章推荐
- Django 内建 中间件组件
- django上课笔记6-MVC,MTV架构-中间件-初识Form组件
- django组件:中间件
- Django - 中间件
- Django之Form组件
- django 中间件
- django中间件
- django 中间件 request.path 与get_full_path
- Django 中间件(middleware)
- Django之用户认证组件
- python,day22-Django之Form组件,信号
- 如何使用 Docker 组件开发 Django 项目?
- Django组件——分页器(paginator)
- Django之组件--cookie与session
- django分页组件pagination
- django用jquery的ajax提交表单,中间件的CsrfViewMiddleware问题
- Django之ModelForm组件
- Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据
- Django 限制用户访问频率的中间件的实现
- Django框架全面讲解 -- 中间件(MiddleWare)