不使用request.user.is_authenticated()的django授权

时间:2016-08-25 07:32:47

标签: python django

我正在使用django网站,我正在使用django Auth进行用户身份验证和用户授权我在django视图中使用request.user.is_authenticated()代码但是使用这个我必须在每个代码中编写此代码查看,因为在我的网站上只有主页,注册页面和登录页面,无需登录即可访问。因此,在每个视图中,我都必须使用此代码。

def dashboard(request):
if request.user.is_authenticated():
    return render(request, 'home/dashboard.py')
else:
    return HttpResponse('User is not logged In')

这就是为什么我想问有没有办法为所有那些没有登录就无法访问的视图编写代码一次,就像我们在CakePHP中使用authcomponent一样。

2 个答案:

答案 0 :(得分:1)

是的,只需使用login_required装饰器或LoginRequiredMixin

即可
from django.contrib.auth.decorators import login_required
@login_required
def dashboard(request):
    return render(request, 'home/dashboard.py')

from django.contrib.auth.mixins import LoginRequiredMixin
class MyCBV(LoginRequiredMixin, GenericView):

这样做会将尝试访问视图的任何人重定向回LOGIN_URL(可以在此处覆盖),并将下一个get参数返回到视图,以便他们必须在继续之前登录。这与你目前的做法不同,但它更友好

如果您的整个网站都需要登录,那么您可以使用middleware to make this the default

答案 1 :(得分:0)

您可以改用 @login_required 。见here