0

は私のURLは次のようになります。ジャンゴ:同じ方法で別のURL

/api/v1/files/ 
/api/v1/files/100 

はそれらを一致させるために、同じ機能を使用することをお勧めしますか?ただ、次のように:

クラスベースのビューで異なる機能を使用する方法
class FileView(APIView): 
    parser_classes = (MultiPartParser,) 
    permission_classes = (IsAuthenticated,) 

    @method_decorator(csrf_exempt) 
    def dispatch(self, request, *args, **kwargs): 
     return super(FileView, self).dispatch(request, *args, **kwargs) 

    def post(self, request, pk = None): 
     if pk is not None: 
      Do something 
     else: 
      do something 

ありがとう

答えて

1

私は別の方法がpkに基づいて枝分かれする単一の方法よりもきれいであると思います。単純な制御フローではなく、ビューのメソッドを見るだけで、どのロジックがどこに行くかを理解するのは簡単です。

最初にお勧めするのは、viewsets that Django Rest Framework providesをチェックして、与えられた方法でロジックを実行することです。これはあなたのユースケースに最も適しているようです。

もう1つのオプションは、のthese mixinsに基づいています。これらは、ビューセットよりも多くの制御とカスタマイズを可能にし、ビューセットによって提供される機能のすべてを必要としない場合は、より良いオプションになることがあります。

+0

私はすでにpost/get/delete /を使用していました。この場合、PUTは適合しません。私はあなたの参照を読むでしょう。ありがとう – BAE

+0

ビューセットは 'list'、' retrieve'、 'create'のようなメソッドを提供します。たとえば、 'create'は'/files/'エンドポイントへのPOSTを処理し、' retrieve'は '/ files/100'エンドポイントへのGETを処理し、' list'は '/ files /'へのGETを処理します終点。好奇心のために、 '/ files/100'にあなたのPOSTをしたいのですか? – Jeff

+0

Fileオブジェクトのいくつかのフィールドを更新する – BAE

関連する問題