我正在繼承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自己的觀點。 –