#django #django-rest-framework
#django #django-rest-framework
Вопрос:
Я реализовывал свое пользовательское разрешение, где мне нужно было проверить, является ли view function
или class
.
Я сделал следующее
def has_permission(self, request, view):
print("request ===", view, inspect.isfunction(view), inspect.isclass(view))
Здесь оба inspect.isfunction(view), inspect.isclass(view)
дают мне false.
Как я могу определить, является ли view функциональным или классом??
Комментарии:
1. это странное условие разрешения 😲😲 Просто из любопытства, какова цель такого условия разрешения?
2. @JPG .. хотел сделать его универсальным и работать как шарм ..
view.func.cls
это дало мне то, что я хотел.. никаких проблем
Ответ №1:
Аргумент представления has_permission
всегда будет функцией.
Либо то, что, как я полагаю, вы называете функцией, либо метод класса (то есть функция, связанная с объектом).
class YourClassName(APIView):
permission_classes = [permissions.IsAdminUser]
def get(self, request):
# the method get, not the class, is passed to your permission check.
Редактировать:
Как указано в комментариях ValidName, Django начал обрабатывать запросы только с помощью представления на основе функций. С тех пор они ввели представление на основе классов, которое в основном преобразуется в функции и, таким образом, рассматривается как таковое за кулисами.
Комментарии:
1. Стоит упомянуть, что сначала в django были только представления на основе функций, поэтому, когда они представили представления на основе классов, они вернули их совместимость с function based с помощью кода, который преобразует представление базового класса в функцию. Таким образом, в некоторых местах представление на основе классов может быть представлено как функция из-за этого преобразования.