Django rest framework を勉強しています。
主にこのサイトと公式ガイドを参照しました。
views.pyの書き方や継承元クラスはいくつかありますが、
とりあえず自分なりに理解した各方法の特長は以下の感じです
### views `function view` * responseを受け取りResponseを返却する。URLにパラメータを埋め込む場合は引数を増やしたりする * 単純な機能は関数ベースで書いたほうが逆に可読性がよく保守しやすいかも `class view` * APIView クラスを継承して定義する。 対象のHTTPメソッドがそのまま インスタンスメソッド になる。→ハンドラメソッド * 特定のモデルに紐付かないような処理はクラスベースで記述したほうがいい `generic view (汎用ビュー)` * 用意されたいろいろなクラスを継承してつくるビューで、やりたいことを簡単に実装できる * 提供されるメソッドはcreate()、update()、list()など ### viewsets `viewsets.ViewSet` * APIViewを継承していて、permission_classesやauthenticationなどの属性を利用できる * アクションの実装が提供されていないので、クラスをオーバーライドして自分で定義する必要がある * RESTapiに対応するメソッドが提供される。create()、update()、list()など * メソッドの中でquerysetやserializerを指定し、Response()を返す * urls.pyでUserViewSet.as_view()としてメソッドを指定する必要がある? * basename、action、detailなどのインスタンス変数が用意されていて、現在のアクションに基づいて動作を調整できる? `viewsets.ModelViewSet` * GenericAPIViewを継承していて、様々なアクションのための実装を含んでいる * クラス変数としてquerysetとserializer_classを指定する。時々permission_classesも * @actionデコレータを使ってメソッドを定義する。requestを受け取る * self.get_object()やself.get_serializerなどのインスタンスメソッドが用意されている * url^モデル名/{pk}/メソッド名/$でアクションにアクセスできるようになる `viewsets.GenericViewSet` * GenericAPIViewを継承していて、get_object()やget_queryset()などを提供するが、デフォルトではアクションは提供されていない
しかし、どういった使い分けをするのかいまいちイメージできないので、「こんな機能を実装したい場合はこの方法が適している」 のような具体例をいくつかお願いできないでしょうか
例えば、「画像をpostしたときに、加工してからデータベースに保存する場合はどれがいい」 のような感じです
よろしくお願いします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/23 10:26
2020/08/23 15:17
2020/08/24 10:30 編集
2020/08/24 11:48
2020/08/26 05:58