Django自定义视图装饰器

2024-04-25 05:55:16 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我在user类中有一个名为no_m的方法,我以前没有编写过decorator,但基本上,如果用户传递了这个,我需要将用户重定向到另一个URL。我在一个名为accounts的目录中创建了一个名为decorators.py的文件,我猜这个decorator是正确导入的,但是我无法让它工作。以下是我所拥有的:

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

它需要做的就是重定向用户,如果他们通过了测试,我不知道需要什么网址,所以现在只是谷歌。有什么想法吗?就像我说的,我以前没有写过装饰,所以对我来说都是新的。谢谢你。

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


Tags: 方法no用户viewurlreturnrequestdef
1条回答
网友
1楼 · 发布于 2024-04-25 05:55:16

你在装修上漏了一步,或者说你有一步糊涂了。必须返回内部函数(_wrapped_view_func)的是外部函数,并且必须始终这样做:这就是调用原始函数时替代它的地方。

我不知道那条例外条款是干什么用的。除了使用空白except-that-catcheseverything是个坏主意之外,包括ctrl-c之类的东西,Django函数中的异常通常由中间件处理,而不是由decorator处理。我就把它取下来。

所以代码应该是:

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

相关问题 更多 >