APIView
から拡張されたベースAPIビューを作成しました。ここでは、応答時間、ログ要求、およびその他の一般的な情報を記録します。DRF API request.dataを使用してメソッドをディスパッチする移動要求の検証
ここで、サブクラスのビューで定義されているシリアライザを使用してリクエストの検証を追加することもできます。私は適切な場所がそれをdispatch()
メソッドに入れていると思った。しかしAPI.dispatch()
メソッドを呼び出す前に、request.data
は用意されていません。だから、それは動作しません。検証を単一の場所に移動する方法について、誰かが正しい方向で私を助けることができますか?
はここでクラス構造です:
class BaseView(APIView):
validation_serializer = None
def dispatch(self, request, *args, **kwargs):
# Some code here
# How to use `validation_serializer` here, to validate request data?
# `request.data` is not available here.
response = super(BaseView, self).dispatch(request, *args, **kwargs)
# Some code here
return response
class MyView(BaseView):
validation_serializer = ViewValidationSerializer
def post(self, request, *args, **kwargs):
pass
私は別のアプローチがpost()
法の上使用デコレータことができると思っていました。しかし、プロジェクト全体にデコレータを置くのではなく、よりクリーンな方法があれば?
注:これは質問とよく似ています(Django - DRF - dispatch method flow)。しかし、そこに示唆されているとおり、DRFソースコードからdispatch
メソッド全体をコピーするだけではありません。
興味深いです。しかし、それは要求の詳細を記録するためです。私が欲しいのは、検証の可能性です。 –