|
|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
from django import forms
|
|
|
|
|
from django.contrib.auth.admin import UserAdmin # 导入Django默认的用户管理Admin类(基础模板)
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
@ -26,11 +27,22 @@ from django.contrib.auth.admin import UserAdmin# 从 django 内置的 auth 管
|
|
|
|
|
from django.contrib.auth.forms import UserChangeForm# 从 django 内置的 auth 表单模块导入 UserChangeForm,用于用户信息修改表单的定制
|
|
|
|
|
from django.contrib.auth.forms import UsernameField# 从 django 内置的 auth 表单模块导入 UsernameField,用于用户名字段的处理
|
|
|
|
|
from django.utils.translation import gettext_lazy as _# 从 django 翻译工具模块导入 gettext_lazy 并别名成 _,用于实现国际化翻译(延迟翻译)
|
|
|
|
|
=======
|
|
|
|
|
from django import forms# 导入 Django 的表单基类
|
|
|
|
|
from django.contrib.auth.admin import UserAdmin# 导入 Django 默认的用户管理类,我们将继承它来进行自定义
|
|
|
|
|
from django.contrib.auth.forms import UserChangeForm# 导入 Django 默认的用户修改表单,我们将继承它
|
|
|
|
|
from django.contrib.auth.forms import UsernameField# 导入 Django 用于处理用户名字段的专用类,它包含了一些验证逻辑
|
|
|
|
|
from django.utils.translation import gettext_lazy as _# 导入国际化函数,用于将文本标记为可翻译的,这是一个好习惯
|
|
|
|
|
# 这是一个标准的注释,提醒开发者在这里注册自己的模型到 Admin 站点
|
|
|
|
|
# Register your models here.
|
|
|
|
|
from .models import BlogUser# 从当前应用的 models.py 文件中导入我们自定义的用户模型 BlogUser
|
|
|
|
|
>>>>>>> psy_branch
|
|
|
|
|
|
|
|
|
|
# Register your models here.
|
|
|
|
|
from .models import BlogUser# 从当前目录的 models 模块导入自定义的 BlogUser 模型
|
|
|
|
|
>>>>>>> xyr-branch
|
|
|
|
|
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
# Register your models here.
|
|
|
|
|
from .models import BlogUser # 导入自定义的用户模型(替代Django默认User)
|
|
|
|
|
|
|
|
|
|
@ -47,11 +59,26 @@ class BlogUserCreationForm(forms.ModelForm):
|
|
|
|
|
fields = ('email',) # 新增用户时,默认显示的核心字段(仅邮箱,其他字段可后续编辑)
|
|
|
|
|
# 密码验证逻辑:检查两次输入的密码是否一致
|
|
|
|
|
def clean_password2(self):
|
|
|
|
|
=======
|
|
|
|
|
class BlogUserCreationForm(forms.ModelForm):# 添加一个密码字段,label 使用了国际化,widget 指定为密码输入框(输入内容会被掩码)
|
|
|
|
|
password1 = forms.CharField(label=_('password'), widget=forms.PasswordInput)# 添加一个密码字段,label 使用了国际化,widget 指定为密码输入框(输入内容会被掩码)
|
|
|
|
|
password2 = forms.CharField(label=_('Enter password again'), widget=forms.PasswordInput) # 添加一个确认密码字段
|
|
|
|
|
|
|
|
|
|
class Meta: # Meta 类用于定义 ModelForm 的元数据
|
|
|
|
|
model = BlogUser # 指定这个表单对应的模型是 BlogUser
|
|
|
|
|
fields = ('email',)
|
|
|
|
|
|
|
|
|
|
def clean_password2(self): # 自定义密码验证方法,Django 会自动调用名为 clean_<field_name> 的方法
|
|
|
|
|
>>>>>>> psy_branch
|
|
|
|
|
# Check that the two password entries match
|
|
|
|
|
password1 = self.cleaned_data.get("password1")# 获取第一个密码框的清洗后数据
|
|
|
|
|
password2 = self.cleaned_data.get("password2")
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
if password1 and password2 and password1 != password2:
|
|
|
|
|
# 如果密码不一致,抛出验证错误
|
|
|
|
|
=======
|
|
|
|
|
if password1 and password2 and password1 != password2:# 检查两个密码是否都存在且不相等
|
|
|
|
|
>>>>>>> psy_branch
|
|
|
|
|
raise forms.ValidationError(_("passwords do not match"))
|
|
|
|
|
return password2
|
|
|
|
|
=======
|
|
|
|
|
@ -59,6 +86,7 @@ class BlogUserCreationForm(forms.ModelForm):# 定义 BlogUserCreationForm 类,
|
|
|
|
|
password1 = forms.CharField(label=_('password'), widget=forms.PasswordInput) # 定义 password1 字段,类型为 CharField,标签为“password”,小部件使用 PasswordInput(密码输入框,内容会隐藏)
|
|
|
|
|
password2 = forms.CharField(label=_('Enter password again'), widget=forms.PasswordInput)# 定义 password2 字段,类型为 CharField,标签为“Enter password again”,小部件同样使用 PasswordInput
|
|
|
|
|
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
class Meta:# Meta 类用于定义模型表单的元数据
|
|
|
|
|
model = BlogUser # 关联的模型是 BlogUser
|
|
|
|
|
fields = ('email',) # 表单中包含的字段是 'email'
|
|
|
|
|
@ -73,12 +101,15 @@ class BlogUserCreationForm(forms.ModelForm):# 定义 BlogUserCreationForm 类,
|
|
|
|
|
>>>>>>> xyr-branch
|
|
|
|
|
|
|
|
|
|
def save(self, commit=True): # 定义 save 方法,用于保存用户数据,commit 参数控制是否立即提交到数据库
|
|
|
|
|
=======
|
|
|
|
|
def save(self, commit=True): # 自定义保存方法,用于处理密码加密
|
|
|
|
|
>>>>>>> psy_branch
|
|
|
|
|
# Save the provided password in hashed format
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
user = super().save(commit=False)
|
|
|
|
|
# 使用 Django 内置方法加密密码
|
|
|
|
|
user.set_password(self.cleaned_data["password1"])
|
|
|
|
|
if commit:
|
|
|
|
|
if commit:# 如果 commit 参数为 True(默认情况),则将用户对象保存到数据库
|
|
|
|
|
user.source = 'adminsite'
|
|
|
|
|
user.save()
|
|
|
|
|
return user
|
|
|
|
|
@ -91,19 +122,29 @@ class BlogUserCreationForm(forms.ModelForm):# 定义 BlogUserCreationForm 类,
|
|
|
|
|
return user # 返回用户对象
|
|
|
|
|
>>>>>>> xyr-branch
|
|
|
|
|
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
# 自定义用户修改表单(用于在后台编辑用户信息)
|
|
|
|
|
class BlogUserChangeForm(UserChangeForm):
|
|
|
|
|
=======
|
|
|
|
|
|
|
|
|
|
class BlogUserChangeForm(UserChangeForm):# 2. 自定义用户修改表单 (用于在 Admin 后台编辑已存在的用户)
|
|
|
|
|
>>>>>>> psy_branch
|
|
|
|
|
class Meta:
|
|
|
|
|
model = BlogUser
|
|
|
|
|
fields = '__all__'
|
|
|
|
|
field_classes = {'username': UsernameField}
|
|
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
|
def __init__(self, *args, **kwargs):# 自定义初始化方法
|
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
# 自定义用户管理类(用于在后台管理用户)
|
|
|
|
|
class BlogUserAdmin(UserAdmin):
|
|
|
|
|
# 指定编辑用户时使用的表单
|
|
|
|
|
=======
|
|
|
|
|
|
|
|
|
|
class BlogUserAdmin(UserAdmin):# 3. 自定义用户管理类 (用于定义在 Admin 后台如何管理和显示 BlogUser)
|
|
|
|
|
>>>>>>> psy_branch
|
|
|
|
|
form = BlogUserChangeForm
|
|
|
|
|
# 指定添加用户时使用的表单
|
|
|
|
|
add_form = BlogUserCreationForm
|
|
|
|
|
@ -116,6 +157,7 @@ class BlogUserAdmin(UserAdmin):
|
|
|
|
|
'last_login',
|
|
|
|
|
'date_joined',
|
|
|
|
|
'source')
|
|
|
|
|
<<<<<<< HEAD
|
|
|
|
|
# 列表页中可点击的字段(用于进入详情页)
|
|
|
|
|
list_display_links = ('id', 'username')
|
|
|
|
|
# 默认排序方式(按 ID 降序)
|
|
|
|
|
@ -157,3 +199,7 @@ class BlogUserAdmin(UserAdmin):
|
|
|
|
|
user.save()
|
|
|
|
|
# 返回用户对象
|
|
|
|
|
return user
|
|
|
|
|
=======
|
|
|
|
|
list_display_links = ('id', 'username')# 定义在列表页中,哪些字段可以点击进入详情页
|
|
|
|
|
ordering = ('-id',)# 定义列表页的默认排序字段,'-id' 表示按 ID 降序排列(即最新的用户在最前面)
|
|
|
|
|
>>>>>>> psy_branch
|
|
|
|
|
|