如何使用Django的`authenticate()`为特定组创建特定的登录?

时间:2017-08-20 12:20:26

标签: django python-3.x authentication

您好我一直在浏览https://docs.djangoproject.com/en/1.11/topics/auth/default/#authenticating-users中的文档。但是,它仅显示如何验证所有User

我已将某些User分组,现在我只希望特定User以特定形式登录。我怎样才能做到这一点?

此外,我应该何时使用Permissions,何时应该使用Groups

1 个答案:

答案 0 :(得分:1)

我建议你创建一个自定义装饰器来做,为什么?因为我认为这种方法很容易理解如何使用Group而不是使用Permissions。

yourapp/decorators.py中的一个示例:

  

你可以看到,我们在这里专注于if ... request.user.groups.filter(name='moderator')来处理这个群体。

from django.shortcuts import render

def moderator_login_required(function):
    def wrap(request, *args, **kwargs):
        if request.user.is_authenticated() \
                and request.user.groups.filter(name='moderator').exists():
            return function(request, *args, **kwargs)
        else:
            context = {
                'title': _('403 Forbidden'),
                'message': _('You are not allowed to access this page!')
            }
            # you can also return redirect to another page here.
            return render(request, 'path/to/error_page.html', context)
    wrap.__doc__ = function.__doc__
    wrap.__name__ = function.__name__
    return wrap

可以在views.py使用吗?

from yourapp.decorators import moderator_login_required

@moderator_login_required
def dashboard(request):
    #do_stuff

或者,如果您使用CBV (基础类视图),您可以使用@method_decorator,例如:

from django.views.generic.base import TemplateView
from django.utils.decorators import method_decorator

from yourapp.decorators import moderator_login_required

class DashboardView(TemplateView):

    @method_decorator(moderator_login_required)
    def dispatch(self, *args, **kwargs):
        return super(DashboardView, self).dispatch(*args, **kwargs)

希望它有用......