代码标注

JYN_branch
jyn 4 months ago
parent b21fad906c
commit c3668e152d

@ -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',)
Loading…
Cancel
Save