我正在继承Django UpdateView以使用AJAX表单(基于Django 1.11和jQuery-3.2.1)更新我的模型。Django JsonResponse不返回数据
我想改变的UpdateView返回JSON数据(而不是HttpResponseRedirect()或选择render_to_response再次呈现形式())
这里是我的的UpdateView的子类的样子:
class MediaSetUpdateView(UpdateView):
def form_valid(self, form):
self.object = form.save()
print("Data is saved", file=sys.stderr)
return JsonResponse({'message' : 'Data is saved'}, status=204)
def form_invalid(self, form):
print("form invalid", file=sys.stderr)
return JsonResponse(form.errors.as_json(), status=422)
这里是我的网址设置UpdateView:
urlpatterns = [
...,
url(r'^mediaset/(?P<pk>[0-9]+)/$', views.MediaSetUpdateView.as_view(), name='mediaset_update'),
...,
]
这是我的jQuery的AJAX POST:
/* The global var to store current data */
var json_storage = {"template_id":1 };
$.ajax({
url: '/esignage/mediaset/6/',
type: 'post', // Performing a POST request
data : json_storage,
dataType: 'json',
success: function(data) {
console.log(data);
},
error: function(data) {
console.log(data);
}
});
的UpdateView返回成功Django的(“数据保存”被印在了我的Django控制台),但没有被返回(消息的console.log(数据)在AJAX成功()返回'未定义')。
从我的浏览器进一步调查表明,除了HTTP成功状态,Django没有返回任何消息。这里是我的铬调试器捕获:
HTTP/1.0 204 No Content
Date: Wed, 19 Jul 2017 09:28:09 GMT
Server: WSGIServer/0.2 CPython/3.5.2
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Content-Length: 28
任何想法如何调试从JsonResponse丢失的数据?
正如消息所述,204是“无内容”。你为什么使用这种状态?为什么不是200(OK)或201(创建)? –
另请注意,使用特定ID更新内容的请求的正确HTTP动词是PUT,而不是POST。 –
最后,如果你这样做,你应该真正调查django-rest-framework而不是黑客Django自己的观点。 –