zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Saltstack module apache 详解
    Saltstack module ip 详解
    Saltstack module iosconfig 详解
    Saltstack module introspect 详解
    Saltstack module inspector 详解
    Saltstack module ini 详解
    Saltstack module incron 详解
    Modbus 指令 RS485指令规则
    停车系统对接第三方在线支付平台(二)
    停车系统对接第三方在线支付平台
  • 原文地址:https://www.cnblogs.com/pywjh/p/10254927.html
Copyright © 2011-2022 走看看