• 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的模板)
    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    闭包
    正则的理解
    正则
    Date对象
    math对象
    js异步
    dom事件
    事件对象-2
    事件对象
    函数作用域
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12354555.html
Copyright © 2020-2023  润新知