• django 权限功能(根据不同的用户,设置不同的显示和访问权限)


    简单的认证

    @Login_required 装饰器

    判断是否登陆,没有就自动重定向某个地方

    用法:(局限于装饰函数)(如果要装饰一个类,则不能,要使用method_decorator)

    @login_required(login_url='users:login')
    def index_fn(reuqest):
        return HttpResponse('大家都是大牛')

    自动跳转到login页面

    登陆后:

    @method_decorator装饰器

    @method_decorator(login_required(login_url='users:login'),name='dispatch')
    class Index(View):
        def get(self, request):
            return render(request, 'admin/index.html', context={'request': request})

    用法基本一样也就是一个是类视图一个是函数视图。

    但是是否每一个都需要添加呢?不符合优秀程序员的做法(手动滑稽)因为实在是太丑了。

    Minxin认证

    LoginRequired Mixin

    需要设定重定向的URL(有一点restful的风格)

    class Index(LoginRequiredMixin,View):
        login_url = 'users:login'
        def get(self, request):
            return render(request, 'admin/index.html', context={'request': request})

    聪明的看得出来了,是否每一次都添加login_url呢,这里显然不是的,可以将login_url设置在Settings里面,我的Mixin会自动去settings里面寻找LOGIN_URL的参数。

     

    ?next=/admin/        可以自定义next 

    @login_required(redirect_field_name='my_redirect_field') 这样就可以代替next

    自动帮我们添加一个查询的参数在URL上面。

    user_passes_test 

    这个比较通用于函数视图

    以下为官方文档。 描述为判断登陆的用户的邮箱以‘@example.com’结尾,就为True,允许访问,如果相反,那么就禁止访问。可自定义

    userPassesTestMixin

    这个通用于类视图。

    class Index(UserPassesTestMixin,View):
        def test_func(self):
            return self.request.user.username.endswith('son')
    
        def get(self, request):
            return render(request, 'admin/index.html', context={'request': request})

    test_func为Mixin所定的。测试是否通过,为TRUE则可以进入,FALSE为相反。

    权限

    permission_required decorator 

    首先这里要注意权限和认证的区别,认证给你登陆了,但不一定给你看某些好看的东西。除非微信转钱。

    permission_required(perm.login_url=None,raise_exception=False)

    perm为权限多个权限就可以用一个列表或者元组都行。放在函数视图里面。

     perm 第一部分模型名字    第二部分为codename

    permissionRequiredMixin mixin 

    使用于类视图里面。

    lass TagManage(PermissionRequiredMixin,View):
        """
        create tags manage view
        route: admin/tags/int
        """
        permission_required = ('news.add_tag', 'news.view_tag')
        raise_exception = True # 403
        def get(self, request):

    没有权限直接403

     

    未完待续。https://docs.djangoproject.com/en/3.0/topics/auth/default/

     

  • 相关阅读:
    钱伟长的养生之道:每天步行三千步
    GBDT 深入理解
    整形数据的存储方式
    进制基础学习
    C语言运算符(注意事项)
    PHP文件锁
    gcc options选项的优化及选择
    Datenode无法启动
    如何使用WebUploader。
    thinkphp如何实现伪静态
  • 原文地址:https://www.cnblogs.com/jackson669/p/12787676.html
Copyright © 2020-2023  润新知