Django框架基础知识13-auth系统

我们昨天登录admin时创建的用户信息是存放在哪里了呢?

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系统:

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

 

 

 

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

1.使用内置的auth_user表来存储用户注册信息.

2.使用auth系统中的login,logout,authenticate实现登录,退出和验证登录

3.给blog中的视图设置登录使用权限

4.给添加博客设置用户的权限

 

准备工作:

1.创建一个新的app,并将app注册.

2.准备好之前使用过的登录注册的模板和form表单的验证.

3.给视图配置好相应的url路由.

4.导入我们需要使用的auth中的User模型,login,logout,authenticate方法.

 

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

所以我们可以继续使用之前的form表单和之前用过的模板.

使用auth系统实现登录注册:

 

 

 

使用auth系统实现状态保持与退出:

 

 

login_required装饰器:

 

 

在没有登录的状态下去访问我们的blog中主页的url时就会出现跳转到登录页.

next url的使用:

 

Permission权限模型:

 

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

permission_required装饰器:

 

Permission权限模型:

 

注意:如果是超级用户是拥有所有权限的

 

 

request.user.is_authenticated,检测用户是否登录

xinlan.has_per('teacher.add_student')查看用户是否有权限

<p>欢迎<span style="color:blue">{{ user.username|default:'游客' }}</span>登录.</p>
<p><a href="{% url 'teacher:logoutview' %}">安全退出</a></p>

{% if user.is_authenticated %}
   <p>欢迎,{{ user.username }}</p>登录.
   <p><a href="{% url 'teacher:logoutview' %}">安全退出</a></p>
{% else %}<p>欢迎游客登录<a href="{% url 'teacher:loginview' %}">请登录</a></p>
{% endif %}
{{ perms }} #存储了当前用户的所有权限

permission表中的content_type_id,是一个外键关联content_type表,其实是个内容系统,代表某个特定的模型.代表当前这个权限属于哪个app的哪个模型的权限.

自定义权限,在表中写字段.

在模型的meta属性中定义

class Meta:
   permissions = (
      ('can_delete_students','删除学生权限')
  )
@permission_required('teacher.can_delete_students',raise_exception=True)
def delete_student(request):
   pass
posted @ 2019-06-03 16:33  博立克  阅读(213)  评论(0编辑  收藏  举报