django中Ajax提交post请求,csrf_token问题

2020-01-28  本文已影响0人  清风徐来_简
一、form表单提交post请求
1,form表单提交post请求的时候在form表单中加入{% csrf_token %},即可提交post请求。
2,这样的做法实际上是在形成页面时,添加了一个input标签。
   <input type="hidden" name="csrfmiddlewaretoken" value="RgjPjG77IHwdExVg4k8Fe6f6KC7aDNR7cLWrT9QaQ6b5ZbAjp356y4P3w7rpKH8w">
3,提交表单时,会将此input标签中,按name,value键值对的形式传送给后端。
4,后端通过中间件即可进行判断。
二、ajax提交post请求:【只要通过某种方式将页面中产生的cookie取出并发送到后端,及可提交post请求】
三、但是,如果没有form表单产生csrf_token的标签,初始就没有存到浏览器的cookie里,Ajax根本取不出来,怎么办?
如果使用从cookie中取csrftoken的方式,需要确保cookie存在csrftoken值。
如果你的视图渲染的HTML文件中没有包含 {% csrf_token %},Django可能不会设置CSRFtoken的cookie。
这个时候需要使用ensure_csrf_cookie()装饰器强制设置Cookie。

from django.views.decorators.csrf import ensure_csrf_cookie

@ensure_csrf_cookie
def login(request):
    pass
上一篇 下一篇

猜你喜欢

热点阅读