Djangoのpermission_classesが複数ある場合、変数として共通化できる
今回はDjangoのpermission_classesが複数ある場合、変数として共通化できるというお話をしていきます。
Djangoのpermission_classesが複数ある場合、変数として共通化できる
例として、次の複数Permissionを設定したいとします。
1 2 |
class TestViewSet(viewsets.ViewSet): permission_classes = [Permission1|Permission2|Permission3|Permission4|Permission5] |
これを色々なViewSetに同じように書くのは少し辛いですよね。
そんな時は、下記のように変数としてpermission_classesをまとめて定義することができます。
1 |
PERMISSION_SET1 = [Permission1|Permission2|Permission3|Permission4|Permission5] |
1 2 |
class TestViewSet(viewsets.ViewSet): permission_classes = PERMISSION_SET1 |
詳細な説明は省きますが、metaclass=BasePermissionMetaclassを継承することによって、pipeを使った処理がpermissionのORを判定してくれる上、permission_classesによってself.permission_classesをfor分で回してくれるため、そのまま変数として入れることができます。
https://github.com/encode/django-rest-framework/blob/master/rest_framework/permissions.py#L101
https://github.com/encode/django-rest-framework/blob/master/rest_framework/views.py#L278
プログラムの再利用性を高めたいのであればぜひお試しください。
終わりに
今回はDjangoのpermission_classesが複数ある場合、変数として共通化できるというお話をいたしました。
ディスカッション
コメント一覧
まだ、コメントがありません