一、Django 内置 auth 系统
Django 自带一套完整的用户认证模块:
内置 User 模型(用户名、密码、邮箱等)
内置登录/登出视图(无需自己写逻辑)
内置的权限和组管理
表单验证和安全防护(CSRF、XSS)
这个模块是 django.contrib.auth,在创建项目时已经默认注册到了 INSTALLED_APPS。
| 功能 | Django 提供 | 需要自己写 |
|---|---|---|
| 用户模型 | ✅ | — |
| 登录视图 | ✅ | — |
| 登出视图 | ✅ | — |
| 注册视图 | — | ✅ |
| 密码修改 | ✅ | — |
| 权限管理 | ✅ | — |
结论: 只有注册需要自己写,登录和登出直接用内置视图。
二、注册页面
Django 内置了登录/登出视图,但没有内置注册视图,需要我们自己写。
第一步:创建注册表单
python
# 文件路径:blog/forms.py(新建文件) from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User class RegisterForm(UserCreationForm): """自定义注册表单:继承 UserCreationForm,添加邮箱字段""" email = forms.EmailField( label='邮箱', required=True, help_text='请输入有效的邮箱地址。' ) class Meta: model = User fields = ['username', 'email', 'password1', 'password2'] labels = { 'username': '用户名', }
UserCreationForm 的优势:
它已经内置了以下功能,无需自己实现:
| 功能 | 说明 |
|---|---|
| 密码强度验证 | 太简单的密码会被拒绝 |
| 两次密码一致性校验 | password1 和 password2 必须相同 |
| 密码加密存储 | 自动哈希,不存明文 |
| 用户名唯一性校验 | 重复用户名会报错 |
Meta 配置说明:
| 配置项 | 作用 |
|---|---|
model = User | 关联 Django 内置 User 模型 |
fields = [...] | 指定表单包含的字段 |
labels = {...} | 自定义字段的中文标签 |
第二步:编写注册视图
python
# 文件路径:blog/views.py 新增 from django.shortcuts import render, redirect from django.contrib.auth im