11-Django站点管理
站点管理
- 内容发布的部分由网站的管理员负责,包括查看、添加、修改、删除数据
- 开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块
- 在Django项目中默认启用Admin管理站点
- 列表页选项
- 编辑页选项
- 重写模板
1、启动mysql数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'bookdb',
'HOST': 'localhost',
'PORT': '',
'USER': 'root',
'PASSWORD': '',
}
}
2、models.py文件中,定义模型类(没有迁移数据表的需要线迁移数据表)
python manage.py makemigrations python manage.py migrate
from django.db import models # Create your models here.
#创建作者信息表
class Authors(models.Model):
name = models.CharField(max_length=20)#作者名字
gender = models.BooleanField(default=True)#性别
age = models.IntegerField()#年龄
addr = models.CharField(max_length=60)
tel = models.IntegerField()
#元类修改表名
class Meta:
db_table = "authors"
def __str__(self):
return self.name
#创建书籍信息
class Books(models.Model):
name = models.CharField(max_length=20)#书名
pub_data = models.DateField(null=True)#出版日期
#参数max_digits表示总位数 参数decimal_places表示小数位数
price = models.DecimalField(max_digits=8,decimal_places=2)#价格
publish = models.CharField(max_length=20)
#外键 将字段定义在多的一端中 级联删除
author = models.ForeignKey(Authors,on_delete=models.CASCADE)
#修改表名(元类)
class Meta:
db_table = "books" def __str__(self):
return self.name
3、创建管理员的用户名和密码
python manage.py createsuperuser
4、在admin.py文件中将书籍与作者类名注册到后台站点
from django.contrib import admin
from Book.models import *
# Register your models here.
admin.site.register(Authors) #为了让站点显示书籍完整信息,需要重新注册模型类
class BookAdmin(admin.ModelAdmin):
list_display = ["id","name","pub_data","price","publish","author_id"] admin.site.register(Books,BookAdmin)
5、输入网址http://127.0.0.1:8000/admin/登录后台站点
进去就可以查看、添加、修改、删除操作
6、重写模型的__str__显示各个模型类的name(我上面已经写出来了)
# 在站点显示name而不是模型类对象
def __str__(self):
return self.name.encode('utf-8')
控制站点管理页的展示
类ModelAdmin可以控制模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式
1、注册参数:
#为了让站点显示书籍完整信息,需要重新注册模型类
class BookAdmin(admin.ModelAdmin):
list_display = ["id","name","pub_data","price","publish","author_id"] admin.site.register(Books,BookAdmin)

2、注册装饰器
@admin.register(Books)
class BookAdmin(admin.ModelAdmin):
pass
接下来就可以在类BookAdmin中控制列表页、增加修改页展示效果(例如注册参数的例子)
1、列表页选项
页大小:指定每页多少条数据,默认为每页显示100条数据
list_per_page = 5
#为了让站点显示书籍完整信息,需要重新注册模型类
class BookAdmin(admin.ModelAdmin):
list_display = ["id","name","pub_data","price","publish","author_id"]
#在管理站点页大小,指定每页5条
list_per_page = 5
admin.site.register(Books,BookAdmin)

操作选项Action(动作)的位置(默认在管理页的顶部有一个,管理页底部每页)
actions_on_top = True action_on_bottom = False
#为了让站点显示书籍完整信息,需要重新注册模型类
class BookAdmin(admin.ModelAdmin):
list_display = ["id","name","pub_data","price","publish","author_id"]
#在管理站点页大小,指定每页5条
list_per_page = 5
#在底部新加一个Action
actions_on_bottom = True
admin.site.register(Books,BookAdmin)

列表中的列:
list_display=[字段1, 字段2, ...]
#为了让站点显示书籍完整信息,需要重新注册模型类(列表中的列)
class BookAdmin(admin.ModelAdmin):
list_display = ["id","name","pub_data","price","publish","author_id"] admin.site.register(Books,BookAdmin)
模型方法作为列(地区示例:复制过来的):
模型方法和模型字段都指定为列显示在管理界面上
模型方法作为列无法直接点击列头排序,如果需要排序需要为方法指定排序依据
# 定义AreaInfo模型方法作为列
def title(self):
return self.name
list_display = ['id', 'name', 'parent', 'title']
浏览效果

方法作为列排序:指定方法作为列的排序依据
# 定义模型方法作为列
def title(self):
return self.name
# 指定方法作为列的排序依据
title.admin_order_field = 'name'
***列标题:
- 列标题默认为属性或方法的名称,可以通过属性设置为其他名称
列标题的设置方式
- 1.
short_description属性设置 - 2.
verbose_name属性设置
- 1.
short_description属性设置需要先将模型字段封装成方法,再对方法使用这个属性,模型字段不能直接使用
short_description属性 方法名.short_description = '列标题'
# 定义模型方法作为列
def title(self):
return self.name
# 指定方法作为列的排序依据
title.admin_order_field = 'name'
# 修改模型title方法作为列的标题名称
title.short_description = '区域名称'verbose_name属性设置定义模型字段时指定该属性的值
# 地区列表信息
class AreaInfo(models.Model):
name = models.CharField(verbose_name='地区标题', max_length=30) #名称
parent = models.ForeignKey('self',null=True,blank=True) #关系 # 元类信息 :修改表名
class Meta:
db_table = 'areainfo'
浏览效果

右侧栏过滤器
只能接收字段,会将对应字段的值列出来,用于快速过滤,一般用于有重复值的字段
list_filter = ['字段1', '字段2', ...]
class AreaAdmin(admin.ModelAdmin):
# 右侧栏过滤器
list_filter = ['name']浏览效果

搜索框
用于对指定字段的值进行搜索,支持模糊查询
search_fields = ['字段1', '字段2', ...]
class AreaAdmin(admin.ModelAdmin):
# 搜索框
search_fields = ['name']浏览效果


2、编辑页选项
进入编辑页面


字段顺序
根据列表顺序指定编辑界面字段顺序
fields = ['字段1', '字段2', ...]
class AreaAdmin(admin.ModelAdmin):
# 显示字段顺序
fields = ['parent', 'name']浏览效果

字段分组
- 字段分组
fieldsets与字段顺序fields二选一使用 对字段进行分组管理,有如下两种写法
fieldsets = (
('组1标题', {'fields':('字段1', '字段2')}),
('组2标题', {'fields':('字段3', '字段4')}),
)
fieldsets = [
('组1标题', {'fields':['字段1', '字段2']}),
('组2标题', {'fields':['字段3', '字段4']}),
]
class AreaAdmin(admin.ModelAdmin):
# 字段分组:与fields二选一使用
fieldsets = [
('基本', {'fields':['name']}),
('高级', {'fields':['parent']}),
]浏览效果

关联对象
- 在一对多的关系中,可以在一端的编辑页面中编辑多端的对象
- 嵌入多端对象的方式包括表格、块两种
- 类型
InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑- 子类
StackedInline:以块的形式嵌入 - 子类
TabularInline:以表格的形式嵌入
- 子类
在
admin.py文件中,创建AreaStackedInline类,继承自admin.StackedInlineclass AreaStackedInline(admin.StackedInline):
model = AreaInfo #关联子对象
extra = 2 #额外编辑2个子对象
class AreaAdmin(admin.ModelAdmin):
# 嵌入关联子对象
inlines = [AreaStackedInline]浏览效果:以块形式嵌入

浏览效果:以列表形式嵌入

以上站点管理的素材以及教程来源于github:记录下来,以便需要时能迅速查阅,翻看。
3、重写模板
当我们需要修改站点管理页面的样式时,可以重写站点的模板
步骤:
1、在templates目录下创建admin目录

2、打开当前虚拟环境中的Django目录,在向下找到站点页面的模板

代码如下:
{% extends "admin/base.html" %}
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
{#<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>#}
{# 自定义内容 #}
<h1 id="site-name"><a href="{% url 'admin:index' %}">welcome use manage!!!</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}


11-Django站点管理的更多相关文章
- django站点管理
一.启动django站点管理功能 1.关于django.contrib包 包含了django自带的众多附加组件,主要包括: 1)管理工具: django.contrib.admin 2)用 ...
- Django笔记 —— Admin(Django站点管理界面)
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Django项目实践4 - Django站点管理(后台管理员)
http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...
- Django站点管理--ModelAdmin
class AuthorAdmin(admin.ModelAdmin): list_display=('name', 'age', 'sex') #指定要显示的字段 search_fields=('n ...
- django中的站点管理
所谓网页开发是有趣的,管理界面是千篇一律的.所以就有了django自动管理界面来减少重复劳动. 一.激活管理界面 1.django.contrib包 django自带了很多优秀的附加组件,它们都存在于 ...
- [译]MVC网站教程(三):动态布局和站点管理
目录 1. 介绍 2. 软件环境 3. 在运行示例代码之前(源代码 + 示例登陆帐号) 4. 自定义操作结果和控制器扩展 1) OpenFileResult 2) ImageR ...
- Django项目实践4 - Django网站管理(后台管理员)
http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...
- django后台管理-ModelAdmin对象
Django最强大的部分之一是自动生成的管理后台界面. 它从你的模型中读取元数据,以提供一个快速的.以模型为中心的界面,信任的用户可以在这里管理你网站上的内容. 建议管理后台仅作为组织的一个内部管理工 ...
- Django admin 管理工具
admin 组件的使用 Django 提供了基于 web 的管理工具.Django 自动管理工具是 django.contrib 的一部分. INSTALLED_APPS = [ 'django.co ...
- django 用户管理相关的表
Django 用户管理相关的表: create table django_content_type ( /* 内容类型表 */ id ) not null auto_increment, app_la ...
随机推荐
- [PHP] Workerman中的注册树模式
注册树模式是把对象挂到一个类的属性数组里,下次直接在这个数组里面取,保持全局唯一,一般在项目入口初始化的时候有用到.在workerman中一开始的就是个注册树模式的运用,下面是对他的模拟 <?p ...
- 池化技术(二)HikariCP是如何管理数据库连接的?
基于依赖程序的版本信息:HikariCP:3.3.1 驱动程序mysql-connector-java:8.0.17 上一篇:Druid是如何管理数据库连接的 零.类图和流 ...
- 误区以为父组件render一次,子组件会重新初始化
初学react的时候我有一个误区,以为父组件render的一次,会将子组件先卸载,再将子组件重新初始化,事实证明不是. 这是对react生命周期函数不太清楚. 父子组件都初始化后,父组件再render ...
- 网页前端之CSS学习记录总结篇
标签: 块级标签block:div, p, h1-h6, ul, ol,li, dl, dt, dd,table,tr等,独占一行,可以设置宽高,默认是父标签的100%:行内标签inline:a,sp ...
- linux的装配与虚拟机的快照
一.科普 1969年,“c语言之父”,“b语言之父”,ken Thompson,开发了一个叫unics系统,是unix系统的雏形,只不过此时的UNICS是用汇编语言写的.移植到其它计算机上需要改很多源 ...
- [译]Vulkan教程(05)Instance
[译]Vulkan教程(05)Instance Creating an instance 创建一个instance The very first thing you need to do is ini ...
- 你可能会忽略的 Git 提交规范
一.为什么需要规范? 无规矩不成方圆,编程也一样. 如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你.可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目 ...
- Java入门系列之包装类(四)
前言 上一节我们讲解了StringBuilder VS StringBuffer以及二者区别,本节我们来讲解包装类. 包装类 我们知道在Java中有8中基本数据类型,分为数值类型:byte.short ...
- 墙上你APP设计与实现
墙上你APP,听名字你们就应该可以想到是一个类似于表白墙吧,其实在做这个项目的时候我就是看到我们学校有一个专门工程墙,但是你找它发布消息表白或者找寻自己在学校掉了的饭卡或者身份证的时候,需要等它们同意 ...
- Cobalt Strike系列教程第四章:文件/进程管理与键盘记录
Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...