私はDjango UpdateViewをサブクラス化しています(Django 1.11とjQuery-3.2.1に基づく)。Django JsonResponse返信データなし
私はJSONデータを返すためにUpdateViewを変更したい((代わりに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)
私のためのURL設定はです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のコンソールに印刷されて)成功を返しますが、(にconsole.log(データ)が返され何もメッセージはありませんAJAX success()は 'undefined'を返します)。
私のブラウザから詳しい調査を行ったところ、DjangoはHTTPの成功ステータス以外に何のメッセージも返していないことを示しています。ここに私のクロムのデバッガからのキャプチャです:
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から失われたデータをデバッグする方法任意のアイデアは?ダニエル・ローズマンに基づいて
メッセージには、「No Content」と表示されています。なぜそのステータスを使用していますか?なぜ200(OK)か201(Created)はありませんか? –
また、特定のIDでコンテンツを更新する要求の正しいHTTP動詞は、POSTではなくPUTです。 –
最後に、これを行うなら、Django独自のビューをハッキングするのではなく、実際にdjango-rest-frameworkを調べるべきです。 –