Django如何为每个视图指定不同的身份验证方法

时间:2017-09-04 12:27:13

标签: python django authentication cas

这就是标题所说的内容。

我正在使用Django 1.11并且我被要求将CAS设置为某些视图的身份验证方法,并将其余部分保留在Django模型身份验证之后,或者不进行身份验证。

我试图将django_cas_ng集成到我的项目中以重定向到CAS服务器进行身份验证,但我无法弄清楚如何在视图函数中区分auth方法。 Django支持多个auth后端,甚至是完全自定义的后端,但我想知道是否可以为每个视图按名称指定单独的auth方法(例如使用视图装饰器)。

Django允许显式指定不同的数据库和缓存,但有没有办法(或应用程序)为身份验证后端启用相同的功能?

1 个答案:

答案 0 :(得分:1)

Django默认身份验证:

from django.contrib.auth.decorators import login_required

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

您可以使用aouth-views:

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):
    ...

对于不复制粘贴,您可以创建两个具有不同身份验证类型的类,并将它们用作其他类的父类。