0

django.contrib.messages を使用したり、404 ページを表示したりするときに疑問があります。どちらの場合、どちらかを使用する必要がありますか?

serial = get_object_or_404(SerialNumber, serial_number=sn)

また

try:
    serial = SerialNumber.objects.get(serial_number=sn)
except SerialNumber.DoesNotExist
    messages.add_message(request, messages.WARNING, 'no found!')

前もって感謝します!

4

3 に答える 3

1

ユーザーがサーバー上で利用できないリソースにアクセスしようとすると、404 ページ ページが表示されます。一方、django メッセージングは​​、ユーザーにアプリケーション関連のカスタム メッセージを表示させたい場合に使用されます。たとえば、彼がエントリを削除または更新したときに、削除/更新の成功メッセージを表示できます。

于 2014-10-27T12:52:05.217 に答える
1

私の意見では、404 エラーと Django メッセージ フレームワークの主な違いは、404 はサーバーに関連しており、メッセージはアプリケーションに関連していることです。

つまり、ユーザーが存在しない URL を要求した場合 (例: /url/which/doesnt/exist/)、サーバーは 404 を送信する必要があります。情報またはデバッグ メッセージ (/articles/feature_acting_on_article_db/) を提供する場合は、メッセージ フレームワークを使用する必要があります。

ドキュメントhttps://docs.djangoproject.com/en/1.7/ref/contrib/messages/でわかるように、メッセージはアプリケーション レベルで使用されます。404 エラーの定義は次のとおりです。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 :

(...)このステータス コードは、サーバーが要求が拒否された理由を正確に明らかにしたくない場合、または他の応答が適用できない場合によく使用されます。

結論として、/article/5/ のような 5 番目の記事がない URL を処理する適切な方法は、メッセージを送信することだと思います。なぜなら、/article/ pk / はpk の情報を選択して表示する機能だからです。ユーザーがURLを入力したとしても(記事がないからといって、コマンドが失敗したわけではありません)(ただし、それがこの質問に関する私の見解です)。

于 2014-10-27T12:49:37.327 に答える