169.权限-权限验证装饰器

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/')
在没有登录的情况下,输入url:http://127.0.0.1:8000/login_logout/login_permission/, 就会自动跳转到:http://127.0.0.1:8000/login_logout/?next=/login_logout/login_permission/。 登录成功之后,就可以跳转到login_permission界面。并且我们可以设置raise_exception=True,如果设置了该参数并且在项目中写了403的模板,出现403(没有权限访问某些页面的时候就会返回给用户403的模板)
posted @ 2020-02-23 21:49  一笑而过~一笑奈何  阅读(237)  评论(0编辑  收藏  举报