• Django 学习第十二天——Auth 系统


    一、Auth系统中的表:

     

      从表的名称我们就能看出,

      auth_user,auth_group,auth_permission分别

      存放了用户,用户组,权限的信息表.

      另外三张表就是多对多的关系表

      User:User是auth模块中维护用户信息的关系模式(继承了models.Model), 数据库中该表被命名为auth_user.

      GroupUser对象中有一个名为groups的多对多字段, 多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。

      Permissio::Django的auth系统提供了模型级的权限控制 即可以检查用户是否对某个数据表拥有增(add), 改(change), 删(delete)权限。数据库中该表被命名为auth_permission.

      auth系统中User模型常用的属性和方法:

     

      auth系统中User模型认证系统功能:

        create_user 创建用户

        authenticate 验证登录

        login 记住用户的登录状态

        logout 退出登录

        is_authenticated 判断用户是否登录

        login_required 判断用户是否登录的装饰器

    二、登录注册的实现:

      1、导入需要用到的方法:

     

      2、注册里面模型类相关的修改(添加用户到数据库):

     

      3、登录里面模型相关修改(验证用户名,密码是否正确):

     

       使用auth系统实现状态保持与退出:

        登录里面保存状态的修改:

     

        退出登录里面的修改:

     

        login_required装饰器:每个模板页面都可拿到 用户名 {{ user }}

      导入装饰器:

    from django.contrib.auth.decorators import login_required

      会自动获取 next url;开始访问的是哪个url,登录过后就访问那个url

      在settings.py 文件中配置登录的url:

      导入:(当没有 next url 的时候要跳转到哪)

    from django.urls import reverse_lazy
    
    LOGIN_URL = reverse_lazy('app_name:name')   # 自定义的路由名
    # 或者
    LOGIN_URL = '/xxx/xxx/'   # 直接写要跳转的路径

        给需要登录权限才能进入的视图添加login_required装饰器:

        这里是 app当中的index视图:

      next url的使用:(自定义方法)

        以路径传参的方式:

     

        从刚才的登录页跳转中,我们会看到一个next的参数,

        这个参数前面的需要登录的那个视图的url.

     

    三、权限的实现:

     

      Permission权限模型:

     

        查看数据库中auth_permission这张表,在里面有所有的表的一些操作权限,这些是在表创建的同是添加进来的数据.

      permission_required装饰器:每个模板页面都可拿到当前用户所有权限 {{ perms }}

      导入装饰器:

    from django.contrib.auth.decorators import permission_required

      使用:如果没有这个权限就返回自己设置那个 LOGIN_URL 地址去

    @permission_required('appname.权限名称',raise_exception=True) # raise_exception=True 表示发生冲突的时候报出异常 403

      给blog app当中的add添加博客的视图设置权限

     

        验证某个用户是否拥有某种权限:

    用户名.has_perm('appname.权限名')

      Permission权限模型:

     

        注意:如果是超级用户是拥有所有权限的

     

        使用:

      自定义权限:(写在模型表里面的)

    class Xxx(models.Model):
        name = models.CharField(max_length=10) 
        
        class Meta:   # 自定义权限
            permissions = (
                ('权限名','注释名'),
            )

  • 相关阅读:
    20199319 《深入理解计算机系统》第一章学习总结
    速读《深入理解计算机系统》
    《文献管理与信息分析》快速学习
    速读《构建之法(第三版)》 20199319
    2019-2020-1 20199319《Linux内核原理与分析》第六周作业
    2019-2020-1 20199319《Linux内核原理与分析》第五周作业
    2019-2020-1 20199319《Linux内核原理与分析》第四周作业
    2019-2020-1 20199319《Linux内核原理与分析》第三周作业
    2019-2020-1 20199319《Linux内核原理与分析》第二周作业
    2019-2020-1 20199319《Linux内核原理与分析》第一周作业
  • 原文地址:https://www.cnblogs.com/2018-8-31/p/10544089.html
Copyright © 2020-2023  润新知