之前读了一些关于REST 风格的文章,觉得蛮好就打算在本次毕设中用用,Django 也支持不同请求方式接口,之前用get()、post()都用得好好的,结果本次就踩坑了,记录一下爬出来的过程。
需求
前端点击按钮,将页面中选中的CheckBox 数据通过 HTTPdelete 传回后端。后端取出数据,删除数据库对应的条目后返回原页面。
实现
1 | <!--前端按钮代码--> |
1 | //js代码 |
因为 html 布局不好看所以没有选择form提交CheckBox,而是用js实现的。我基本上不会前端的内容,代码能用,但是说的不一定对。
js
- 在js中新建数组对象,将所有CheckBox选中的value字段值加入数组;
- ajax创建Request,把数组放进Request的data中,ajax会自动向后端发送
- 踩坑点:Django 有一个防止csrf攻击的中间件,它会检查请求是否携带CSRFtoken,所以在请求头必须携带”X-CSRFtoken”,值可以通过$.cookie收到;
- 踩坑点:如果要用$.cookie,得从jQuery下载
'jquery.cookie.js'然后在html中引用,一定要先引用jQuery再引用它
后端
- 传回后端,HTTPdelete会被类视图的
delete(self,request)捕捉。不过 DELETE 不像POST 请求一样会自己产生request.POST这样好用的对象,所以需要先from django.http import QueryDict,然后在delete(self,request) 中通过DELETE=QueryDict(request.body)创建对象,再DELETE.get('xxxdata') - 从数据库中删除对象,render(原来的网页)。不可以redirect(原来的网页)不然会不停循环循环循环,然后报错。