Python 如何修改Django';在定制的Pinax安装上需要什么样的decorator?

Python 如何修改Django';在定制的Pinax安装上需要什么样的decorator?,python,django,pinax,Python,Django,Pinax,我想让Django的@login\u requireddecorator测试用户上的某个特定字段是否已设置为“无”。(添加的字段为null=true,默认值为None。) 新创建的用户对象的字段值确实为None,但对@login\u required的明显更改并没有对行为产生明显的影响(我重新启动Gunicorn以确保重新读取)@login\u required如果用户经过身份验证,即使添加的字段为None,也会呈现视图 目前,稍微更改的@login\u required为: def login

我想让Django的
@login\u required
decorator测试用户上的某个特定字段是否已设置为“无”。(添加的字段为null=true,默认值为None。)

新创建的用户对象的字段值确实为None,但对
@login\u required
的明显更改并没有对行为产生明显的影响(我重新启动Gunicorn以确保重新读取)
@login\u required
如果用户经过身份验证,即使添加的字段为None,也会呈现视图

目前,稍微更改的
@login\u required
为:

def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME):
    """
    Decorator for views that checks that the user is logged in, redirecting
    to the log-in page if necessary.
    """
    actual_decorator = user_passes_test(
        lambda u: u.foo != None,
        redirect_field_name=redirect_field_name
    )
    if function:
        return actual_decorator(function)
    return actual_decorator

最初的lambda是在
u上的。是经过身份验证的()

我从您的代码中看到,您实际遇到过,这实际上是您应该使用的,而不是直接修改所需登录的源代码

用户_通过了_test(),接受一个必需的参数:一个接受 如果允许用户查看页面,则返回True。 请注意,用户_通过了_test(),但不会自动检查 用户不是匿名的

您只需创建一个函数来确保满足您的条件。这确保了所有内容都在代码库中(对django的更新不会破坏您的应用程序),并使调试变得更加容易

您的测试函数可能是

def is_foo(user):
   if user.is_authenticated() and user.foo :
       return True