Django REST フレームワーク - メソッドごとにパーミッションが分かれる
2023-10-26 09:48:58
質問
Django REST Frameworkを使ってAPIを書いているのですが、クラスベースのビューを使うときに、メソッドごとにパーミッションを指定できるのかどうか気になります。
ドキュメントを読む
関数ベースのビューを書くのであれば、非常に簡単であることがわかります。
@permission_classes
デコレータを使うだけです。しかし、CBVを使うときに同じことをする方法が
APIView
クラスで CBV を使う場合、同じことをする方法が見当たりません。
permission_classes
属性でクラス全体のパーミッションを指定しますが、 それはすべてのクラスメソッドに適用されるからです (
get
,
post
,
put
...).
では、APIビューをCBVで記述させ、さらにビュークラスのメソッドごとに異なるパーミッションを指定することは可能なのでしょうか?
どうすれば解決するのでしょうか?
パーミッションはViewクラス全体に適用されますが、リクエストの側面(GETやPOSTなどのメソッドなど)を考慮して認可を決定することができます。
組み込みの
IsAuthenticatedOrReadOnly
を例として見てください。
SAFE_METHODS = ['GET', 'HEAD', 'OPTIONS']
class IsAuthenticatedOrReadOnly(BasePermission):
"""
The request is authenticated as a user, or is a read-only request.
"""
def has_permission(self, request, view):
if (request.method in SAFE_METHODS or
request.user and
request.user.is_authenticated()):
return True
return False
関連
-
[解決済み] Django Rest Framework - 認証証明書が提供されませんでした。
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] RESTを理解する。動詞、エラーコード、認証
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
-
[解決済み] Django REST フレームワーク: 非モデルシリアライザー
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] django-rest-framework のシリアライザーを使って外部キー値を取得する
-
[解決済み] Python Django Rest Framework UnorderedObjectListWarning
-
[解決済み] Django Rest Frameworkの部分更新
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。