gpt4 book ai didi

python - 用装饰器覆盖 Django View

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:06 33 4
gpt4 key购买 nike

我有一种情况需要将已经登录的用户从登录页面重定向到另一个页面。我看到有人提到这可以通过装饰器来完成,这是有道理的,但我对使用它们还很陌生。但是,我正在使用 django 登录和第三方 View (来自 django-registration)。我不想更改 django.contrib.auth 或 django-registration 中的任何代码。如何将装饰器应用到不被修改的 View 以获得所需的行为。

提前致谢!

更新:我发现我错误地将登录功能与注册模块相关联。 django-registration 与此问题无关。但是,我仍然需要能够覆盖默认的 login() 行为。有什么想法吗?

最佳答案

还有三种方法可以做到这一点,但您需要为此使用自己的 urlconf:

  1. 直接在 urlconf 中将装饰器添加到 View :

    ...
    (regexp, decorator(view)),
    ...

    虽然你需要将 View 和装饰器导入 urlconf,这就是我不喜欢这个的原因。我更喜欢在我的 urls.py 中尽可能少地导入。

  2. 将 View 导入 <app>/views.py并在那里添加装饰器:

    import view

    view = decorator(view)

    非常类似于 Vinay 的方法,但更明确,因为您需要一个 urlconf。

  3. 在新 View 中包装 View :

    import view

    @decorator
    def wrapperview(request, *args, **kwargs):
    ... other stuff ...
    return view(request, *args, **kwargs)

    当您需要更改通用 View 时,最后一个非常方便。无论如何,这就是我经常做的事情。

无论何时使用 urlconf,模式的顺序都很重要,因此您可能需要考虑先调用哪个模式。

关于python - 用装饰器覆盖 Django View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1649351/

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