@Django中函数内部需要登录\u

@Django中函数内部需要登录\u,django,login-required,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

我对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
或者,如果你认为这样做是一种不好的做法,请告诉我如何用另一种方式来做。也许我不得不改变URL.py


谢谢。

@login\u required
应用于整个功能(更具体地说是控制器)。您的第一个代码块是执行您想要的操作的正确方法(除了错误的缩进)

您可以使用
@login\u 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\u something
才会运行。然而,太多的安全并不是坏事。

谢谢你的回答。但是我可以做一些事情,比如创建一个单独的函数,它将被包装在@login\u required中,然后放入另一个函数中,如果是,我如何调用这个函数?请注意,如果
login\u required
user.is\u authenticated()
为False时失败,它将
返回重定向到\u login(路径、登录\u url、重定向\u字段\u名称)
,但这里不考虑这一点。而且计算某些内容但不使用它会有一点开销…实际上,
@login\u required
进行的唯一检查是
u.是否经过身份验证()。。