【问题标题】:Django 2.1.7 How to use a decorator on a package viewDjango 2.1.7 如何在包视图上使用装饰器
【发布时间】:2019-03-13 16:58:15
【问题描述】:

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

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

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

我不知道如何继续......

enter image description here

对不起我的英语。

【问题讨论】:

    标签: python django decorator django-allauth


    【解决方案1】:

    嗨@Pedro 所以在这里我尝试了类基础视图的解决方案,但它没有用。 由于我的知识有限,我可能没有针对正确的课程...

    不过,我通过定位 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"), 
        ...
    ]
    

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

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

    【讨论】:

      【解决方案2】:

      如果是功能视图,你可以这样做

      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)
      

      【讨论】:

      • 仔细看了一下包,这是一个类。但是知道这个功能很有趣。 ;) 谢谢
      • 我为 CBV 添加了解决方案
      • @ChrisPro 欢迎您,如果此答案解决了您的问题,请点击复选标记考虑accepting it
      猜你喜欢
      • 2012-08-02
      • 2011-08-29
      • 2021-07-12
      • 2010-12-11
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多