R / Richie全部文章 ↑

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 — 是否能进 Admin
  • is_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 类视图权限校验