gpt4 book ai didi

python - Django 自定义 View 装饰器

转载 作者:太空狗 更新时间:2023-10-29 18:23:10 25 4
gpt4 key购买 nike

好吧,我在用户类中有一个名为 no_m 的方法,我之前没有写过装饰器,但基本上我需要将用户重定向到另一个 URL,如果他们通过这个。我在名为 accounts 的目录中创建了一个名为 decorators.py 的文件,我猜装饰器已正确导入,但我无法让它工作。这是我所拥有的:

def no_m(view_func):
def _wrapped_view_func(request, *args, **kwargs):
try:
if request.user.is_m():
# quick test
return HttpResponseRedirect('http://google.com')
else:
return view_func(request, *args, **kwargs)
except:
return _wrapped_view_func

它需要做的就是在用户通过该测试时重定向用户,我还不知道 URL 需要是什么,所以现在只是谷歌。有任何想法吗?就像我说的,我以前没有写过装饰器,所以这对我来说是全新的。谢谢。

另一个想法:是否可以呈现模板页面?

最佳答案

您在装饰器中遗漏了一个步骤,或者您混淆了一个步骤。 outer 函数必须返回内部函数 (_wrapped_view_func),并且它必须始终这样做:这就是取代原始函数的地方调用时起作用。

我不确定 except 子句的用途。除了使用空白 except 总是一个坏主意之外 - 它捕获 所有内容,包括 ctrl-c 之类的东西 - Django 函数中的异常通常由中间件处理,而不是装饰器。我会删除它。

所以代码应该是:

def no_m(view_func):
def _wrapped_view_func(request, *args, **kwargs):
if request.user.is_m():
# quick test
return HttpResponseRedirect('http://google.com')
else:
return view_func(request, *args, **kwargs)
return _wrapped_view_func

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

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