gpt4 book ai didi

Django:在其他装饰器中重用 login_required 装饰器

转载 作者:行者123 更新时间:2023-12-04 14:32:50 25 4
gpt4 key购买 nike

根据 https://stackoverflow.com/a/8715790/210481 中的评论之一,我同意,如果一个依赖于另一个,我们应该避免使用多个装饰器。

因此,在示例中,如果我们有一个用于事件用户的装饰器“active_required”,我们就不必在同一个 View 中同时使用 active_required 和 login_required。

我们应该在“active_required”装饰器中以某种方式“调用”“login_required”装饰器。

是否可以使用 django 附带的标准“login_required”装饰器来实现?

我的要求是:
1)如果用户未通过身份验证,我应该将他重定向到 LOGIN_URL
2)如果用户已通过身份验证(通过 login_required),但未处于事件状态,我应该将他重定向到一个页面以“重新激活”他的帐户
3) 如果用户通过身份验证且处于事件状态,则用户可以访问 View

提前致谢

最佳答案

在考虑您的问题时,我发现创建一个简单的 active_required 更容易首先是装饰器。这很容易,因为我们可以使用 user_passes_test函数在 django.contrib.auth.decorators .

然后问题变为“如何将 login_requiredactive_required 组合成一个装饰器?”。我们需要定义一个函数:

  • 接受一个 View 函数作为它的参数
  • 将两个装饰器应用于它以创建一个新的 View 函数
  • 返回新的 View 函数

  • 把它们放在一起,你有以下几点:
    from django.contrib.auth.decorators import user_passes_test, login_required

    active_required = user_passes_test(lambda u: u.is_active, login_url=REACTIVATE_URL)

    def active_and_login_required(view_func):
    decorated_view_func = login_required(active_required(view_func))
    return decorated_view_func

    关于Django:在其他装饰器中重用 login_required 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521966/

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