From c3668e152d1b60a25f97edbd3fb38f539bf7e427 Mon Sep 17 00:00:00 2001 From: jyn <3080239289@qq.com> Date: Sun, 12 Oct 2025 19:49:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/django-master/accounts/admin.py | 46 +++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/src/django-master/accounts/admin.py b/src/django-master/accounts/admin.py index 32e483c..bc63321 100644 --- a/src/django-master/accounts/admin.py +++ b/src/django-master/accounts/admin.py @@ -4,49 +4,82 @@ from django.contrib.auth.forms import UserChangeForm from django.contrib.auth.forms import UsernameField from django.utils.translation import gettext_lazy as _ -# Register your models here. +# 导入自定义用户模型 from .models import BlogUser class BlogUserCreationForm(forms.ModelForm): + """ + 自定义用户创建表单,用于在管理员界面添加新用户 + 继承自ModelForm,提供密码验证功能 + """ + # 密码字段,使用PasswordInput小部件确保输入不可见 password1 = forms.CharField(label=_('password'), widget=forms.PasswordInput) + # 确认密码字段,用于验证两次输入的密码是否一致 password2 = forms.CharField(label=_('Enter password again'), widget=forms.PasswordInput) class Meta: + # 指定关联的模型 model = BlogUser + # 表单中包含的字段,这里只显示邮箱 fields = ('email',) def clean_password2(self): - # Check that the two password entries match + """ + 验证两次输入的密码是否一致 + 这是Django表单验证机制的一部分,方法名以clean_开头 + """ password1 = self.cleaned_data.get("password1") password2 = self.cleaned_data.get("password2") + # 检查密码是否存在且不一致 if password1 and password2 and password1 != password2: raise forms.ValidationError(_("passwords do not match")) return password2 def save(self, commit=True): - # Save the provided password in hashed format + """ + 重写保存方法,确保密码以哈希形式存储 + 而不是明文存储 + """ + # 先调用父类方法获取用户对象,但不立即保存到数据库 user = super().save(commit=False) + # 使用set_password方法对密码进行哈希处理 user.set_password(self.cleaned_data["password1"]) if commit: + # 标记用户来源为管理员站点 user.source = 'adminsite' user.save() return user class BlogUserChangeForm(UserChangeForm): + """ + 自定义用户修改表单,用于在管理员界面编辑用户信息 + 继承自Django内置的UserChangeForm + """ class Meta: + # 指定关联的模型 model = BlogUser + # 显示所有字段 fields = '__all__' + # 指定用户名字段的处理类 field_classes = {'username': UsernameField} def __init__(self, *args, **kwargs): + """初始化方法,调用父类的初始化方法""" super().__init__(*args, **kwargs) class BlogUserAdmin(UserAdmin): + """ + 自定义用户管理员类,用于在Django管理后台配置用户模型的显示和操作 + 继承自Django内置的UserAdmin + """ + # 指定编辑用户时使用的表单 form = BlogUserChangeForm + # 指定添加用户时使用的表单 add_form = BlogUserCreationForm + # 列表页面显示的字段 list_display = ( 'id', 'nickname', @@ -54,6 +87,9 @@ class BlogUserAdmin(UserAdmin): 'email', 'last_login', 'date_joined', - 'source') + 'source' + ) + # 列表页面中可点击跳转的字段 list_display_links = ('id', 'username') - ordering = ('-id',) + # 排序方式,按id降序排列(最新的用户在前) + ordering = ('-id',) \ No newline at end of file