2012-07-11 58 views
0

我对Django很新。在我的网站,我试图做这样的事情@login_required在Django里面的函数

#views.py 
def index(request): 
.... 
if request.user.is_authenticated: 
    #do something 
else 
    #something else 

所以我的想法是让从数据库的一些信息,显示如果用户于二 记录,我想知道,有没有办法做到这一点像即:

#views.py 
def index(request): 
.... 
    @login_required 
    #do something 
.... 
#do something else for everybody 

或者,如果你认为这是一个不好的做法,那样做,请给我一些想法如何做到这一点的另一种方式。可能是我不得不改变urls.py。

谢谢。

+0

其实,'@ login_required'所做的唯一检查就是'u.is_authenticated()'.. https://github.com/django/django/blob/master/django/contrib/auth/decorators.py – Tisho 2012-07-12 18:03:19

回答

1

@login_required应该用于整个功能(控制器,更具体)。你的第一个代码块是做你想做的正确的方式(除了错误的缩进)。

您可以创建单独的函数与@login_required装饰:

@login_required 
def do_something(request): 
    pass 

def do_something_else(request): 
    pass 

def index(request): 
    if request.user.is_authenticated: 
    do_something(request) 
    else 
    do_something_else(request) 

但是,在这种情况下,该装饰是不必要的,因为如果用户通过验证do_something才会运行。然而,太多的安全并不是坏事。

+0

谢谢您的回答。但是,我可以做一些事情,比如创建一个单独的函数,这个函数将被包装在@login_required中,并且将它放在另一个函数中,如果是的话,我该如何调用这个函数? – Vor 2012-07-11 20:12:14

+0

是的,请参阅我的更新。 – 2012-07-11 20:19:54

+0

哦,这太棒了!!!!!非常感谢你! – Vor 2012-07-11 20:33:08