|
|
#shw 导入Django的表单模块
|
|
|
from django import forms
|
|
|
#shw 导入Django后台管理的基础用户管理类
|
|
|
from django.contrib.auth.admin import UserAdmin
|
|
|
#shw 导入Django后台用于修改用户信息的表单
|
|
|
from django.contrib.auth.forms import UserChangeForm
|
|
|
#shw 导入Django后台用于用户名的字段类
|
|
|
from django.contrib.auth.forms import UsernameField
|
|
|
#shw 导入Django的国际化和翻译工具
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
#shw 注册你的模型到这里(这是一个注释提示,实际注册在文件末尾)
|
|
|
from .models import BlogUser
|
|
|
|
|
|
|
|
|
class BlogUserCreationForm(forms.ModelForm):
|
|
|
#shw 自定义用户创建表单,用于在Django Admin后台添加新用户。
|
|
|
#shw 它继承自 ModelForm,并增加了密码输入和确认的逻辑。
|
|
|
|
|
|
#shw 定义第一个密码字段,使用PasswordInput控件隐藏输入内容
|
|
|
password1 = forms.CharField(label=_('password'), widget=forms.PasswordInput)
|
|
|
#shw 定义第二个密码字段,用于确认密码
|
|
|
password2 = forms.CharField(label=_('Enter password again'), widget=forms.PasswordInput)
|
|
|
|
|
|
class Meta:
|
|
|
#shw Meta类用于配置表单与模型的关联
|
|
|
model = BlogUser #shw 指定该表单对应的模型是 BlogUser
|
|
|
fields = ('email',) #shw 在创建用户时,除了密码外,只显示邮箱字段
|
|
|
|
|
|
def clean_password2(self):
|
|
|
#shw 自定义验证方法,用于检查两次输入的密码是否一致
|
|
|
#shw Check that the two password entries match
|
|
|
password1 = self.cleaned_data.get("password1") #shw 从已清洗的数据中获取第一个密码
|
|
|
password2 = self.cleaned_data.get("password2") #shw 从已清洗的数据中获取第二个密码
|
|
|
#shw 如果两个密码都存在且不相等,则抛出验证错误
|
|
|
if password1 and password2 and password1 != password2:
|
|
|
raise forms.ValidationError(_("passwords do not match"))
|
|
|
return password2 #shw 返回第二个密码作为清洗后的数据
|
|
|
|
|
|
def save(self, commit=True):
|
|
|
#shw 重写save方法,以便在保存用户时处理密码哈希
|
|
|
#shw Save the provided password in hashed format
|
|
|
user = super().save(commit=False) #shw 调用父类的save方法,但先不提交到数据库(commit=False)
|
|
|
user.set_password(self.cleaned_data["password1"]) #shw 使用Django的set_password方法将明文密码加密后存储
|
|
|
if commit:
|
|
|
user.source = 'adminsite' #shw 如果决定提交,则设置用户的来源为 'adminsite'
|
|
|
user.save() #shw 将用户对象保存到数据库
|
|
|
return user #shw 返回保存后的用户对象
|
|
|
|
|
|
|
|
|
class BlogUserChangeForm(UserChangeForm):
|
|
|
#shw 自定义用户修改表单,用于在Django Admin后台编辑现有用户信息。
|
|
|
#shw 它继承自Django的UserChangeForm,以复用大部分功能。
|
|
|
|
|
|
class Meta:
|
|
|
#shw Meta类用于配置表单与模型的关联
|
|
|
model = BlogUser #shw 指定该表单对应的模型是 BlogUser
|
|
|
fields = '__all__' #shw 在修改用户时,显示模型中的所有字段
|
|
|
#shw 指定 'username' 字段使用的字段类为 UsernameField
|
|
|
field_classes = {'username': UsernameField}
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
#shw 重写初始化方法,可以在这里添加自定义的初始化逻辑
|
|
|
super().__init__(*args, **kwargs) #shw 调用父类的初始化方法
|
|
|
|
|
|
|
|
|
class BlogUserAdmin(UserAdmin):
|
|
|
#shw 自定义用户管理类,用于在Django Admin后台定制 BlogUser 模型的显示和操作方式。
|
|
|
#shw 它继承自Django的UserAdmin,以复用用户管理的标准功能。
|
|
|
|
|
|
form = BlogUserChangeForm #shw 指定修改用户时使用的表单
|
|
|
add_form = BlogUserCreationForm #shw 指定添加用户时使用的表单
|
|
|
#shw 定义在用户列表页面显示的列
|
|
|
list_display = (
|
|
|
'id', #shw 用户ID
|
|
|
'nickname', #shw 昵称
|
|
|
'username', #shw 用户名
|
|
|
'email', #shw 邮箱
|
|
|
'last_login', #shw 最后登录时间
|
|
|
'date_joined', #shw 注册时间
|
|
|
'source') #shw 创建来源
|
|
|
#shw 定义在列表页面中,哪些列可以点击进入编辑页面
|
|
|
list_display_links = ('id', 'username')
|
|
|
#shw 定义用户列表的默认排序方式,按ID降序排列
|
|
|
ordering = ('-id',)
|
|
|
#shw 定义搜索框可以搜索的字段
|
|
|
search_fields = ('username', 'nickname', 'email')
|