Django:调整@login_required装饰器 [英] Django: Tweaking @login_required decorator

查看:174
本文介绍了Django:调整@login_required装饰器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我想要两个登录用户和输入Beta测试人员代码的人员可以访问该网站的其余部分。这意味着我不能仅仅将装饰器用于我所有的观点。



我应该修改@login_required装饰器吗?我更喜欢做以下操作(如果用户在初始页面上输入正确的代码,我添加了一个会话变量)。

  def view_name(request):
user = request.user
如果不是user.id或者不request.session.get('code_success'):
return HttpResponseRedirect('/ splash /')

这是否合理?我不喜欢重复一遍我的观点



Brendan

解决方案 login_required 的Django源代码,那么您应该可以为自己的目的使用副本。

  def my_login_required(function):
def wrapper(request,* args,** kw):
user = request.user
如果没有(user.id和request.session.get('code_success')):
return HttpResponseRedirect('/ splash /')
else:
返回函数(request,* args ,** kw)
return wrapper


I want to begin a private Beta for my website. I have a splash page where a user can enter a code to then access the rest of the site. Currently, all the other site pages (except the splash page) consist of a series of redirects set up by requiring user login (via @login_required decorator).

I want both logged in users and people who enter the Beta Tester code to be able to access the rest of the site. That means that I can't just use the decorator for all my views.

Should I alter the @login_required decorator itself? I'm more tempted to just do the following (I added a session variable if user enters correct code on splash page).

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

Does this seem reasonable? I'd hate to have to repeat it for all my views

Brendan

解决方案

Write your own decorator - it's fairly straight forward. In fact, if you look at the Django source for login_required, you should be able to fiddle around with a copy for your own purposes.

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

这篇关于Django:调整@login_required装饰器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆