博客
关于我
Django认证系统
阅读量:638 次
发布时间:2019-03-14

本文共 1529 字,大约阅读时间需要 5 分钟。

Django 用户认证系统

Django 内置了强大的用户认证系统,基于 auth 模块,默认使用 auth_user 表存储用户信息。这个系统不仅提供用户认证功能,还支持授权管理,通常统称为认证系统。

User 对象

在 Django 认证系统的核心是 User 对象,这个对象代表站点与之交互的用户。它通常用于限制访问、注册用户、管理用户信息等功能。值得注意的是,Django 的认证系统中只有一种类型的用户,例如 superusersstaff 用户并不是独立的 User 对象,而是具有特殊属性集的 User 对象。

默认 User 属性

  • 用户名 (username)
  • 密码 (password)
  • 电子邮件 (email)
  • 名字 (first_name)
  • 姓姓 (last_name)

auth 模块

auth 模块提供了丰富的用户认证功能,常用方法如下:

  • authenticate(username, password)

    用于验证用户名和密码。如果认证成功,将返回一个 User 对象,并在其上设置一个标识已登录的属性,为后续操作提供重要依据。

  • login(request, user_obj)

    使用该方法执行登录功能,会为请求生成相应的会话数据,使 request.user 可以获得当前登录用户对象。如果未使用该方法,request.user 将返回匿名用户对象 AnonymousUser Object

  • logout(request)

    该方法用于注销当前用户,将请求的会话数据清除。

  • is_authenticated()

    判断当前请求是否已通过认证。

  • create_user(username, password, email, ...) [模板方法]

    创建新用户时,需要提供 username、password 等必填参数。此外还可以 optionally 提供 email、first_name、last_name 等信息。

  • create_superuser(username, password, email, ..., is_staff=True, is_superuser=True)

    创建超级用户,即具有最高权限的用户。

  • check_password(raw_password) [模板方法]

    检查用户的密码是否正确,需提供原始密码。

  • set_password(raw_password) [模板方法]

    更改用户密码后,需要手动保存 (user_obj.save()).


  • 扩展 auth-user 表

    默认的 auth_user 表字段较少,不足以满足项目需求。我们可以通过继承内置的 AbstractUser 类定义自己的模型类 UserInfo,实现对用户表的扩展。这既是灵活的设计,也能充分利用 Django 强大的认证系统。

    示例代码:

    from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser):    nid = models.AutoField(primary_key=True)    phone = models.CharField(max_length=11, null=True, unique=True)

    settings.py 中设置:

    AUTH_USER_MODEL = 'yourapp.UserInfo'

    使用扩展后的表时,需重新创建数据库,不能直接使用原 auth_user 表。


    通过以上功能,您可以轻松实现用户认证、管理以及自定义用户表结构,充分发挥 Django 功能的强大!

    转载地址:http://vxylz.baihongyu.com/

    你可能感兴趣的文章
    mysql select as 多个_MySQL 中 根据关键字查询多个字段
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql server has gone away
    查看>>
    mysql skip-grant-tables_MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    MYSQL sql语句针对数据记录时间范围查询的效率对比
    查看>>
    mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
    查看>>
    mysql sysbench测试安装及命令
    查看>>
    mysql Timestamp时间隔了8小时
    查看>>
    Mysql tinyint(1)与tinyint(4)的区别
    查看>>
    MySQL Troubleshoting:Waiting on query cache mutex
    查看>>
    mysql union orderby 无效
    查看>>
    mysql v$session_Oracle 进程查看v$session
    查看>>
    mysql where中如何判断不为空
    查看>>
    mysql where中如何判断不为空
    查看>>
    MySQL Workbench 使用手册:从入门到精通
    查看>>
    MySQL Workbench 数据库建模详解:从设计到实践
    查看>>
    MySQL Workbench 数据建模全解析:从基础到实践
    查看>>