本文共 1529 字,大约阅读时间需要 5 分钟。
Django 内置了强大的用户认证系统,基于 auth
模块,默认使用 auth_user
表存储用户信息。这个系统不仅提供用户认证功能,还支持授权管理,通常统称为认证系统。
在 Django 认证系统的核心是 User
对象,这个对象代表站点与之交互的用户。它通常用于限制访问、注册用户、管理用户信息等功能。值得注意的是,Django 的认证系统中只有一种类型的用户,例如 superusers
或 staff
用户并不是独立的 User 对象,而是具有特殊属性集的 User 对象。
默认 User 属性:
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
表字段较少,不足以满足项目需求。我们可以通过继承内置的 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/