Python Django登录要求问题

Python Django登录要求问题,python,django,django-views,django-login,Python,Django,Django Views,Django Login,如果这个问题很明显,我很抱歉,但我对Django还是新手 我认为: import logging @login_required(login_url='/accounts/login/') def index(request): return render(request, 'post.html', {}) def new(request): return render(request, 'post-add.html',) 如果我进入POST页面,登录将正确重定向

如果这个问题很明显,我很抱歉,但我对Django还是新手

我认为:

import logging

@login_required(login_url='/accounts/login/')

def index(request):
        return render(request, 'post.html', {})

def new(request):
    return render(request, 'post-add.html',)
如果我进入POST页面,登录将正确重定向,但如果我要发布添加,则不需要登录


我是否正确使用了登录要求?

您必须将
@login\u required
装饰器应用于每个需要登录的视图:

@login_required(login_url='/accounts/login/')
def index(request):
        return render(request, 'post.html', {})


@login_required(login_url='/accounts/login/')
def new(request):
    return render(request, 'post-add.html', {})

如果试图在不登录的情况下打开“post add”时要重定向,则需要另一个decorator(@login\u required(login\u url='/accounts/login/'))
).

正如其他人指出的那样,您必须在每个需要身份验证的视图上使用登录装饰程序

您只需像这样包装它,就可以重复使用它:

auth = login_required(login_url='/accounts/login/')

@auth
def index(request):
    return render(request, 'post.html', {})

@auth
def new(request):
    return render(request, 'post-add.html',)
或者,如果您喜欢基于类的视图,我更喜欢这样:

class AuthMixin(object):
    @method_decorator(login_required(login_url='/accounts/login/'))
    def dispatch(self, *args, **kwargs):
        return super(AuthMixin, self).dispatch(*args, **kwargs)

class IndexView(AuthMixin, TemplateView):
    template_name = 'post.html'

class AddView(AuthMixin, TemplateView):
    template_name = 'post-add.html'
为了进一步简化,您可以使mixin从TemplateView继承,并将其用作所有需要登录的视图的单个基类


另外,无论采用哪种方法,从设置中检索登录url都是一个好主意。

在每个视图中将登录url指定为字符串不是一个好主意。特别是当它被设置为默认的django设置时,谢谢:)有没有一种方法可以自动登录所有需要的页面,而无需在任何地方添加decorator?不,我不这么认为。但您可以在设置文件中设置默认的登录url,只需添加decorator(@login\u required)。这看起来很简单。