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.StackedInline
class 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 ...
随机推荐
- CG-CTF SQL注入
SQL注入1 题目 访问题目网址 先查看一下源码 仔细分析一下核心源码 <?php if($_POST[user] && $_POST[pass]) { //判断user和pas ...
- Object-defineProperty ES5
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. Object.defineProperty(obj, prop, ...
- Java连载55-Mail编程
一.电子邮件的历史 1.起源: 1969 Lenoard K. 教授发给同事的“LO” 1971 美国国防部自主的阿帕网(Arpanet)的通讯机制 通讯地址里用@ 1987年中国的第一份电子邮件 “ ...
- Swoole 启动一个服务,开启了哪些进程和线程?
目录 概述 代码 小结 概述 Swoole 启动一个服务,开启了哪些进程和线程? 为了解决这个问题,咱们启动一个最简单的服务,一起看看究竟启动了哪些进程和线程? 然后结合官网运行流程图,对每个进程和线 ...
- JavPlayer:AI破坏马赛克,大量马赛克破坏版影片流出
这是最近几个月业界讨论比较火的话题,发酵到现在, 终于可以给大家总结下最近的马赛克破坏版影片到底是怎么回事? 马赛克破坏版,简单讲就是利用AI技术,在打有马赛克影片的马赛克基础上进行修复操作, 来实现 ...
- 腾讯短信+SpringBoot+Redis实现注册逻辑
使用redis做缓存实现用户的注册功能: 异步请求发送短信,给 发送短信的按钮 绑定异步事件 调用发送短信逻辑发送短信 缓存 key1:验证码 缓存 key2:短信发送时刻的时间 用户提交表单 包含用 ...
- QT使用QPainter加水印
QT使用QPainter加水印 加水印的代码 //为QPixmap添加水印 void MainWindow::addMask(QPixmap& pm, const QString& t ...
- 动态SQL与变量绑定
有时候动态sql需要进行变量的赋值,这个时候就需要调用系统的存储过程sp_executesql了.使用中还是有些注意事项,代码如下: --字符型字段需声明为NVARCHAR类型 ),) --动态SQL ...
- U盘的几种分类及格式
u盘常见的几种分类: 1.按u盘材质来分,可以分为金属u盘.塑料u盘.软胶u盘.皮革u盘.木质u盘.珠宝u盘等.这些主要是考虑u盘本身外壳所用材质的. 2.从u盘容量来分,就是8GB.16GB.32G ...
- MySQL 锁的监控及处理
故障模拟 # 添加两项配置 vi /etc/my.cnf [mysqld] autocommit=0 innodb_lock_wait_timeout = 3600 systemctl restart ...