質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Q&A

解決済

1回答

2301閲覧

Django Rest Framewokにてカスタムアクションのみ定義するviewを作成する場合の継承クラスは

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

0グッド

0クリップ

投稿2020/08/17 07:41

聞きたいこと

Django Rest Frameworkを使用してWeb APIを作成しているのですが、カスタムアクションのみを定義したviewクラスってどのクラスを継承するのが一般的?なのでしょうか。

現状、POSTのみを受け付ける3つのアクションをもつviewは下のように定義しています。

from rest_framework.decorators import viewsets from rest_framework.decorators import action : class SampleViewSet(viewsets.ModelViewSet): @action(methods=['post'], detail=True) def post_method_1(self, request) : @action(methods=['post'], detail=True) def post_method_2(self, request) : @action(methods=['post'], detail=True) def post_method_3(self, request) :

ただ、ModelViewSetを継承すると、list(), create(), update()等の不要なアクションも使用できるようになってしまいます。

Qiitaで、ModelViewSetから提供されているアクションの一部のみを使用する方法は見つかったのですが、カスタムアクションのみを使用する場合のベストプラクティスってあるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/19 01:47

Qiitaの記事はModelViewSetを使用してないと思います。 GenericViewSetを元に必要なModelmixinを追加して、CustomUserViewSetを作っています。 Modelmixinが必要ないのであれば、GenericViewSetをそのまま使えばいいのではないでしょうか?
guest

回答1

0

ベストアンサー

興味があったので、調べた結果を書かせていただきます。

ModelViewSetを必要なアクションのみにするには、ご質問に書かれた方法がstackoverflowにもありましたので、これがベストプラクティス?なのではないでしょうか。
Disable a method in a ViewSet, django-rest-framework

特定のモデルの操作を1つのビューで定義できる利点はありそうですが、listcreateupdateなどのアクションが必要ない場合、ModelViewSetから派生したビューを定義するのではなく、post_method_1などのメソッドごとに、ビューを定義した方が良いのではないかと考えます。

投稿2020/08/18 23:49

hasami

総合スコア1277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/19 23:48

ありがとうございます。 やはり関数で定義になりそうですかね。勉強になりました。
hasami

2020/08/20 06:42

`APIView`で実装するのはいかがでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問