我有一种情况,需要将已经登录的用户从登录页面重定向到另一个页面。我已经提到过,这可以通过装饰器来完成,这是有意义的,但我对使用它们还是相当陌生的。但是,我使用的是django登录和第三方视图(来自django-registration)。我不想更改django.contrib.auth或django-registration中的任何代码。如何将装饰器应用于不需要修改的视图,以便获得所需的行为。
提前感谢!
更新:我发现我错误地将登录函数与注册模块关联了起来。django-注册与这个问题无关。但是,我仍然需要能够覆盖默认的login()行为。有什么想法吗?
发布于 2009-10-30 20:21:39
还有三种方法可以做到这一点,不过您需要使用自己的urlconf来完成这些操作:
..。(regexp,装饰器(视图)),...
不过,您需要将视图和装饰器导入urlconf,这就是我不喜欢这个的原因。我更喜欢在我的urls.py中有像possible.
<app>/views.py中一样少的导入,并在那里添加装饰器:导入视图view =装饰器(视图)
很像Vinay的方法,但更显式,因为你需要一个urlconf。
import view @decorator def wrapperview(request,*args,**kwargs):...其他东西..。返回视图(request,*args,**kwargs)
当您需要更改通用视图时,最后一个是非常方便的。无论如何,这就是我经常要做的事情。
无论何时使用urlconf,模式的顺序都很重要,因此您可能需要考虑先调用哪个模式。
发布于 2009-10-30 20:01:44
如果您有装饰器函数,并且知道要装饰django注册中的哪个视图,那么只需执行以下操作
registration.view_func = decorator_func(registration.view_func)其中registration是django注册中的模块,它包含您想要装饰的视图函数,view_func是您想要装饰的视图函数,decorator_func是装饰器。
https://stackoverflow.com/questions/1649351
复制相似问题