6、Django设置csrf_token

Ajax请求设置csrf_token

方式一

通过获取隐藏的input标签中的csrfmiddlewaretoken值,放置在data中发送。

$.ajax({
    url: "/cookie_ajax/",
    type: "POST",
    data: {
        "username": "yang",
        "password": 123,
        // 使用jQuery取出csrfmiddlewaretoken的值,拼接到data总
        "csrfmiddlewaretoken": $("[name="csrfmiddlewaretoken"]").val()
    },
    success: function(data){
        console.log(data);
    }
})

方式二

通过获取返回的cookie中的字符串,放置在请求头中发送。

注意: 需要引入一个jquery.cookie.js插件。

或者用自己写一个getCookie方法:

每一次都这么写太麻烦了,可以使用$.ajaxSetup()方法为ajax请求统一设置。

如果使用从cookie中取csrftoken的方式,需要确保cookie存在csrftoken值。

如果你的视图渲染的HTML文件中没有包含

, Django可能不会设置CSRFtoken的cookie。

这个时候需要使用ensure_csrf_cookie()装饰器强制设置Cookie。

如何取消 csrf_exempt

基于类

在Django中对于基于函数的视图我们可以 @csrf_exempt 注解来标识一个视图可以被跨域访问。那么对于基于类的视图,我们应该怎么办呢?

简单来说可以有两种访问来解决

方法一:在类的 dispatch 方法上使用 @csrf_exempt

方法二:在 urls.py 中配置

基于视图

Last updated