在Django框架中的CSRF原理这篇文章中, 我们已经知道,如果不注释掉django.middleware.csrf.CsrfViewMiddleware的话,django会在全局的POST请求中添加token验证,不带就会报错。那么这通常是不太好的,现在我们有两个不需要做token验证,那么我们需要单独进行配置,现在有10个不需要做token就需要配置10个,非常的麻烦。django给我们提供了一种方法,只需要对使用token验证的POST请求做一下配置就可以了,两者调换一下会方便很多。
跨站请求伪造
django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。
- @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
- @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
注:from django.views.decorators.csrf import csrf_exempt,csrf_protect
那么简单理解,在需要进行token认证的函数上添加装饰器@csrf_protect,不需要认证添加装饰器@csrf_exempt。现在我们在全局中打开csrf注释,也就是所有的POST请求都需要token认证:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_exempt #当前函数不需要认证
def login(request):
if request.method=='GET':
return render(request,'login.html')
if request.method=='POST':
pass
如果注释掉全局的django.middleware.csrf.CsrfViewMiddleware,代表所有的函数都不需要token认证,那么在需要认证的函数上添加@csrf_protect装饰器即可。
声明:1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!