猿问

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

做项目的时候纠结了一下,找到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的表单不符合标准么?
阿波罗的战车
浏览 315回答 2
2回答

拉丁的传说

Django是基于页面表单处理的框架Web页面表单的form只支持GET和POST:参考只有POST方法可以传递文件,所以Django进行了那样的处理PUT方法一般用于RESTful风格的接口中,Django目前没有太好的支持

PIPIONE

最近刚好做了一个Django+React的Todo程序,也遇到了同样的问题,我的代码如下,供你参考:fromdjango.viewsimportViewfromdjango.httpimportJsonResponse,QueryDictfromdjango.utilsimporttimezonefrom.modelsimportTodoclassTodoView(View):defpost(self,request):form=request.POSTtodo=Todo(content=form['content'],time=timezone.now())todo.save()resp=JsonResponse({'result':'success'})resp['Access-Control-Allow-Origin']='*'returnrespdefget(self,request):todos=Todo.objects.all()resp=JsonResponse({'result':'success','todos':[todo.toJSON()fortodointodos]})resp['Access-Control-Allow-Origin']='*'returnrespclassTodoItemView(View):defdelete(self,request,todo_id):todo=Todo.objects.get(id=todo_id)todo.delete()resp=JsonResponse({'result':'success'})resp['Access-Control-Allow-Origin']='*'returnrespdefput(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']='*'returnrespdefget(self,request,todo_id):todo=Todo.objects.get(id=todo_id)resp=JsonResponse({'result':'success','todo':todo.toJSON()})returnrespdefoptions(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
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答