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

 

posted @ 2019-03-16 20:04  碔趺  阅读(228)  评论(0编辑  收藏  举报