test_func和view_func在Python / Django中有什么作用?

x33g5p2x  于 11个月前  发布在  Python
关注(0)|答案(3)|浏览(124)

我试图在Django中分解下面的代码,以弄清楚它在做什么,并在必要时编辑它,但我不太清楚其中一些函数在做什么,或者它们来自哪里。
test_func和view_func是Django特有的还是内置的python函数?

**结论:**我不确定我是如何/为什么忽略了这些只是被定义为函数的参数的事实。我需要开始更好地关注细节。

下面是我试图分解/弄清楚的Django函数:

def user_passes_test(test_func, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
    """
    Decorator for views that checks that the user passes the given test,
    redirecting to the log-in page if necessary. The test should be a callable
    that takes the user object and returns True if the user passes.
    """

    def decorator(view_func):
        @wraps(view_func, assigned=available_attrs(view_func))
        def _wrapped_view(request, *args, **kwargs):
            print test_func
            if test_func(request.user):
                return view_func(request, *args, **kwargs)
            path = request.build_absolute_uri()
            # If the login url is the same scheme and net location then just
            # use the path as the "next" url.
            login_scheme, login_netloc = urlparse.urlparse(login_url or
                                                        settings.LOGIN_URL)[:2]
            current_scheme, current_netloc = urlparse.urlparse(path)[:2]
            if ((not login_scheme or login_scheme == current_scheme) and
                (not login_netloc or login_netloc == current_netloc)):
                path = request.get_full_path()
            from django.contrib.auth.views import redirect_to_login
            return redirect_to_login(path, login_url, redirect_field_name)
        return _wrapped_view
    return decorator

字符串

pnwntuvh

pnwntuvh1#

view_func是一个Django viewtest_func是一个“检查用户是否通过给定测试”的函数。
所以,你写了一个函数,向用户请求一些东西,如果他们通过了,就返回True。然后你把这个函数传递给user_passes_test,它创建了一个装饰器,你可以在用户看到你的视图之前先用它来测试用户,就像这样:

@user_passes_test
def test_intelligence(user):
    if is_intelligent:
        return True
    else:
        return False

@test_intelligence
def my_view(request):
    #this is the view you only want intelligent people to see
    pass

字符串
装饰器在文档中的函数定义中提到。wraps是一个装饰器,它在装饰过程中保留了被 Package 的函数的签名(name,args等)。它位于functools中。

yeotifhr

yeotifhr2#

test_funcview_func是作为参数传入的函数--也就是说,名称只是任意的变量名称。user_passes_test是一个decorator,它被应用于一个视图(它变成了变量view_func)--它传递了一个函数作为参数(test_func),它接受一个User并返回TrueFalse

c6ubokkw

c6ubokkw3#

继承自UserPassesTestMixin的Class-based views定义了一个test_func方法,该方法执行与现有答案[1、[2]](https://stackoverflow.com/a/6989925/5320906)中描述的装饰器参数相同的功能,即确定用户是否可以查看页面。

class MyView(UserPassesTestMixin, View):
    def test_func(self):
        return self.request.user.some_atttribute == acceptable_Value

字符串

相关问题