Могу ли я переопределить глобальную аутентификацию для одного типа запроса в ApiView с использованием DRF? - PullRequest
0 голосов
/ 03 февраля 2020

Я использую django_rest_frameork (DRF) в большом проекте. В общем, я хочу, чтобы все мои представления были защищены, поэтому в качестве схемы глобальной аутентификации я установил Token Authentication. Но есть несколько представлений, которые я хочу отключить, например, создание нового пользователя и вход в систему.

Например, мой /User ApiView имеет метод get и post. get возвращает профиль пользователя, а post создает нового пользователя. Как я могу переопределить глобальную схему аутентификации только на /User post? Мне все еще нужно, чтобы он был включен при получении информации о пользователе.

Я прошу больше, чтобы улучшить мое понимание DRF, чем что-либо еще. Я знаю, что мог бы разделить вызовы /User/ на разные ApiView, где один аутентифицирован, а другой нет. Я также знаю, что мог бы полностью отказаться от глобальной схемы и выполнить аутентификацию на основе предварительного просмотра.

Существует ли какой-либо особенный "pythoni c" или django -типичный способ сделать это? Любые рекомендации?

1 Ответ

2 голосов
/ 03 февраля 2020

Вы можете написать собственный класс разрешений и использовать его в некоторых представлениях. Например:

from rest_framework.permissions import BasePermission

class AllowPostAny((BasePermission):
    def has_permission(self, request, view):
        if request.method == "POST":
            return True
        return bool(request.user and request.user.is_authenticated)  

Теперь вы можете использовать это разрешение в виде:

class ExampleView(APIView):
    permission_classes = [AllowPostAny]
...