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 = (
                ('权限名','注释名'),
            )

  • 相关阅读:
    maven 构建 war文件&&Glassfish运行+部署war文件+访问(命令行模式)
    配置Glassfish服务器、部署Java web项目、Maven安装配置及JDK版本匹配性问题
    配置apache-maven-3.6.0时所遇到的坑(二)
    配置apache-maven-3.6.0时所遇到的坑(一)
    对Functional Language的认识
    论Injection的前世今生
    简单实现美团手机版应用源码
    WindowsPhone8可缩放图片控件的实现
    MallBuilder 多用户商城管理系统 v5.8.1.1
    Windows Phone 带文本信息的进度条
  • 原文地址:https://www.cnblogs.com/2018-8-31/p/10544089.html
Copyright © 2011-2022 走看看