Django 2.1.7 如何在包视图上使用装饰器

Django 2.1.7 How to use a decorator on a package view

我想知道如何在函数 view.py 上使用装饰器,它不能直接在我的应用程序中找到,而是在包中(venv / lib / ...)

有关更多详细信息,我将构建一个使用 django-allauth 的应用程序。 我创建了一个装饰器,要求用户在访问特定页面之前确认他们的密码。

一切顺利,但我想在可以管理电子邮件的 aullauth 功能上使用此构造函数。

我不知道如何进行...

enter image description here

对不起我的英语。

如果是函数视图可以这样做

import package_view...

@decorator
def custom_view(request, *args, **kwargs):
    return package_view(request, *args, **kwargs)

如果它是一个 CBV 你可以从它继承并在 dispatch 方法中添加一个装饰器:

class CustomView(PackageView):
    @decorator
    def dispatch(request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)

你好@Pedro 所以我在这里尝试了 Class 基本视图的解决方案,但它没有用。 由于我的知识有限,我可能没有针对正确的 class ...

不过,我通过定位 url 并在目标 url

上使用装饰器解决了这个问题

如果它可以帮助其他人,它看起来像这样:

...
from allauth.account import views as allauth_views
from .decorators import confirm_password

urlpatterns = [
    re_path(r'^accounts/', include('allauth.urls')),
    re_path(r"^email/$", confirm_password(allauth_views.email), name="account_email"), 
    ...
]

非常感谢,非常感谢您的帮助和时间。

很可能您的解决方案在未来对我有帮助。 :)