一、关于Django后台管理
1.框架自动生成的后台管理
2.从ORM模型中读取元数据,简单配置即可使用
3.功能强大,可以用于对数据库中数据的管理
二、实现步骤
第一步:框架部分的配置
步骤一、INSTALLED_APPS配置应用及依赖
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
]
步骤二、模板选项配置TEMPLATES中的OPTIONS
添加上下文处理器:context_processors
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates']
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
# 底下这两个
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
步骤三、添加中间件MIDDLEWARE
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
# 这个
'django.contrib.auth.middleware.AuthenticationMiddleware',
# 和这个
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
步骤四、配置URL
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
]
第二步,ORM模型中配置
步骤1:在模块下新建admin.py文件
步骤2:封装模型自定义的管理后台功能和选项
每个模型创建一个ModelAdmin的子类
ModelAdmin配置选项
- fields/exclude ---- 需要编辑/不需要编辑的字段列表
- form ---- 自定义表单
- list_display ---- 在列表中显示的字段
- ordering --- 指定排序规则
步骤3:INSTALLED_APPS配置应用
需要管理的ORM模型自动搜索添加至后台管理
'accounts.app.AccountsConfig',
'system.appSystemConfig'
三、使用admin的一些优化配置
3.1、后台管理配置为中文
配置语言
LANGUAGE_CODE = 'zh-hans'
配置时区
TIME_ZONE = 'Asia/Shanghai'
模型
verbose_name = '用户详细信息'
3.2 查询速度优化
分析问题
1.减少每页的数据大小
2.减少SQL查询的次数
解决思路
list_per_page ---- 分页大小,默认每页100条
list_select_related ---- 外键关联查询优化
3.3 格式化显示字段内容
@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
"""用户详细信息表"""
list_display = ('format_username','sex','age','created_at')
list_per_page = 5
list_select_related = ('user',)
def format_username(self,obj):
# 用户名脱敏处理
return obj.username[:3] + '***'
format_username.short_description = '用户名'
3.4、快捷搜索
list_filter = ('sex',) 配置一些有choices的一些字段
3.5、 关联搜索
场景:按用户名、昵称搜索用户
search_fields --- 支持搜索的字段
四、自定义模型配置
- 定制个性化的列表显示字段
- 限制可以编辑的模型字段
# 表单中可以编辑的字段,写进field中的可以编辑 fields = ('real_name','email','phone_no','sex','age')
- 自定义后台模型的表单验证
# form中定义表单
class ProfileEditForm(forms.ModelForm):
"""用户详细信息编辑"""
class Meta:
model = Profile
fields = ('real_name','email','phone_no','sex','age')
def clean_age(self):
age = self.cleaned_data['age']
if int(age) >= 120 or int(age) <= 1:
raise forms.ValidationError('年龄只能在1-120之间')
return age
form = ProfileEditForm # admin.py中引用
- 重写保存方法,执行其他业务逻辑
class ProfileEditForm(forms.ModelForm):
"""用户详细信息编辑"""
class Meta:
model = Profile
fields = ('real_name','email','phone_no','sex','age')
def clean_age(self):
age = self.cleaned_data['age']
if int(age) >= 120 or int(age) <= 1:
raise forms.ValidationError('年龄只能在1-120之间')
return age
# 重写save方法
def save(self, commit=False):
obj = super().save(commit)
# 保存数据做其他处理
if not obj.source:
obj.source = 'web'
obj.save()
return obj
- 新增批量操作功能
@admin.register(User)
class MyUserAdmin(UserAdmin):
"""用户基础信息管理"""
# 列表中显示的内容
list_display = ('username','nickname','is_active','is_staff','date_joined')
# 搜索字段
search_fields = ('username','nickname')
# 新增的字段
add_fieldsets = UserAdmin.add_fieldsets + (
(None,{'fields':('nickname',)}),
)
# 修改的表单
fieldsets = UserAdmin.fieldsets + (
(None,{'fields':('nickname','avatar')}),
)
actions = ['disable_user','enable_user']
# 批量禁用用户
def disable_user(self,request,queryset):
queryset.update(is_active=False)
disable_user.short_description = '批量禁用用户'
def enable_user(self,request,queryset):
"""批量启用用户"""
queryset.update(is_active=True)
enable_user.short_description = '批量启用用户'
五、在admin中使用富文本
在django项目中安装富文本扩展
django-ckeditor