首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用装饰器覆盖Django视图

使用装饰器覆盖Django视图
EN

Stack Overflow用户
提问于 2009-10-30 19:50:56
回答 2查看 1.8K关注 0票数 1

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

提前感谢!

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-30 20:21:39

还有三种方法可以做到这一点,不过您需要使用自己的urlconf来完成这些操作:

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

..。(regexp,装饰器(视图)),...

不过,您需要将视图和装饰器导入urlconf,这就是我不喜欢这个的原因。我更喜欢在我的urls.py中有像possible.

  • Import视图到<app>/views.py中一样少的导入,并在那里添加装饰器:

导入视图view =装饰器(视图)

很像Vinay的方法,但更显式,因为你需要一个urlconf。

  • 将视图包装在一个新视图中:

import view @decorator def wrapperview(request,*args,**kwargs):...其他东西..。返回视图(request,*args,**kwargs)

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

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

票数 6
EN

Stack Overflow用户

发布于 2009-10-30 20:01:44

如果您有装饰器函数,并且知道要装饰django注册中的哪个视图,那么只需执行以下操作

代码语言:javascript
复制
registration.view_func = decorator_func(registration.view_func)

其中registration是django注册中的模块,它包含您想要装饰的视图函数,view_func是您想要装饰的视图函数,decorator_func是装饰器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1649351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档