最近、例外処理に関連する基本的な真実が見つかりました。私たちのサーバーはほとんど5XX
というエラーではありません。 これで、いくつかのパラメータとそれぞれのURLを持つRESTビューについて考えてみましょう。このコードで jsonデータとして継承されたビューの欠落パラメータの例外処理
urlpatterns = [
url(r'^some_view/', some_view),
]
@api_view(['POST'])
def some_view(request):
# ...
param1 = request.data['param1']
、私はそうでない場合は、手動で開発者が
param1
に値を割り当てずに
some_view
を呼び出して例外を処理する必要があります - 私は明示的にこのケースを処理しない場合 - 彼らは500エラー(
MultipleKeyValueError
)を取得しますどの悪い。そして、我々はジレンマがあります。
- 我々は複数のparamsを持っている場合は特に、それは刺激性と反復性のtry-除くブロックの原因となります取り扱いを が
ソリューションにある500エラーにつながる処理していません
urlpatterns = [
url(r'^some_view/(?P<param1>\w+/', some_view),
]
@api_view(['POST'])
def some_view(request, param1):
# ...
ここで、Djangoは500とは異なり、urlが見つかりませんという400の例外をスローします。しかし一方で、最初のオプション(私はrequest.data['param1']
を使用します)は、外部アプリケーションからだけでなく、HTMLフォームをシリアライズすることによってparamsを送信するWebアプリケーションからRESTリソースを呼び出すことができるという有益な利点を提供します。
ここでは、ベストプラクティスについて質問しています。あなたはどうやってこの状況に対処していますか?欠落しているparamsを見ているtry-exceptブロックを明示的に書くか、url-parametersオプションを使用しますか、ここでは言及していない3番目のオプションがありますか?
2ps、私はこのアプローチが好きです。ちょっとした話題ですが、このデコレータを「デフォルト」のようにする方法はDjangoにありますか?つまり、ビューの前に毎回それを含めることなく、すべてのビューをアクティブにするには? –
私はあなたができるとは思っていませんし、おそらくdjangoにもJSON以外のビュー(django管理インターフェースのようなもの)があると思われます。 JSONビューしかない場合は、デフォルトとして扱うミドルウェアを書くことができます。 – 2ps
この回答は、Djangoが400の例外の代わりにok(200)を返すようにする方法の詳細にあるようです。それとも私は何かが足りない? –