在D:programpython3Django_learningproject>,
在project(创建的项目)目录下,输入python manage.py runserver
启动django服务,想运行django,必须打开它的服务
11、admin站点管理
1、概述
(1)内容发布
负责添加、修改、删除内容------真正是数据库里面的数据(后台有个页面来维护就更简单了)
2、配置admin应用
在settings.py文件中的INSTALLED_APPS中添加django.contrib.admin(里面已经自动有了,可以不用添加)
3、创建管理员,用户
(1)在D:programpython3Django_learningproject>,
在project(创建的项目)目录下,输入python manage.py createsuperuser
(2)接下来
Username (leave blank to use 'dell'): dell#输入你的账号或者用户名
Email address: 11111@qq.com#随便一个,格式得对
Password:#密码,不能太短,输入后,密码不会显示出来
Password (again):#再次输入密码
Superuser created successfully.
(4)运行
(1)在D:programpython3Django_learningproject>,
在project(创建的项目)目录下,输入python manage.py runserver
启动django服务,想运行django,必须打开它的服务
(2)在网站输入网址127.0.0.1:8000/admin/管理界面需要在后面输入admin,在下面相应位置填入你的账号和密码
然后登录
进去之后是这个样子的
(5)将英语汉化
将settings.py文件中的按照下面的更改,更改后,在网站输入http://127.0.0.1:8000/admin/,(不需要重启服务,刷新一下就好了),回车
#LANGUAGE_CODE = 'en-us'换成下面的
LANGUAGE_CODE = 'zh-Hans'
#TIME_ZONE = 'UTC'换成下面的
TIME_ZONE = 'Asia/Shanghai'
如下图
(6)管理数据表
(1)修改admin.py
添加下面的代码
from .models import Grades,Students #想引入的两张表
#注册管理哪个表
admin.site.register(Grades)#班级表的注册
admin.site.register(Students)#学生表的注册
然后刷新‘http://127.0.0.1:8000/admin/’网站
如下图
然后点击Gradess,得到下图,但是不太友好
(2)自定义管理展示页面
1)属性说明
在admin.py文件添加以下内容,其实就是在 (1)代码的基础上进行了添加
from .models import Grades,Students #想引入的两张表
#注册管理哪个表
class GradesAdmin(admin.ModelAdmin):#括号中是继承的admin.ModelAdmin,默认的是ModelAdmin
#列表页属性,下面四个都是
list_display = ['pk','gname','gdate','gnum','isDelete']#显示字段
list_filter = ['gname']#过滤字段
search_fields = ['gname']#搜索字段
list_per_page = 5#每五条是一页
#添加、修改页属性
#下面fields与fieldsets不能同时使用,使用一个注释掉一个
fields = ['gnum','gname','gdate','isDelete']#规定属性的先后顺序,只是修改'增加grades页'的顺序
#fieldsets = [
("num",{"fields":['gnum']}),
("base",{"fields":['gname','gdate','isDelete']}),
]#添加分组,给属性分组
admin.site.register(Grades,GradesAdmin)#班级表的注册,GradesAdmin 添加到里面,才能用到上面这些属性
#和上面部分类似
class StudentsAdmin(admin.ModelAdmin):
list_display = ['pk','sname','sgender','sage','scontend','isDelete']#显示字段
list_per_page = 2#两条为一页
admin.site.register(Students,StudentsAdmin)#学生表的注册
列表页属性,下面四个都是
list_display = [‘pk’,‘gname’,‘gdate’,‘gnum’,‘isDelete’]#显示字段
list_filter = [‘gname’]#过滤字段
search_fields = [‘gname’]#搜索字段
list_per_page = 5#每五条是一页
第一个列表页属性
在admin.py文件下面
list_display = [‘pk’,‘gname’,‘gdate’,‘gnum’,‘isDelete’]#显示字段
刷新网址就可以得到如下图
第二个列表页属性
在admin.py文件下面
list_filter = [‘gname’]#过滤字段
刷新网址就可以得到如下图
第三个列表页属性
在admin.py文件下面
search_fields = [‘gname’]#搜索字段
刷新网址就可以得到如下图
第四个列表页属性
在admin.py文件下面
list_per_page = 5#每五条是一页
刷新网址就可以得到如下图
增加一条数据
里面就增加了一条,如下图:
修改数据
下面是修改页
添加、修改页属性
下面fields与fieldsets不能同时使用,使用一个注释掉一个
fields = [‘gnum’,‘gname’,‘gdate’,‘isDelete’]#规定属性的先后顺序,只是修改 '增加grades页“ 的顺序
fieldsets = []#添加分组,给属性分组
第一个 添加页属性增加页,属性的先后顺序
在admin.py文件下面
fields = [‘gnum’,‘gname’,‘gdate’,‘isDelete’]#规定属性的先后顺序,只是修改 '增加grades页“ 的顺序
刷新网址,点击增加页,如下图
第二个 添加页属性添加页,添加分组,给属性分组
在admin.py文件下面,里面两个元组,一个元组有两个属性,第一个是分组的名,第二个是一个字典----里面有—>组里面有啥属性,而且还用fields 分了顺序
fieldsets = [
(“num”,{“fields”:[‘gnum’]}),
(“base”,{“fields”:[‘gname’,‘gdate’,‘isDelete’]}),
] #添加分组,给属性分组
2)关联对象
下图想要实现需要在models.py文件下添加两行数据
在如下图修改会的到上图的,班级名为输入班级号
def __str__(self):
return self.gname
def __str__(self):
return self.sname
需求:在创建一个班级时可以直接添加几个学生
班级对学生(一对多)
在admin.py文件里面,在原有基础上,添加下面部分内容
代码如下:
from django.contrib import admin
# Register your models here.
from .models import Grades,Students #想引入的两张表
#注册管理哪个表
##admin.TabularInline排布是横向的,admin.StackedInline排布是纵向的
class StudentsInfo(admin.TabularInline):#在建班级的时候可以添加几个学生
model = Students#要创建学生,所以是Students
extra = 2 #一次性创建几个学生
class GradesAdmin(admin.ModelAdmin):#括号中是继承的admin.ModelAdmin,默认的是ModelAdmin
#列表页属性,下面四个都是
inlines=[StudentsInfo]#在建班级的时候可以添加几个学生时需要添加这一行中括号里面是类名
list_display = ['pk','gname','gdate','gnum','isDelete']#显示字段
list_filter = ['gname']#过滤字段
search_fields = ['gname']#搜索字段
list_per_page = 5#每五条是一页
#添加、修改页属性
#下面fields与fieldsets不能同时使用,使用一个注释掉一个
#fields = ['gnum','gname','gdate','isDelete']#规定属性的先后顺序,只是修改'增加grades页'的顺序
fieldsets = [
("num",{"fields":['gnum']}),
("base",{"fields":['gname','gdate','isDelete']}),
]#添加分组,给属性分组
admin.site.register(Grades,GradesAdmin)#班级表的注册,GradesAdmin 添加到里面,才能用到上面这些属性
class StudentsAdmin(admin.ModelAdmin):
list_display = ['pk','sname','sgender','sage','scontend','sgrade','isDelete']#显示字段
list_per_page = 2
admin.site.register(Students,StudentsAdmin)#学生表的注册
之前在admin.py添加了一条代码,一页两条的进行分布
list_per_page = 2
上面添加的一个类中,继承admin.TabularInline排布是横向的,如下图
##admin.TabularInline排布是横向的,admin.StackedInline排布是纵向的
class StudentsInfo(admin.TabularInline):#在建班级的时候可以添加几个学生
model = Students#要创建学生,所以是Students
extra = 2 #一次性创建几个学生
class GradesAdmin(admin.ModelAdmin):#括号中是继承的admin.ModelAdmin,默认的是ModelAdmin
inlines=[StudentsInfo]#在建班级的时候可以添加几个学生时需要添加这一行中括号里面是类名
##admin.TabularInline排布是横向的,admin.StackedInline排布是纵向的
class StudentsInfo(admin.StackedInline):#在建班级的时候可以添加几个学生
model = Students#要创建学生,所以是Students
extra = 2 #一次性创建几个学生
class GradesAdmin(admin.ModelAdmin):#括号中是继承的admin.ModelAdmin,默认的是ModelAdmin
inlines=[StudentsInfo]#在建班级的时候可以添加几个学生时需要添加这一行中括号里面是类名
3)布尔值显示问题(比如学生性别sgender:True是男,False是女)
在StudentsAdmin类下面,新建一个函数gender,记住不能和sgender重名,最最重要的是list_display中’sgender’改成gender,千万记得前者有引号,后者没有引号,否则会报错
class StudentsAdmin(admin.ModelAdmin):
#将显示True改成男,False改为女,在list_display显示字段中将sgender改成定义的函数gender
def gender(self):
if self.sgender:
return "男"
else:
return "女"
list_display = ['pk','sname',gender,'sage','scontend','sgrade','isDelete']#显示字段,
list_per_page = 2
admin.site.register(Students,StudentsAdmin)#学生表的注册
同理,将学生表里所有的英文换成中文,设置页面列的名称
在admin.py中学生类下面添加一些代码
class StudentsAdmin(admin.ModelAdmin):
#将显示True改成男,False改为女,在list_display显示字段中将sgender改成定义的函数gender
def gender(self):
if self.sgender:
return "男"
else:
return "女"
def name(self):
return self.sname
def age(self):
return self.sage
def contend(self):
return self.scontend
def grade(self):
return self.sgrade
def is_Delete(self):
if self.isDelete:
return "是"
else:
return "否"
def P_K(self):
return self.pk
gender.short_description="性别"#设置页面列的名称
name.short_description="姓名"
age.short_description="年龄"
contend.short_description="个人简介"
grade.short_description="所属班级"
is_Delete.short_description="是否删除"
P_K.short_description="序号"
list_display = [P_K,name,gender,age,contend,grade,is_Delete]#显示字段,
代码图片:
最终得到下图:
班级表里所有的英文换成中文,设置页面列的名称
代码如下:
@admin.register(Grades)
class GradesAdmin(admin.ModelAdmin):#括号中是继承的admin.ModelAdmin,默认的是ModelAdmin
#列表页属性,下面四个都是
inlines=[StudentsInfo]#在建班级的时候可以添加几个学生时需要添加这一行中括号里面是类名
def P_K(self):
return self.pk
def name(self):
return self.gname
def date(self):
return self.gdate
def num(self):
return self.gnum
def is_Delete(self):
if self.isDelete:
return "是"
else:
return "否"
P_K.short_description="序号"
name.short_description="班级名"
date.short_description="创建日期"
num.short_description="总人数"
is_Delete.short_description="是否删除"
list_display = [P_K,name,date,num,is_Delete]#显示字段
4)执行动作的位置
在admin.py文件中学生类的最下面下添加修改代码
#执行动作的位置
actions_on_top = False#不在顶部
actions_on_bottom = True#在底部
如下图:
(3)注册,使用装饰器完成注册
定义的类还在,在类上面添加
@admin.register(Students)#括号里面是学生Students
将最后的学生表的注册删除,已经注释掉了
#admin.site.register(Students,StudentsAdmin)#学生表的注册
班级类同理:
添加
@admin.register(Grades)#括号里面是班级Grades
删除下面的,已经注释掉了
#admin.site.register(Grades,GradesAdmin)#班级表的注册,GradesAdmin 添加到里面,才能用到上面这些属性