为了账号安全,请及时绑定邮箱和手机立即绑定

为什么django不处理PUT方法带过来的表单

为什么django不处理PUT方法带过来的表单

阿波罗的战车 2019-04-13 08:45:19
做项目的时候纠结了一下,找到django.http.request里面看了一下,发现199行写着:def_load_post_and_files(self):"""Populateself._postandself._filesifthecontent-typeisaformtype"""ifself.method!='POST':self._post,self._files=QueryDict('',encoding=self._encoding),MultiValueDict()return这意味着只有POST才有request.POST这个表单信息。否则都是空的。。我只能自己hack了一下。。为什么Django不打算处理PUT的表单信息呢?我试了一下http://httpbin.org/put的接口,好像它就会处理。。。难道PUT的表单不符合标准么?
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

Django是基于页面表单处理的框架
Web页面表单的form只支持GET和POST:参考
只有POST方法可以传递文件,所以Django进行了那样的处理
PUT方法一般用于RESTful风格的接口中,Django目前没有太好的支持
                            
查看完整回答
反对 回复 2019-04-13
?
PIPIONE

TA贡献1829条经验 获得超9个赞

最近刚好做了一个Django+React的Todo程序,也遇到了同样的问题,我的代码如下,供你参考:
fromdjango.viewsimportView
fromdjango.httpimportJsonResponse,QueryDict
fromdjango.utilsimporttimezone
from.modelsimportTodo
classTodoView(View):
defpost(self,request):
form=request.POST
todo=Todo(content=form['content'],time=timezone.now())
todo.save()
resp=JsonResponse({'result':'success'})
resp['Access-Control-Allow-Origin']='*'
returnresp
defget(self,request):
todos=Todo.objects.all()
resp=JsonResponse({'result':'success','todos':[todo.toJSON()fortodointodos]})
resp['Access-Control-Allow-Origin']='*'
returnresp
classTodoItemView(View):
defdelete(self,request,todo_id):
todo=Todo.objects.get(id=todo_id)
todo.delete()
resp=JsonResponse({'result':'success'})
resp['Access-Control-Allow-Origin']='*'
returnresp
defput(self,request,todo_id):
todo=Todo.objects.get(id=todo_id)
put=QueryDict(request.body,encoding=request.encoding)
todo.status=put.get('status')
todo.save()
resp=JsonResponse({'result':'success'})
resp['Access-Control-Allow-Origin']='*'
returnresp
defget(self,request,todo_id):
todo=Todo.objects.get(id=todo_id)
resp=JsonResponse({'result':'success','todo':todo.toJSON()})
returnresp
defoptions(self,request,todo_id):
todo=Todo.objects.get(id=todo_id)
resp=JsonResponse({'result':'success'})
resp['Access-Control-Allow-Origin']='*'
resp['Access-Control-Allow-Methods']='GET,POST,PUT,DELETE,OPTIONS'
returnresp
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 314 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信