фреймворк django rest знает, является ли view классом или функцией

#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 с помощью кода, который преобразует представление базового класса в функцию. Таким образом, в некоторых местах представление на основе классов может быть представлено как функция из-за этого преобразования.