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


    Django

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

     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模型常用的属性和方法

    auth系统的功能

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

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

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

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

    注册登陆实例

    从注册开始

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

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

    登陆代码之前是这样写的

    现在是

    退出之前是这样写的

    现在是

    结果:

    现在来注册账户:

    现在来查看数据库

    注册成功!

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

    就可以登陆了

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


     权限的实现

    登陆权限设置

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

     

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

     

    新导入模块

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

     在index页面设置登陆权限

     

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

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

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

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

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

    操作权限设置

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

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

    @permission_required(appname.codename(权限名称))
    给blog app当中的add添加博客的视图设置权限

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

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

     

    点击文件列表会有反应

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

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

    组操作

    创建一个组

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

     

    添加新用户

    # 找到这个新建的组
        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)

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

  • 相关阅读:
    Gates entitled as knight
    the next generation Office
    Beautiful songs
    一则比较搞笑的新闻:【人才】微软招募英才 机会不容错过
    About cmt lint tools
    Alpha's blog open !
    抱歉!
    新闻:IBM的新工具CHIPHOPPER! 一套能够极大扩展Linux应用范围的新工具、新资源和新软件
    读书笔记:Thinking in Java (一)
    The best coders are:/什么是最牛的程序员
  • 原文地址:https://www.cnblogs.com/pywjh/p/10254927.html
Copyright © 2020-2023  润新知