Django大括号 - 需要登录和分组

时间:2015-10-14 15:42:57

标签: django

从以下视图开始:

from braces.views import GroupRequiredMixin, LoginRequiredMixin

class AddAttributeView(LoginRequiredMixin, GroupRequiredMixin, FormView):
    group_required = "SchemaAdmin"
    ...

我想实现以下目标:

  1. 如果用户未登录 - >将用户重定向到登录页面
  2. 如果用户已登录且没有权限:throw 403
  3. 使用上面的配置,用户总是被重定向到登录页面(即使他已登录但根本不在该组中)

    另一方面,如果我设置raise_exception = True,即使用户没有登录,应用程序也会抛出403.

    如果没有设置raise_exception = my_function并在my_function中实现整个逻辑,是否有可能实现上述目标?

1 个答案:

答案 0 :(得分:2)

LoginRequiredMixin的django-braces文档建议您设置raise_exception = True以便为登录用户和redirect_unauthenticated_users = True引发异常,以便将未经身份验证的用户重定向到登录页。

class AddAttributeView(LoginRequiredMixin, GroupRequiredMixin, FormView):
    group_required = "SchemaAdmin"
    raise_exception = True
    redirect_unauthenticated_users = True

由于this issue,目前似乎没有工作。作为一种解决方法,我建议为raise_exception写一个简短的可调用。

from django.shortcuts import redirect

def raise_unless_unauthenticated(request):
    if not request.user.is_authenticated():
        return redirect('login')
    # returning None means PermissionDenied will be raised
    return None

class AddAttributeView(LoginRequiredMixin, GroupRequiredMixin, FormView):
    group_required = "SchemaAdmin"
    raise_exception = raise_unless_unauthenticated