Drf представление на основе классов как управлять вызовами методов
Я работал над FBV в Django и теперь пробую CBV. Я создал базовое грубое приложение
Views.py
class UserViews(APIView):
permission_classes = [IsViewOnly | IsManager | IsAdmin | IsStaff]
def get_objects(self, user_id):
#query
def post(self, request):
#create code
def get(self, request):
#details code
def put(self, request):
#update code
def delete(self):
#code
urls.py
urlpatterns = [
path('add-user/', views.UserViews.as_view(), name="create-user"),
path('update-user/', views.UserViews.as_view(), name="update-user"),
path('delete-user/', views.UserViews.as_view(), name="delete-user"),
path('list-users', views.UserSearchList.as_view(), name="list-user"),
path('view-user', views.UserViews.as_view(), name="view-user"),]
Этот код работает, но как предотвратить ситуацию, когда, скажем, менеджер хочет использовать API для просмотра данных пользователя, но выполняет его с методом delete, и пользователь теперь удален
Вы можете использовать декоратор @api_view
с представлениями на основе функций, чтобы установить определенное разрешение на конкретный метод в классе APIView.
@permission_classes([IsManager, ])
def delete(self, request):
# your code.
Примечание: когда вы устанавливаете новые классы разрешений через атрибут class или декораторы, вы говорите представлению игнорировать список по умолчанию, установленный в файле settings.py
.
ссылка: Django установка политики разрешений