介绍
这篇文章主要介绍了django如何取消csrf限制,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
<强> #导入包强>
从django.views.decorators.csrf进口csrf_exempt
引用><强> #使用装饰器即可避免csrf限制强>
@csrf_exempt def add_bookshelf(请求): user_id 才能=,request.POST.get (& # 39; user_id # 39;) 打印(user_id)才能 return 才能;HttpResponse (& # 39; 123 & # 39;)<强>补充知识:强> <强> Django前后端分离跨域AJAX获取csrftoken及获取饼干时遇到的问题强>
获取csrftoken
Django的中间件& # 39;django.middleware.csrf.CsrfViewMiddleware& # 39;会将csrftoken的值设置在cookie中。在前后端不分离的项目中,若需要在AJAX使用csrftoken的值则可在js脚本中通过文档。饼干直接获取cookie的值(也可以通过其他更快捷的轮子如js-cookie)。
在前后端分离的项目中(已配置django-cors-headers),无法直接使用js从cookie中获取csrfToken的值(浏览器的同源策略),即使已经成功设置了csrfToken的cookie值
<强>解决方法强>
在中间件中引入
corsheaders.middleware.CorsPostCsrfMiddleware & # 39;corsheaders.middleware.CorsMiddleware& # 39; & # 39;django.middleware.security.SecurityMiddleware& # 39; & # 39;django.contrib.sessions.middleware.SessionMiddleware& # 39; & # 39;django.middleware.common.CommonMiddleware& # 39; & # 39;django.middleware.csrf.CsrfViewMiddleware& # 39; & # 39;corsheaders.middleware.CorsPostCsrfMiddleware& # 39;有些博客中使用该中间件替代django.middleware.csrf。CsrfViewMiddleware是不可行的,因为该中间件并没有期望中csrf校验的功能,下面为该中间件的源代码。
class CorsPostCsrfMiddleware (MiddlewareMixin): def 才能_https_referer_replace_reverse(自我,,请求): ,,,,,, ,,,Put 从而HTTP_REFERER back 用its original value 以及delete ,,,temporary 存储 ,,,,,, ,,,if conf.CORS_REPLACE_HTTPS_REFERER 以及& # 39;ORIGINAL_HTTP_REFERER& # 39;,拷贝request.META: ,,,,,http_referer =, request.META [& # 39; ORIGINAL_HTTP_REFERER& # 39;】 ,,,,,request.META [& # 39; HTTP_REFERER& # 39;],=http_referer ,,,,,del request.META [& # 39; ORIGINAL_HTTP_REFERER& # 39;】 def 才能process_request(自我,,请求): ,,,self._https_referer_replace_reverse(请求) ,,,return 没有 def 才能;process_view(自我,,请求,,回调,,callback_args,, callback_kwargs): ,,,self._https_referer_replace_reverse(请求) ,,,return 没有感谢你能够认真阅读完这篇文章,希望小编分享的“django如何取消csrf限制”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
django如何取消csrf限制