使用Ajax (put delete ) django原生CBV 出现csrf token解决办法

原文地址:

https://blog.csdn.net/weixin_35993084/article/details/80778921 

修改ajax中type方式并设置header,同时对put重新构建数据字典

在对views中的方法进行类对象封装时,发现django并不支持像post和get一样将数据封装。
由于网页端无法设置method方法,在用postman和ajax开启pycharm对接口进行debug测试时发现:提交数据后并没有进入代码逻辑。
查阅资料得知,django支持put和delete方法。

为了防止跨站攻击,Django默认会对POST/PUT/DELETE这几种操作进行csrf token检查。POST可以将其放到post的参数中,但Django对PUT/DELETE只能通过检查Header的方式检查csrf token。
所以在进行ajax发送表单数据时,需要在ajax头文件中设置csrf

同时django对于PUT/DELETE请求并没有像POST/GET那样有一个字典结构。我们需要手动处理request.body获取参数:

from django.http import QueryDict
    put = QueryDict(request.body)
    key = put.get('key')
    field = put.get('field')
    field_value = put.get('field-value')

 

猜你喜欢

转载自www.cnblogs.com/erhao9767/p/10860116.html