Python · 2 分钟阅读
用户与身份认证
Django 内置
django.contrib.auth,提供 User、Group、Permission、Session 一整套能力。
核心 Model
| Model | 用途 |
|---|---|
User |
默认用户模型 |
AnonymousUser |
未登录用户 |
Group |
用户组 |
Permission |
权限 |
项目规模上来后建议自定义 User Model:继承
AbstractUser或AbstractBaseUser。
创建用户
from django.contrib.auth.models import User
user = User.objects.create_user("bbs", "bbs@django.com", "django_bbs")
user.set_password("new_pwd")
user.save()
create_user会自动处理密码哈希,永远不要直接User(... password="明文")。
关键属性
is_active— 是否启用is_staff— 是否能进 Adminis_superuser— 是否拥有全部权限
用户组
from django.contrib.auth.models import Group
group = Group.objects.create(name="editor")
user.groups.add(group) # 一次性获得组内所有权限
user.groups.remove(group)
组的价值:
- 批量授权、批量发消息
- 权限自动叠加
身份认证
from django.contrib.auth import authenticate
user = authenticate(username="bbs", password="xxx")
if user is not None:
login(request, user) # 写入 session
else:
messages.error(request, "账号或密码错误")
authenticate失败返回None;login必须在拥有request的视图内调用。
装饰器与 Mixin
from django.contrib.auth.decorators import login_required
@login_required
def dashboard(request):
...
from django.contrib.auth.mixins import LoginRequiredMixin
class DashboardView(LoginRequiredMixin, TemplateView):
...
视图层速查
| 工具 | 用途 |
|---|---|
authenticate |
校验凭据 |
login |
写入 session |
logout |
清除 session |
login_required |
装饰器鉴权 |
LoginRequiredMixin |
类视图鉴权 |
permission_required |
装饰器权限校验 |
PermissionRequiredMixin |
类视图权限校验 |