当前位置 博文首页 > 孤寒者的博客:(十四)Django学习——Auth系统中的表,auth系统

    孤寒者的博客:(十四)Django学习——Auth系统中的表,auth系统

    作者:[db:作者] 时间:2021-07-26 08:41

    1.Auth系统中的表

    **我们登录admin时创建的用户信息是存放在哪里了呢?
    这就想到了我们映射数据库时,Django自动创建的一些表!!!
    **

    (1)auth系统的数据表:

    注意点:下面会进行多对多表关系的操作,而Django很人性化的一点是:如果是多对多关系产生的中间表,其命名方式是主表在前,从表在后!比如auth_group_permissions表,其中auth_group就是主表,auth_permissions就是从表,如果要进行两表关联,则从auth_group到auth_permissions是正向!!!
    在这里插入图片描述

    **从表的名称我们就能看出,
    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)权限。
    
    
    

    (2)auth系统中User模型常用属性和方法:

    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    (3)使用auth系统实现之前实现过的注册登录案例:

    ①auth系统功能小学习:

    **在auth系统当中,django已经为我们提供了一个用户身份验证,用户组和权限管理这些功能, 那么就可以使用它来完善我们注册登录这个项目:
    **

    auth认证系统功能:
    create_user 创建用户   
    authenticate 验证登录
    login 记住用户的登录状态
    logout 退出登录
    is_authenticated 判断用户是否登录
    login_required 判断用户是否登录的装饰器
    
    
    
    
    接下来我们要在现有的项目中使用上述auth认证系统功能实现以下功能:
    
    1.使用内置的auth_user表来存储用户注册信息.
    
    2.使用auth系统中的login,logout,authenticate实现登录,退出和验证登录
    
    3.给blog中的视图设置登录使用权限
    
    
    

    注意: 对于这个登录注册的例子中, 我们把之前自己定义的模型类改成了使用auth系统中的User模型类, 在User类中同样存在着用户名,密码,邮箱这几个字段,
    所以我们可以继续使用之前的form表单和之前用过的模板.

    ②注册登录案例使用auth系统功能:

    first!导入我们需要使用到的方法:
    在这里插入图片描述
    second!登录里面模型类相关的修改:
    在这里插入图片描述

    third!注册里面模型类相关的修改:

    在这里插入图片描述

    fourth!登录里面保存状态的修改:
    在这里插入图片描述
    补充:现在前端验证是否登录的话直接user.username获取即可!(如果登录则会获取到登录的用户的名字;未登录则获取不到。)

    在这里插入图片描述

    fifth!退出登录里面的修改:
    在这里插入图片描述

    sixth!判断用户是否登录is_authenticated:(如果会话中,即用户登录了则if为真;反之,如果未登录则if为假)

    在这里插入图片描述

    seventh!login_required装饰器:(比如在一个看小说的网站中看小说时,如果你未登录就去点击观看一本小说,它可能因为你权限不够没有登录,而给你跳转到登录页面!)

    首先:在setting文件中配置登录的url(如果你访问index路径,但是你没有登录,那就自动给你跳转到的URL):

    在这里插入图片描述
    然后:给需要登录权限才能进入的视图添加login_required装饰器,
    这里是blog_server app当中的index视图:

    在这里插入图片描述
    最后测试发现:在没有登录的状态下去访问我们的blog中主页的url时就会出现跳转到登录页.

    eighth!next url的使用:(它可能因为你权限不够没有登录,而给你跳转到登录页面。但是你登录了之后要给你跳转到你刚刚访问的那个页面!)

    从刚才的登录页跳转中,我们会看到一个next的参数,
    这个参数的值就是你刚刚访问的那个页面的路径!
    所以我们只需要在登录业务逻辑中进行判断,如果可以获取到index参数,那就说明我们是因为权限不够没有登录而跳转过来的;如果获取不到Index参数,那就说明我们是正常登录!

    在这里插入图片描述

    最后测试发现:我们如果再登录之后就会跳转到index页面!

    2.权限的实现

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

    在这里插入图片描述

    下面标记的是关于博客小案例的四个权限:添加权限,修改权限,删除权限,查看权限(你会发现对应表的权限的名字是由其模型类名构成的!)
    在这里插入图片描述
    在这里插入图片描述

    (1)permission_required装饰器(给对应的视图设置权限,让除了超级用户之外的用户丧失设置的权限!可以依此方法设置任意四种权限!):

    小提示:
    如果是超级用户是拥有所有权限的

    ①导入设置权限的方法:

    在这里插入图片描述

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

    在这里插入图片描述

    ③现在如果访问博客添加页面,哪怕你登录了普通用户会发现也访问失败,它会自动给你跳转到你settings.py文件中设置的权限不足而跳转到的页面里!(此处为登录页面。)

    在这里插入图片描述

    (2)给指定用户添加权限:

    通过观察auth_permission权限表可知:如果你要给指定用户添加某个权限,那实现的方法就是通过用户信息表auth_user和权限信息表auth_permissons由于多对多关系产生的中间表auth_user_user_permissions的操作来完成,即让指定的用户与要添加的权限产生关系!(多对多表关系的添加)

    ①注意:要导入权限表!
    在这里插入图片描述

    ②图个方便,直接找个视图在里面进行操作:
    在这里插入图片描述

    ③现在如果访问博客添加页面,哪怕你登录了普通用户(id为1)会发现也可以访问,这就说明咱给这个普通用户成功添加了添加权限!

    (3)给组添加权限:

    如何理解?试想上面给少数用户添加权限不是很麻烦,但是如果要给好多的用户添加权限岂不是很麻烦,所以又了给组添加权限的概念。我们可以将删除权限设置成一个组;查看权限设置成一个组…如果来了几十个需要添加查看权限的用户,只需将它们都扔进查看权限那个组即可!而且如果以后要对拥有查看权限的用户的权限进行改动或者升级,这样也非常方便!

    组信息表的结构:

    在这里插入图片描述

    ①注意:导入组信息表
    在这里插入图片描述

    ②通过观察组信息表的结构创建组:

    在这里插入图片描述
    在这里插入图片描述
    ③为新创建的组添加权限(此处是添加了添加权限!):

    在这里插入图片描述

    ④举例将一个用户扔进组中,说明如何将用户放进具有权限的组中:
    在这里插入图片描述

    ⑤现在如果访问博客添加页面,哪怕你登录了普通用户(id为3)会发现也可以访问,这就说明咱给这个普通用户成功添加了添加权限!

    项目源码:

    链接:https://pan.baidu.com/s/1CO8CABZHCVp-fj1bF-D6Dw
    提取码:a57w
    复制这段内容后打开百度网盘手机App,操作更方便哦

    cs