一个项目有端的概念,例如商城系统,用户看到的是用户端,公司有自己的后台端口,商家的端口
后台管理介绍
Django中默认集成了后台数据管理页面,通过简单的配置就可以实现模型后台的Web控制台。
管理界面通常是给系统管理员使用的,用来完成数据的输入,删除,查询等工作。
如果没有集成可在settings中的INSTALLED_APPS中添加django.contrib.admin
默认在url后加admin界面就可进入django自带的管理登录界面:
创建管理员账号
django提供了终端快速创建管理员账号的命令
创建账号的命令:
python manage.py createsuperuser
结果如下:
(venv) E:\djstudy\day15\RESTend>python manage.py createsuperuser
Username (leave blank to use 'justin'): peiqi
Email address: peiqi@qq.com
Password:
Password (again):
Superuser created successfully.
后台管理功能
登录刚刚注册的账号
如果需要改成中文,改动settings.py中下面的配置;
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
点击task results:
可以看到之前celery异步任务详情,并且可以修改/删除/新建任务,其他的模型也可以进行类似这样的操作。
添加自己的模型到管理界面
django内置的模型有:用户、组。
如果要管理自己的模型,使用admin.site.register()
在项目的admin.py中注册一下对应的模型即可。
from django.contrib import admin
from App.models import UserModel, Address
admin.site.register(UserModel)
admin.site.register(Address)
查看管理界面:
点击User models查看详情
可以看到这里只显示UserModel object,而不是显示的具体的名字。
管理列表显示具体信息
可以重写model.py中的UserModel模型中的__str__方法:
from django.db import models
class UserModel(models.Model):
u_name = models.CharField(max_length=16,unique=True)
u_password = models.CharField(max_length=256)
def __str__(self):
return self.u_name
class Address(models.Model):
a_address = models.CharField(max_length=128)
a_user = models.ForeignKey(UserModel, related_name='address_list',on_delete=models.CASCADE,null=True,blank=True)
def __str__(self):
return self.a_address
观察页面:
成功。
个性化后台管理
如果感觉默认的站点样式不能满足应用需求,则开发者可以通过继承Django定义的管理员数据模型,模板,站点类来开发出个性化的管理员站点。
在admin.py中先创建自己的管理类(该管理类要继承系统的管理类),然后添加自己的管理类。
创建并添加管理类
创建管理类模板
class UserAdmin(admin.ModelAdmin):
# 规则
个性化规则
显示规则:
- list_display 显示字段
- list_filter 过滤字段
- search_fields 搜索字段
- list_per_page 分页,每页显示多少条数据,默认每页20条
- ordering 排序规则
分组显示
fields=(('班级',{'fields':('sgrade')}),('姓名',{'fields':('sname')}))
修改规则
- fields 显示的字段
- exclude 不显示的字段
显示、过滤、分页器
from django.contrib import admin
from App.models import UserModel, Address
class UserAdmin(admin.ModelAdmin):
list_display = 'u_name', 'u_password' # 显示字段
search_fields = ['u_name'] # 搜索字段
list_filter = ['u_name'] # 过滤字段
list_per_page = 5
admin.site.register(UserModel, UserAdmin) # 添加自己的管理类
admin.site.register(Address)
- 6-10行创建自定义管理类
- 13行添加管理类
页面显示:
布尔值定制显示,列属性名称修改
之前的模型太简单,现在在sendemail中创建新的模型:
from django.db import models
class Grade(models.Model):
g_name= models.CharField(max_length=16)
g_position = models.CharField(max_length=20)
class Student(models.Model):
s_name = models.CharField(max_length=32)
s_age = models.IntegerField(default=8)
s_sex = models.BooleanField(default=False)
s_height = models.FloatField(default=1)
s_weight = models.FloatField(default=1)
s_grade = models.ForeignKey(Grade, on_delete=models.CASCADE)
迁移数据库。
sendemail中的admin.py:
from django.contrib import admin
from sendemail.models import Grade, Student
class GradeAdmin(admin.ModelAdmin):
list_display = ['g_name','g_position']
class StudentAdmin(admin.ModelAdmin):
list_display = ['s_name', 's_age', 's_sex']
admin.site.register(Grade,GradeAdmin)
admin.site.register(Student,StudentAdmin)
访问页面:
可以看到性别只显示了布尔值,可以在list_display的时候传递一个函数:
from django.contrib import admin
from sendemail.models import Grade, Student
class GradeAdmin(admin.ModelAdmin):
list_display = ['g_name','g_position']
admin.site.register(Grade,GradeAdmin)
class StudentAdmin(admin.ModelAdmin):
def sex(self):
if self.s_sex:
return '女'
else:
return '男'
sex.short_description = '性别' # 修改列属性名称
list_display = ['s_name', 's_age', sex]
admin.site.register(Student,StudentAdmin)
- 11-15行传递了一个函数,根据布尔值返回性别名称。
- 16行修改列属性名称
分组显示
修改具体信息时,可以将信息划分为不同类别
原始修改Student页面:
添加分组现实:
class StudentAdmin(admin.ModelAdmin):
def sex(self):
if self.s_sex:
return '女'
else:
return '男'
sex.short_description = '性别' # 列属性名称修改
list_display = ['s_name', 's_age', sex]
# 分组显示
fieldsets = (
('基本信息',{'fields':('s_name','s_age','s_sex')}),
('可选信息',{'fields':('s_height','s_weight')}),
)
admin.site.register(Student,StudentAdmin)
- 10-13行分组显示
后台级联插入数据
例如添加班级时,同时插入两个学生。
admin.py:
class StudentInfo(admin.TabularInline):
extra = 3 # 插入班级时,需要级联数据的数量,也就是需要填写学生信息的数量
model = Student # 绑定Student模型
class GradeAdmin(admin.ModelAdmin):
list_display = ['g_name','g_position']
inlines = [StudentInfo] # 使用inlines,后面填写级联的类名
- 使用inlines级联对应的类
测试:
在创建新的grade的时候,会要求填入3个学生信息
以上就是入门使用,可以看到功能还是比较强大的,可以定制很多小细节。
此处评论已关闭