这段python django源码不处理PUT方法带表单什么原因,pythondjango,做项目的时候纠结了一下,
这段python django源码不处理PUT方法带表单什么原因,pythondjango,做项目的时候纠结了一下,
做项目的时候纠结了一下,找到django.http.request里面看了一下,发现199行写着:
def _load_post_and_files(self): """Populate self._post and self._files if the content-type is a form type""" if self.method != 'POST': self._post, self._files = QueryDict('', encoding=self._encoding), MultiValueDict() return
这意味着只有POST才有request.POST这个表单信息。否则都是空的。。我只能自己hack了一下。。
为什么Django不打算处理PUT的表单信息呢?
我试了一下http://httpbin.org/put的接口,好像它就会处理。。。
难道PUT的表单不符合标准么?
Django是基于页面表单处理的框架
Web页面表单的form只支持GET和POST:参考
只有POST方法可以传递文件,所以Django进行了那样的处理
PUT方法一般用于RESTful风格的接口中,Django目前没有太好的支持
最近刚好做了一个Django+React的Todo程序,也遇到了同样的问题,我的代码如下,供你参考:
from django.views import Viewfrom django.http import JsonResponse, QueryDictfrom django.utils import timezonefrom .models import Todoclass TodoView(View): def post(self, request): form = request.POST todo = Todo(content = form['content'], time = timezone.now()) todo.save() resp = JsonResponse({'result' : 'success'}) resp['Access-Control-Allow-Origin'] = '*' return resp def get(self, request): todos = Todo.objects.all() resp = JsonResponse({'result' : 'success', 'todos' : [todo.toJSON() for todo in todos]}) resp['Access-Control-Allow-Origin'] = '*' return respclass TodoItemView(View): def delete(self, request, todo_id): todo = Todo.objects.get(id = todo_id) todo.delete() resp = JsonResponse({'result' : 'success'}) resp['Access-Control-Allow-Origin'] = '*' return resp def put(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'] = '*' return resp def get(self, request, todo_id): todo = Todo.objects.get(id = todo_id) resp = JsonResponse({'result' : 'success', 'todo' : todo.toJSON()}) return resp def options(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' return resp
编橙之家文章,
相关内容
- 怎么处理Python解析服务器json格式数据,pythonjson,RT,服
- django正确使用csrf求高手指点,djangocsrf,每次要做csrf保护
- 有脚本版本好自动更新python方法吗?,有脚python,经常看
- 新手对python列表赋值问题的不解,python列表赋值不解
- python语言中两个不同模块可以互相导入吗?,python语言
- python 钩子如何实现分析流程操作,python钩子,在一个项
- Python多线程进度条progressbar没能达到预期,pythonprogres
- Python文件操作路径错误WindowsError: [Error 32]是什么意思,
- python为excel单元格填充颜色有方法吗?,pythonexcel,使用
- 高手聊聊Cython开发GIL限制以及内存管理的建议,cython
评论关闭