超级用户
这样强大的功能,使用前我们先创建一个超级用户
$ python manage.py createsuperuser
依次输入用户名(123456789)、邮箱(12345678@qq.com)、密码(00000000) 创建后在网址输入账号密码:http://127.0.0.1:8000/admin/
Admin后台管理
在前面的章节中,我们已经完成网站页面的基本开发,接下来讲述网站的Admin后台系统开发。Admin后台系统主要方便网站管理员管理网站的数据和网站用户。由于项目应用index和user分别定义了模型Label、Song、Dynamic、Comment和MyUser,并且index和user是两个独立的项目应用,因此在Admin后台系统中需要区分两个功能模块。
下一步为每个模型设置相应的ModelAdmin,在Admin后台系统中设置每个模型的数据操作功能,分别在index和user的admin.py中编写以下代码:
index的admin.py
from django.contrib import admin
from .models import *
@admin.register(Label)
class LabelAdmin(admin.ModelAdmin):
# 设置模型字段,用于Admin后台数据的列名设置
list_display = ['id', 'name']
# 设置可搜索的字段并在Admin后台数据生成搜索框
# 如有外键应使用双下划线连接两个模型的字段
search_fields = ['name']
# 设置排序方式
ordering = ['id']
@admin.register(Song)
class SongAdmin(admin.ModelAdmin):
# 设置模型字段,用于Admin后台数据的列名设置
list_display = ['id', 'name', 'singer', 'album', 'languages', 'release', 'img', 'lyrics', 'file']
# 设置可搜索的字段并在Admin后台数据生成搜索框
# 如有外键应使用双下划线连接两个模型的字段
search_fields = ['name', 'singer', 'album', 'languages']
# 设置过滤器,在后台数据的右侧生成导航栏
# 如有外键应使用双下划线连接两个模型的字段
list_filter = ['singer', 'album', 'languages']
# 设置排序方式
ordering = ['id']
@admin.register(Dynamic)
class DynamicAdmin(admin.ModelAdmin):
# 设置模型字段,用于Admin后台数据的列名设置
list_display = ['id', 'song', 'plays', 'search', 'download']
# 设置可搜索的字段并在Admin后台数据生成搜索框
# 如有外键应使用双下划线连接两个模型的字段
search_fields = ['song']
# 设置过滤器,在后台数据的右侧生成导航栏
# 如有外键应使用双下划线连接两个模型的字段
list_filter = ['plays', 'search', 'download']
# 设置排序方式
ordering = ['id']
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
# 设置模型字段,用于Admin后台数据的列名设置
list_display = ['id', 'text', 'user', 'song', 'date']
# 设置可搜索的字段并在Admin后台数据生成搜索框
# 如有外键应使用双下划线连接两个模型的字段
search_fields = ['user', 'song', 'date']
# 设置过滤器,在后台数据的右侧生成导航栏
# 如有外键应使用双下划线连接两个模型的字段
list_filter = ['song', 'date']
# 设置排序方式
ordering = ['id']
user的admin.py
from django.contrib import admin
from .models import MyUser
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy as _
@admin.register(MyUser)
class MyUserAdmin(UserAdmin):
list_display = ['username', 'email', 'mobile', 'qq', 'wechat']
# 在用户修改页面添加'mobile','qq','weChat'
# 将源码的UserAdmin.fieldsets转换成列表格式
fieldsets = list(UserAdmin.fieldsets)
# 重写UserAdmin的fieldsets,添加'mobile','qq','weChat'
fieldsets[1] = (_('Personal info'), {'fields': ('first_name', 'last_name', 'email', 'mobile', 'qq', 'wechat')})
在上述代码中,LabelAdmin、SongAdmin、DynamicAdmin和CommentAdmin设置了属性list_display、search_fields、list_filter和ordering;而MyUserAdmin设置了属性list_display和fieldsets,并且重写fieldsets。
由于模型MyUser继承内置模型User,因此将MyUserAdmin继承UserAdmin即可使用内置模型User在Admin后台系统的功能,并且通过重写方式将模型MyUser的新增字段添加到Admin后台系统中。