文章目录
定义
- 中间件是Django请求/响应处理的钩子框架。他是一个轻量级、低级的插件系统、用于全局改变Django的输入输出
- 中间件一类的形式体现
- 每个中间件组件负责做一些特定的功能
编写
- 中间件类需继承django.utile.deprecation.MiddlewareMixin类
- 中间件须实现下列五个方法中的一个或多个:
- process_request(self, request)
执行路由之前被调用,在每个请求上调用,返回None或HttpResponse对象,返回None可以接着往下走,返回HttpResponse则请求被打断,返回HTTPResponse对象 - process_view(self, requst, callback, callback_aargs, callback_kwargs)
callback视图函数、后面的是视图函数参数
调用视图之前调用,返回None或HttpResponse对象 - process_response(self, request,response)
所有响应返回浏览器前被调用,在每个请求上调用,返回HttpResponse对象 - process_exception(self,request,exception)
当处理过程中抛出异常时调用,返回HttpResponse对象 - process_templates_response(self,request,response)
在视图函数执行完毕且试图返回的对象中包含render方法时被调用,该方法需要返回实现了render方法的响应对象
- process_request(self, request)
注册
- 在settings.py中需要注册一下自定义的中间件
# file: settings.py
MIDDLEWARE = [
...
]
注意:配置为数组,调用时以先上到下再进入视图函数再先下到上的顺序调用
CSRF攻击
CSRF跨站伪造请求攻击
某些恶意网站上包含链接,表单按钮或者JavaScript,它们会利用登陆过的用户在浏览器中的认证信息试图在你的网站上完成某些操作,这就是跨站请求伪造CSRF(Crosee-Site Request Forgey)
csrf防范
- Django采用‘比对暗号’机制防范攻击
- cookies中存储暗号1,模板表单中藏着暗号2,用户只有在本网站下提交数据,暗号2才会随着表单提交给服务器,Django对比两个暗号,对比成功,认为合法,否则返回403
配置
- setting.py中middleware中’django.middleware.csrf.CsrfViewMiddleware’,打开
- 模板中,form标签下添加如下标签{% csrf_token %}
<form action = "/" methon ="post">
{% csrf_token %}
<input tyoe = 'text' name = "name">
<input type = "submit" value = "提交">
</form>
如果某个视图函数不需要是CSRF校验,可以引入装饰器关闭
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def my_view(request):
pass