Young87

当前位置:首页 >个人收藏

(十四)Django学习——Auth系统中的表,auth系统中的User模型使用,使用auth系统实现注册登录案例;使用auth系统进行指定视图的四种权限的设置,给指定用户添加权限,给组添加权限!

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,操作更方便哦

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: 【python】拉格朗日插值法 和 牛顿插值法

下一篇: JAVA实现多线程复制同一个文件(非伪代码)

精华推荐