Django, как я могу указать другой метод аутентификации для каждого представления

Примерно то, что говорит название.

Я использую Django 1.11, и меня попросили установить CAS в качестве метода аутентификации для некоторых представлений, а остальные оставить за авторизацией модели Django или оставить их без аутентификации.

Я пытаюсь интегрировать django_cas_ng в свой проект для перенаправления на сервер CAS для аутентификации, но я не могу понять, как отличить метод аутентификации среди функций просмотра. Django поддерживает несколько бэкэндов аутентификации или даже полностью настраиваемые, но мне интересно, могу ли я указать отдельный метод аутентификации по имени для каждого представления (например, с помощью декоратора представления).

Django позволяет явно указывать разные базы данных и кэши, но есть ли способ (или приложение) включить то же самое для серверных частей аутентификации?


person zaadeh    schedule 04.09.2017    source источник


Ответы (1)


Аутентификация Django по умолчанию:

from django.contrib.auth.decorators import login_required

@login_required(login_url='/accounts/login/')
class AnyView(AnyViewClass):
    ...

Вы можете использовать для auth-представлений:

from rest_framework.decorators import permission_classes, authentication_classes
from rest_framework.authentication import BasicAuthentication
from rest_framework.permissions import IsAuthenticated

    @authentication_classes((BasicAuthentication,))
    @permission_classes((IsAuthenticated,))
    class AnyView(APIView):
        ...

И для любой другой аутентификации, такой как oauth2:

from oauth2_provider.decorators import protected_resource

@protected_resource()
class AnyView(APIView):
    ...

Чтобы не копировать и вставлять, вы можете создать два класса с разными типами аутентификации и использовать их в качестве родительских классов для других.

person Medvedev Andrey    schedule 04.09.2017
comment
Это специфично для django-rest-framework? потому что я не использую его в своем приложении ни для чего другого. Просто обычные функции просмотра django. - person zaadeh; 04.09.2017
comment
@aalizadeh второй вариант да, попробуйте с первым - person Medvedev Andrey; 04.09.2017