详细介绍如何使用Django的后台管理Admin
后台管理一个网站分为前台(普通用户访问)和管理后台(由网站管理员访问)两部分管理后台由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块 使用Django的管理模块,需要按照如下步骤操作管理界面本地化创建管理员注册模型类自定义管理页面操作演示:1)本地化 (语言和时区)修改settings.py文
后台管理
一个网站分为前台(普通用户访问)和管理后台(由网站管理员访问)两部分
管理后台由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块 使用Django的管理模块,需要按照如下步骤操作
- 管理界面本地化
- 创建管理员
- 注册模型类
- 自定义管理页面
操作演示:
1)本地化 (语言和时区)
修改settings.py文件。
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans' # 指定语言(注意不要写错,否则无法启动服务器)
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai' # 指定时间
2)创建登录后台的管理员
python3 manage.py createsuperuser
需要指定: 用户名,邮箱,密码
3)注册模型类
在应用下的admin.py中注册模型类:告诉djang框架,根据注册的模型类来生成对应表管理页面:
# app01/admin.py:
from app01.models import Department, Employee
# 注册Model类
admin.site.register(Department)
admin.site.register(Employee)
4) 启动服务器:
python manage.py runserver
在浏览器上输入以下地址,进入管理后台,对数据库表数据进行管理:
http://127.0.0.1:8000/admin
5)自定义数据模型显示哪些字段信息
自定义模型管理类,作用:告诉django在生成的管理页面上显示哪些内容。
# app01/admin.py:
class DepartmentAdmin(admin.ModelAdmin):
# 指定后台网页要显示的字段
list_display = ["id", "name", "create_date"]
class EmployeeAdmin(admin.ModelAdmin):
# 指定后台网页要显示的字段
list_display = ["id", "name", "age", "sex", "comment"]
# 注册Model类
admin.site.register(Department, DepartmentAdmin)
admin.site.register(Employee, EmployeeAdmin)
Admin站点
内容发布的部分由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块,在Django项目中默认启用Admin管理站点。
后台管理准备工作
-
数据库配置:
- 配置数据库
- mysql中创建数据库:db_django05
- 在项目的__init__文件中import pymysql包
-
模型操作
-
创建Area区域模型类;
class Area(models.Model): """地区类""" title = models.CharField(max_length=50) # 外键: 自关联 parent = models.ForeignKey('self', null=True, blank=True)
-
生成迁移文件,再作迁移生成数据库表;
- 插入测试数据: source area.sql (资料中提供)
-
-
admin后台管理操作
-
创建后台管理器账号
python manage.py createsuperuser
按提示填写用户名、邮箱、密码,确认密码。
-
注册模型类: 要在后台要能看到模型类表,需要在admin.py中注册模型类
from django.contrib import admin from models import * admin.site.register(Area)
-
登录到后台: 通过
http://127.0.0.1:8000/admin/
访问服务器: 输入刚创建的用户名和密码,登录到后台管理界面,登录成功可以看到如下,可以对Area进行增加、修改、删除、查询的管理操作:
-
列表页选项
类ModelAdmin可以控制模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式。
在app01/admin.py中,注册模型类前定义管理类AreaAdmin
class AreaAdmin(admin.ModelAdmin):
pass
打开app01/admin.py文件,注册模型类代码如下
admin.site.register(AreaInfo, AreaAdmin)
接下来介绍如何控制列表页、增加修改页展示效果
-
每页显示多少条
打开booktest/admin.py文件,修改AreaAdmin类如下:
class AreaAdmin(admin.ModelAdmin): list_per_page = 10 # 默认为100条
在浏览器中查看区域信息的列表页面,效果如下图:
设置操作选项的位置
# app01/admin.py
class AreaAdmin(admin.ModelAdmin):
...
# 显示顶部的选项
actions_on_top = True
# 显示底部的选项
actions_on_bottom = True
在浏览器中刷新效果如下图:

列表中的列操作
-
定义列表中要显示哪些字段
# app01/admin.py class AreaAdmin(ModelAdmin): # 定义列表中要显示哪些字段 list_display = ['id', 'title']
-
点击列头可以进行升序或降序排列
-
模型类中定义的方法也可以作为列显示(通过此方式可访问关联对象的属性)
# models.py class Area(models.Model): """区域显示""" ... def parent_area(self): """返回父级区域名""" if self.parent is None: return '' return self.parent.title
注册列:
class AreaAdmin(ModelAdmin): ... # 定义列表中要显示哪些字段(也可以指定方法名) list_display = ['id', 'title', 'parent_area']
修改显示的列的名字
列标题默认为属性或方法的名称,可以通过属性设置。对于模型属性,通过verbose_name
设置,对于方法,通过short_description
设置,如下:
# models.py
class Area(models.Model):
"""区域显示"""
# 设置verbose_name属性
title = models.CharField(verbose_name='名称', max_length=30) # 区域名
def parent_area(self):
"""返回父级区域名"""
if self.parent is None:
return ''
return self.parent.title
# 指定方法列显示的名称
parent_area.short_description = '父级区域'
# 方法列默认不能排序,需要指定方法列按id进行排序
parent_area.admin_order_field = 'id'
右侧栏过滤器
使用list_filter
指定过滤,只能接收字段,会将对应字段的值列出来,用于快速过滤。一般用于有重复的字段。
# admin.py
class AreaAdmin(ModelAdmin):
...
# 右侧栏过滤器
list_filter = ['title']
刷新效果如下:

搜索框
使用search_fields
属性, 对指定字段的值进行搜索,支持模糊查询
# admin.py
class AreaAdmin(ModelAdmin):
...
# 要搜索的列的值
search_fields = ['title']
刷新效果如下:

编辑页选项
-
显示字段顺序
# admin.py class AreaAdmin(ModelAdmin): ... # 表单中字段显示的顺序 fields = ['parent', 'title']

修改对象显示的字符串: 重写__str__方法
# models.py
class Area(models.Model):
"""区域显示"""
...
# 重写方法
def __str__(self):
return self.title
刷新效果如下:

字段分组显示
格式如下:
fieldsets=(
('组1标题',{'fields':('字段1','字段2')}),
('组2标题',{'fields':('字段3','字段4')}),
)
注意:fieldsets和fields,只能使用其中的一个
代码:
# admin.py
class AreaAdmin(ModelAdmin):
...
# 字段分组显示
fieldsets = (
('基本', {'fields': ('title',)}),
('高级', {'fields': ('parent',)}),
)
编辑关联对象
- 在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种
- 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑
- 子类TabularInline:以表格的形式嵌入
- 子类StackedInline:以块的形式嵌入
在app01/admin.py文件中添加如下代码:
class AreaStackedInline(admin.StackedInline):
model = AreaInfo # 关联子对象(多类对象)
class AreaAdmin(admin.ModelAdmin):
...
inlines = [AreaStackedInline]

下面再来看下表格的效果:
class AreaTabularInline(TabularInline):
model = Area # 多类的名字
...
class AreaAdmin(admin.ModelAdmin):
...
inlines = [AreaTabularInline]
刷新效果如下:

修改预留新增选项
class AreaTabularInline(TabularInline):
...
extra = 2 # 额外预留新增选项默认为3个

重写后台管理模板
-
进入到django的admin应用的模板目录,如下:
/home/python/.virtualenvs/py_django/lib/python2.7/site-packages/django/contrib/admin/templates/admin
找到
base-site.html
文件,复制到当前项目的templates/admin
目录下(admin目录需要自行创建出来)
修改base-site.html
内容:
新增一行代码,如下图:

刷新结果:
choices选项和富文本编辑器
一、choices选项使用
-
创建测试模型类
# apps/user/models.py class TestModel(models.Model): """测试""" ORDER_STATUS_CHOICES = ( (1, "待支付"), (2, "待发货"), (3, "待收货"), (4, "待评价"), (5, "已完成"), ) status = models.SmallIntegerField(default=1, verbose_name='订单状态', choices=ORDER_STATUS_CHOICES) class Meta(object): db_table = 'df_test' # 指定模型在后台显示的名称 verbose_name = '测试模型' # 去除后台显示的名称默认添加的 's' verbose_name_plural = verbose_name
-
在后台注册
# apps/users/admin.py from django.contrib import admin from apps.users.models import TestModel admin.site.register(TestModel)
-
创建django后台登录账号,并登录到后台

二、富文本编辑器使用
HTMLField富文本控件的显示效果:
使用方式:
-
安装依赖:
pip install django-tinymce==2.6.0
-
setting.py
文件中配置INSTALLED_APPS = ( ... 'tinymce', # 使用应用 ) # 配置控件显示样式 TINYMCE_DEFAULT_CONFIG = { 'theme': 'advanced', # 丰富样式 'width': 600, 'height': 400, }
-
项目/urls.py
中配置urlimport tinymce.urls urlpatterns = [ ... # 包含tinymce urls配置文件 url(r'^tinymce/', include('tinymce.urls')), ]
-
在模型类中使用HTMLField
class TestModel(models.Model): """测试""" # 富文本控件 desc = HTMLField(verbose_name='商品描述', null=True) ...
-
重新迁移数据库,登录到后台进行测试
三、修改 GoodsSPU
模型类的商品详情
-
把GoodsSPU模型类的 商品详情 字段类型 改为 HTMLField 类型
class GoodsSPU(BaseModel): """商品SPU表""" desc = HTMLField(verbose_name="商品描述", default="", blank=True) ...
-
重新迁移数据库,生成表
-
注册:
GoodsSPU
模型类,让它在后台显示,使用富文本录入 商品详情# 注册模型类,让它在后台显示 from apps.goods.models import GoodsSPU admin.site.register(GoodsSPU)
联系方式
QQ :1217675462
欢迎交流
更多推荐
所有评论(0)