第一种方案
修改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
测试代码段如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<form action="">
{% csrf_token %}
用户名:<input type="text" name="username" id="username">
</form>
<button type="button" id="btn">提交