You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
software_DjangoBlog/src/accounts/admin.py

85 lines
3.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from django import forms
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserChangeForm
from django.contrib.auth.forms import UsernameField
from django.utils.translation import gettext_lazy as _
# 注册模型到Django管理后台
from .models import BlogUser
# 自定义用户创建表单用于在Django管理后台创建新用户
class BlogUserCreationForm(forms.ModelForm):
# 定义两个密码字段,分别用于输入密码和确认密码
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):
"""
验证两个密码输入是否一致
"""
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):
"""
保存用户实例,并将密码以哈希格式存储
"""
user = super().save(commit=False) # 获取未保存的用户实例
user.set_password(self.cleaned_data["password1"]) # 设置哈希密码
if commit:
user.source = 'adminsite' # 设置用户来源为管理后台
user.save() # 保存用户实例到数据库
return user
# 自定义用户修改表单用于在Django管理后台修改用户信息
class BlogUserChangeForm(UserChangeForm):
class Meta:
# 指定表单对应的模型
model = BlogUser
# 表单中包含的所有字段
fields = '__all__'
# 自定义字段类型
field_classes = {'username': UsernameField}
def __init__(self, *args, **kwargs):
"""
初始化表单
"""
super().__init__(*args, **kwargs)
# 自定义用户管理类用于在Django管理后台管理用户
class BlogUserAdmin(UserAdmin):
form = BlogUserChangeForm
add_form = BlogUserCreationForm
list_display = (
'id',
'nickname',
'username',
'email',
'last_login',
'date_joined',
'source'
)
list_display_links = ('id', 'username')
ordering = ('-id',)
search_fields = ('username', 'nickname', 'email')
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('email', 'nickname')}),
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)