gpt4 book ai didi

django - 同时使用 LoginRequiredMixin 和 UserPassesTestMixin

转载 作者:行者123 更新时间:2023-12-04 15:30:31 26 4
gpt4 key购买 nike

我想要一个同时使用 LoginRequiredMixin 和 UserPassesTestMixin 的 TemplateView 类。像这样的东西:

from django.views.generic import TemplateView
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin

class FinanceOverview(LoginRequiredMixin, UserPassesTestMixin, TemplateMixin):
login_url = '/login'
redirect_field_name = 'next'

def test_func(self):
return self.request.user.groups.filter(name="FinanceGrp").exists()

def get(self, request, *args, **kwargs):
DO SOMETHING IF USER IS AUTHENTICATED AND ALSO MEMBER OF GROUP FinanceGrp

基本上正如您在上面看到的,我想要实现的是以下内容:
  • 如果用户未通过身份验证,将用户重定向到:
    https://website/login?next=financeoverview 
  • 但是,我无法弄清楚如何将经过身份验证但不属于 FinanceGrp 组的用户重定向到另一个页面。例如:
    https://website.com/access_denied?previous_page=financeoverview

  • 在我的情况下,用户在组测试失败时总是被重定向到/login 页面。如何实现同时使用两个 mixin 但同时它们都围绕变量 login_url 发生冲突。不幸的是 UserPassesTestMixin 使用相同的 login_url 所以这给我带来了麻烦。

    提前致谢

    米洛斯

    最佳答案

    我认为您最好将子类化 AccessMixin然后自己执行这些检查。像这样的东西:

    from django.contrib.auth.mixins import AccessMixin
    from django.http import HttpResponseRedirect

    class FinanceOverview(AccessMixin, TemplateMixin):

    def dispatch(self, request, *args, **kwargs):
    if not request.user.is_authenticated:
    # This will redirect to the login view
    return self.handle_no_permission()
    if not self.request.user.groups.filter(name="FinanceGrp").exists():
    # Redirect the user to somewhere else - add your URL here
    return HttpResponseRedirect(...)

    # Checks pass, let http method handlers process the request
    return super().dispatch(request, *args, **kwargs)

    关于django - 同时使用 LoginRequiredMixin 和 UserPassesTestMixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47095161/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com