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 ...
随机推荐
- MySQL数据库~~~~~锁和事务
一 锁 innodb存储引擎默认是行级锁 行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的.由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予 ...
- IDEA生成可执行的jar文件
场景 用IDEA开发一个Java控制台程序,项目完成后,打包给客户使用. 做法 首先用IDEA打开要生成jar的项目,打开后选择File->Project Structure... 选择Arti ...
- 分享Java程序员50多道热门的多线程和并发面试题(答案解析)
下面是Java程序员相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...
- 前端小白webpack学习(一)
俗话说得好,好记性不如烂笔头. 之前就在学习中看过webpack的教程,然而一段时间没用,火速的忘光了.写这篇博文,做个总结,也让自己以后有个地方回顾. 看webpack之前,我先去看了一下官方文档, ...
- linux中vi和vim操作
一.简单介绍 vi 和 vim 类似于windows的文本编辑器 所有的Linux系统都会内置vi文本编辑器 vim可以看做是vi增强版,具有程序编辑能力,支持语法高亮,代码补全,编译及错误跳转等功能 ...
- IDEA提示找不到Mapper接口:Could not autowire.No beans of 'xxxMapper' type found
前言 相信大多数互联网公司的持久层框架都是使用 Mybatis 框架,而大家在 Service 层引入自己编写的 Mapper 接口时应该会遇到下面的情况: 我们可以看到,上面的红色警告在提示我们,找 ...
- golang-错误处理
1.错误处理 如果要写出健壮 ,易维护的代码 ,错误处理就是关键 ,考虑到可能会发生的意外对其进行处理 go的错误处理与众不同 ,在调用可能出现问题的方法和函数时都会返回一个类型为error的值 ,由 ...
- JS基础语法---Date对象中常见的方法
创建实例对象 var dt = new Date(); //当前的时间---当前的服务器 console.log(dt); var dt = new Date("2017-08-12&quo ...
- Linux-打包压缩命令
内容总结自<鸟哥的Linux私房菜>http://cn.linux.vbird.org/linux_basic/0240tarcompress.php 一.打包/压缩文件常见扩展名 *.g ...
- HttpWebRquest.GetRequestStreamAsync()发生延迟
前景提要:此问题不定适用Browser通信方式,主要提供给通信发生异常时解决思路. Q: request请求创建过程发生延迟 [Scene]: .Net的HttpWebRquest.GetRequ ...