用户认证

Django 内置一个 auth 模块,帮助用户实现注册、登录、注销以及修改密码等功能,帮助开发者省去了很多功夫

用于认证的数据表

  • auth_user

    • User是auth模块中维护用户信息的关系模式(继承了models.Model), 数据库中该表被命名为auth_user
  • auth_group
  • auth_user_user_permissions
    • User和Permission通过多对多字段user.user_permissions关联,在数据库中由auth_user_user_permissions数据表维护。
  • auth_user_groups
    • User对象中有一个名为groups的多对多字段, 多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。
  • auth_group_permissions
  • auth_permission

django.contrib.auth模块

使用

要使用Django自带的认证功能,首先要导入auth模块

from django.contrib import auth

auth提供的方法

  • authentioate()

    提供了用户认证,即验证用户名以及密码是否正确,一般需要usernamepassword两个关键字参数;

    如果通过认证,authentioate()函数会返回一个User对象;

    authentioate()函数会在User对象上设置一个属性标识,这个属性标识经过数据库验证用户名和密码;

    当我们试图登录一个从数据库中直接取出来不经过authentioate()User对象时会报错。

  • login(request)

    接收一个HttpRequest对象,以及一个通过authentioate()函数认证的User对象;

    实现用户登录功能,会在后台为登录用户生成 session 数据;

    执行过 login() 方法的用户对象,就能通过request.user 拿到当前登录的用户对象,从而取出用户的相关信息,否则取得的将是一个匿名用户对象 AnonymounsUser Object

  • logout(request)

    接收一个HttpRequest对象,无返回值;

    当调用函数时,当前请求的session信息全部被清除;

    即使当前用户没有登录,调用该函数也不会报错。

  • login_required()

    auth模块提供的一个装饰器工具,能够便捷地为某个视图添加登录校验。

    若用户没有登录,则默认会跳转到 accounts/login/,并传递当前访问 url 绝对路径。

    自定义跳转路径,只需在 settings.py 中添加:LOGIN_URL = '/login/'

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def home(request):
    pass

User对象的方法

  • is_authentioated()

    检查用户是否已经通过了认证;

    如果是通过auth函数返回的真实的User对象,返回值则为True;

  • create_superuser()

    该方法用于创建一个超级用户,接收 username、password 两个必要参数。效果与执行 python manage.py createsuperuser 等同。

  • create_user()

    一般情况 create_superuser() 方法很少使用,最常使用的是create_user() 方法,它将会创建一个普通用户,常应用于注册视图中。

    创建用户所需字段,应与 auth_user 数据表中字段对应。

  • set_password[password]

    该方法用于修改密码,接收要新密码作为参数,最后一定要执行 save() 方法保存,否则无效。

  • check_password[password]

    检查登录用户密码是否正确,需要当前请求用户的密码;

    密码正确返回 True,否则返回 False。

User对象属性

  • is_staff

    判断用户是否拥有网站的管理权限

  • is_active

    判断是否允许用户登录。

    设置为False时可以不用删除用户来禁止用户登录。

auth模块拓展

由于 auth 模板中 auth_user 数据表字段是固定的,因此当我们使用 auth 模块,想要添加额外的字段时,就需要对其进行拓展。

拓展的方法:

  1. 模型中新增一个表,与 auth_user 表一对一关联

  2. 继承内置的 AbstractUser 类:常用

    1. 模型 models.py 中新建一个类,继承自 AbstractUser

      from django.contrib.auth.models import User, AbstractUser   # 导入 AbstractUser 类
      
      class UserInfo(AbstractUser):
      """
      继承 AbstractUser
      新增字段:phone、addr
      """
      phone = models.CharField(max_length=11, verbose_name='手机号码')
      addr = models.CharField(max_length=128, verbose_name='家庭地址')
    2. 配置 settings.py

      新增的类继承 AbstractUser ,拓展后将会覆盖 auth_user 表,因此需要配置 settings,使默认认证知道要使用哪种表认证。

      # settings.py
      # 在最后添加如下代码
      AUTH_USER_MODEL = 'app名.新增的类名' AUTH_USER_MODEL = 'app.UserInfo' # 示例
    3. 迁徙数据表

      python manage.py makemigrations
      python manage.py migrate
    4. 创建用户

      拓展 auth 模块后,使用的不再是原来 auth_user 表,而是新表 app.UserInfo 表,因此在创建用户时应该注意。

      # 拓展之前
      from django.contrib.auth.models import User
      user_obj = User.objects.create_user(username='lila', password='1234') # 拓展之后
      from app.models import UserInfo
      user_obj = UserInfo.objects.create_user(username='lila', password='1234')
    • 若已经迁徙了模型,拓展 auth 模块时,需要将 migrations 文件夹下文件(如:0001_initial.py文件删除),否则会报 ValueError: Related model u'app.model' cannot be resolved
    • 若还没有迁徙模型,那么正常执行即可。

06.Django-用户认证的更多相关文章

  1. [django]用户认证中只允许登陆用户访问(网页安全问题)

    当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [    url(r'^$', 'login ...

  2. Django 用户认证及OneToOneField

    Django 用户认证如果自己不想写 就可以用django自带的认证 首选导入模块 models.py #!/usr/bin/env python #_*_ coding:utf8 _*_ from ...

  3. django用户认证系统——拓展 User 模型

    Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...

  4. “Django用户认证系统”学习资料收集

    首推追梦人物——Django用户认证系统 待续……

  5. Django 2.0 学习(17):Django 用户认证(auth模块)

    Django 用户认证(auth模块) 一.认证登陆 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中:如果用户存在于数据库中,然后再验证用户输入 ...

  6. django用户认证系统——重置密码7

    当用户不小心忘记了密码时,网站需要提供让用户找回账户密码的功能.在示例项目中,我们将发送一封含有重置用户密码链接的邮件到用户注册时的邮箱,用户点击收到的链接就可以重置他的密码,下面是具体做法. 发送邮 ...

  7. django用户认证系统——修改密码6

    再此之前我们已经完成了用户登录.注册.注销等功能,接下来让我们继续为用户提供修改密码的功能.该功能 Django 的 auth 应用也已经为我们提供,过程几乎和之前的登录功能完全一样. 编写修改密码模 ...

  8. django用户认证系统——拓展 User 模型2

    Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...

  9. django用户认证系统——基本设置1

    网站提供登录.注册等用户认证功能是一个常见的需求.因此,Django 提供了一套功能完整的.灵活的.易于拓展的用户认证系统:django.contrib.auth.在本教程中,我将向你展示 auth ...

  10. Django——用户认证

    Django--用户认证 用户与Authentication(身份验证) Django 用户认证系统处理用户帐号,组,权限以及基于cookie的用户会话. 这个系统一般被称为 auth/auth (认 ...

随机推荐

  1. Zabbix-部署

    目录 一. apt安装 Zabbix 部署结构图和主机环境 1.1 Zabbix-server 安装配置 1.1.1 安装zabbix仓库 1.1.2 安装Zabbix server.web前端.ag ...

  2. gulp iconfont

    参考如下网站 https://github.com/hjzheng/CUF_meeting_knowledge_share/tree/master/2015-7-24/gulp-test-iconfo ...

  3. 理解javascript中的连续赋值

    之前在扒源码时经常看到类似的连续赋值操作:  var a = b = 1;  在某度搜了众多前辈的博客,总算对这骚操作有点眉目. Case analysis 首先,javascript中连续赋值最典型 ...

  4. 获取访问用户的客户端IP(适用于公网与局域网).

     /**   * 获取访问用户的客户端IP(适用于公网与局域网).   */   public final String getIpAddr(final HttpServletRequest requ ...

  5. Apache 慢连接dos

    http://neue.v2ex.com/t/108717------不实用 http://www.blogjava.net/bukebushuo/articles/293776.html http: ...

  6. PAT-1080 Graduate Admission (结构体排序)

    1080. Graduate Admission It is said that in 2013, there were about 100 graduate schools ready to pro ...

  7. 浙工大新生赛莫队处理+区间DP+KMP+分析题

    题目描述 读入一个长度为n的整数数列a1,a2,…,an,以及一个整数K. q组询问. 每组询问包含一个二元组(l, r), 其中1≤l≤r≤ n, 求所有满足以下条件的二元组(l2, r2)的数目: ...

  8. 树莓派安装pip3以及扩展包的方法

    树莓派上有的时候需要安装一些python额外的包,但上面没有安装pip3,因此需要动手去安装pip3,之后用来安装拓展包. 1.首先安装setuptools cd /usr/local/src/ su ...

  9. 织梦DEDECMS网站如何生成xml格式网站地图

    这个很简单,按照我下边提供的方法进行操作就可以了,我一直在用 第一步,登陆DedeCMS后台:核心 - 频道模型- 自由列表管理,点击添加列表: 参数按照下边的填写: 自由列表标题:[XML地图] 列 ...

  10. 接单,开发,学习神器--基于SpringSecurity的后台权限管理系统

    基于SpringSecurity--码仔后台管理系统 1.技术选项 >- 核心框架 SpringBoot >- 权限框架 SpringSecurity >- 模板引擎 Thymele ...