Django:调整@login_required装饰器

Ben*_*Ben 12 python django decorator

我想为我的网站开始一个私人测试版.我有一个启动页面,用户可以输入代码然后访问网站的其余部分.目前,所有其他网站页面(除了启动页面)都包含一系列通过要求用户登录(通过@login_required装饰器)设置的重定向.

我希望登录的用户和输入Beta Tester代码的人都能够访问网站的其余部分.这意味着我不能只使用装饰器来获取所有视图.

我应该改变@login_required装饰器本身吗?我更想做以下事情(如果用户在启动页面输入正确的代码,我添加了一个会话变量).

def view_name(request):
    user=request.user  
    if not user.id or not request.session.get('code_success'):
           return HttpResponseRedirect('/splash/')
Run Code Online (Sandbox Code Playgroud)

这看起来合情合理吗?我不想为了我的所有观点重复它

布伦丹

Ste*_*yne 25

写你自己的装饰 - 这是相当直接的.事实上,如果你看一下Django的来源login_required,你应该可以为自己的目的摆弄一个副本.

def my_login_required(function):
    def wrapper(request, *args, **kw):
        user=request.user  
        if not (user.id and request.session.get('code_success')):
            return HttpResponseRedirect('/splash/')
        else:
            return function(request, *args, **kw)
    return wrapper
Run Code Online (Sandbox Code Playgroud)