Django——13 Auth系统 登陆注册实例 权限的实现

Django

  1. Auth系统中的表
  2. 注册登陆实例
  3. 权限的实现
    1. 登陆权限
    2. 操作权限
    3. 组操作

 Auth系统中的表

Django——13    Auth系统    登陆注册实例    权限的实现

从表的名称我们就能看出,auth_user,auth_group,auth_permission分别存放了用户,用户组,权限的信息表.另外三张表就是多对多的关系表

  • User:User是auth模块中维护用户信息的关系模式(继承了models.Model), 数据库中该表被命名为auth_user.
  • Group:User对象中有一个名为groups的多对多字段, 多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。
  • Permission:Django的auth系统提供了模型级的权限控制, 即可以检查用户是否对某个数据表拥有增(add), 改(change), 删(delete)权限。

auth系统中User模型常用的属性和方法
Django——13    Auth系统    登陆注册实例    权限的实现

auth系统的功能

  • create_user 创建用户
  • authenticate 验证登录
  • login 记住用户的登录状态
  • logout 退出登录
  • is_authenticated 判断用户是否登录
  • login_required 判断用户是否登录的装饰器

在之前的额博客案例中,我们对用户的账户信息使用的是自建的数据表,现在,我们用auth系统自带的账户管理表,再来进行一次操作

接下来我们要在现有的项目中实现以下功能:

  • 1.使用内置的auth_user表来存储用户注册信息
  • 2.使用auth系统中的login,logout,authenticate实现登录,退出和验证登录
  • 3.给blog中的视图设置登录使用权限
  • 4.给添加博客设置用户的权限

注册登陆实例

从注册开始

之前的注册代码是这样写的

Django——13    Auth系统    登陆注册实例    权限的实现

更改为(将注册的数据添加到Auth的User表中)

Django——13    Auth系统    登陆注册实例    权限的实现

登陆代码之前是这样写的

Django——13    Auth系统    登陆注册实例    权限的实现

现在是

Django——13    Auth系统    登陆注册实例    权限的实现

退出之前是这样写的

Django——13    Auth系统    登陆注册实例    权限的实现

现在是

Django——13    Auth系统    登陆注册实例    权限的实现

结果:

现在来注册账户:

Django——13    Auth系统    登陆注册实例    权限的实现

现在来查看数据库

Django——13    Auth系统    登陆注册实例    权限的实现

注册成功!

然后将home视图的用户查看代码修改一下

Django——13    Auth系统    登陆注册实例    权限的实现

就可以登陆了

Django——13    Auth系统    登陆注册实例    权限的实现

当点击退出以后,(默认未登录显示框中信息)

Django——13    Auth系统    登陆注册实例    权限的实现


 权限的实现

登陆权限设置

一般,当我们视图进入网站因无权限而被阻时,会自动跳转到登录页面,所以,在开始之前,需要在settings中设置一个因权限不足而跳转的url

 Django——13    Auth系统    登陆注册实例    权限的实现

然后回到之前的 博客小案例的实现,  

 Django——13    Auth系统    登陆注册实例    权限的实现

新导入模块

from django.contrib.auth.decorators import login_required, permission_required

 在index页面设置登陆权限

 Django——13    Auth系统    登陆注册实例    权限的实现

 当我们访问http://127.0.0.1/blog/index的时候,页面自动跳转

Django——13    Auth系统    登陆注册实例    权限的实现

当输入账号密码进入后,页面自动又跳转到了session/home页面,这显然不是我们想要的

Django——13    Auth系统    登陆注册实例    权限的实现

我们需要输入完账号和密码以后,页面会继续进行到我们之前操作被暂停的页面,这时就可以发现,访问时的第一次跳转后面有一个next属性,指向的就是我们需要继续的url

Django——13    Auth系统    登陆注册实例    权限的实现

这样就不会登陆到固定页面了、

这样当输入完账号信息以后,就能够正常跳转了

Django——13    Auth系统    登陆注册实例    权限的实现

操作权限设置

接下来我们需要设置一个,只有特定用户,才能够拥有添加博客的功能权限

查看数据库中auth_permission这张表,在里面有所有的表的一些操作权限,这些是在表创建的同是添加进来的数据.
Django——13    Auth系统    登陆注册实例    权限的实现

@permission_required(appname.codename(权限名称))
给blog app当中的add添加博客的视图设置权限
Django——13    Auth系统    登陆注册实例    权限的实现

然后,我们让周杰伦这个用户成为超级用户(配置好url运行一次)

Django——13    Auth系统    登陆注册实例    权限的实现

Django——13    Auth系统    登陆注册实例    权限的实现

现在,当我们登陆到此页面以后

 Django——13    Auth系统    登陆注册实例    权限的实现

点击文件列表会有反应

Django——13    Auth系统    登陆注册实例    权限的实现

但是当我们点击添加文章的时候,就会需要再次登陆

Django——13    Auth系统    登陆注册实例    权限的实现

再次输入周杰伦的账号信息时,就可以添加了

组操作

创建一个组

# 创建一个组
    Group.objects.create(name='add_blog_group')

 Django——13    Auth系统    登陆注册实例    权限的实现

添加新用户

# 找到这个新建的组
    g1 = Group.objects.filter(name='add_blog_group').first()
    # 给组添加权限
    g1.permissions.add(add_permission)
    pywjh = User.objects.get(username='pywjh')
    # 将pywjh添加到g1中,pywjh也就拥有了添加博客的权限
    g1.user_set.add(pywjh)

Django——13    Auth系统    登陆注册实例    权限的实现

可以看到。id为2的用户在用户组1

Django——13    Auth系统    登陆注册实例    权限的实现