1.使用django.contrib.auth.decorators.permission_required可以非常方便的检查用户是否拥有这个权限,如果有,那么久可以进入到指定的视图中,如果不拥有,那么就会报一个400的错误。
2.在用户访问article表之前,判断用户是否登录,并且有访问article表的权限。
判断用户是否登录就可以使用到user对象的is_authenticated方法,如果为True,就认为是已经登录了。用户登录了之后就需要判断用户是否拥有查看article表的权限,可以通过has_perm()方法实现,示例代码如下:
def login_permission(request):
# 首先需要先判断用户是否登录
user = User.objects.get(pk=1)
if user.is_authenticated:
if user.has_perm('login_logout.view_article'):
print("您拥有这个权限!")
else:
print('您没有这个权限!')
else:
print("您还没有登录")
return redirect(reverse('login_logout:login'))
return HttpResponse('登录验证!')
其实,在Django中内置了一个和login_required(验证用户只有在登录了之后才能访问某些页面的装饰器)作用相似的装饰器permission_required(验证用户只有拥有某些权限才能访问某些页面)。示例代码如下:
@permission_required('login_logout.view_user')
def login_permission(request):
return HttpResponse('登录验证!')
此时,如果没有登录,就去访问我们的login_permission页面,就会出现404的界面,原因就是我们的Django会跳转到内置的登录url,但是,在我们的urls.py文件中,又没有定义该url,所以就会出现404的界面。解决的办法就是,在permission_required('login_logout.view_user')中添加一个login_url,
@permission_required('login_logout.view_user', login_url='/login_logout/')