zoukankan      html  css  js  c++  java
  • 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 = (
                ('权限名','注释名'),
            )

  • 相关阅读:
    【leetcode】1365. How Many Numbers Are Smaller Than the Current Number
    【leetcode】1363. Largest Multiple of Three
    【leetcode】1362. Closest Divisors
    【leetcode】1361. Validate Binary Tree Nodes
    【leetcode】1360. Number of Days Between Two Dates
    【leetcode】1359. Count All Valid Pickup and Delivery Options
    【leetcode】1357. Apply Discount Every n Orders
    【leetcode】1356. Sort Integers by The Number of 1 Bits
    ISE应用入门的一些问题
    DDR的型号问题
  • 原文地址:https://www.cnblogs.com/2018-8-31/p/10544089.html
Copyright © 2011-2022 走看看