django (三) admin后台系统
admin后台系统
1. 安装MySQL
1,安装mysql:
sudo apt install mysql-server
(安装过程中输入密码并牢记)
2,安装后进入mysql:
mysql -u用户名 -p密码
mysql -uroot -proot
3,在Django中配置和使用mysql数据库
使用mysql数据库,settings中配置如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
4, 添加PyMySQL
然后使用pip添加依赖包: pip install PyMySQL
并在工程目录下的__init__.py中添加以下代码来配置PyMySQL:
import pymysql
pymysql.install_as_MySQLdb()
2. django admin后台系统
Django中默认集成了后台数据管理页面,通过简单的配置就可以实现模型后台的Web控制台。
管理界面通常是给系统管理员使用的,用来完成数据的输入,删除,查询等工作。
使用以下models来示范admin后台系统的用法。
创建一个项目, 用来说明出版社, 书籍和作者的关系。
假定关系:作者:书籍 => 1:n (一本书由一个作者完成, 一个作者可以创作多本书)
出版社:书籍 => n:n (一个出版社可以出版多本书, 一本书可以由多个出版社出版)
要求:
1. 创建作者author, 出版社publisher,书籍book三个应用.
2. 给每个应用分别创建首页index.html,且可以在浏览器打开index页面.
3. 在书籍的index.html中有一个"查看所有书籍"的超链接按钮,点击进入书籍列表list.html页面.
4. 在书籍list.html中显示所有书名,点击书名可以进入书籍详情detail.html
5. 在书籍detail.html中可以点击该书的作者和出版社,进入作者的detail.html和出版社的detail.html页面
models.py内容如下:
# 出版社
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=100)
city = models.CharField(max_length=30)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=20)
website = models.URLField()
# 作者
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField()
gender = models.BooleanField(default=True)
# 书籍
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author)
publishers = models.ManyToManyField(Publisher)
publish_date = models.DateField()
使用admin后台系统之前,需要先创建一个系统管理员,创建管理员之前需先同步数据库。
python manager.py createsuperuser
设置为中文
settings中LANGUAGE_CODE = 'zh-hans'
设置时间,时区
TIME_ZONE='Asia/Shanghai'
添加自己的数据模型,在admin.py中注册:
admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
在admin中给model添加数据。
给模型加上__str__函数,比如给Author模型添加str函数,让author的显示更加友好:
def __str__(self):
return '%s %s' % (self.first_name, self.last_name)
希望控制admin中添加model数据时的动作,可以修改相应字段的属性。
比如author的email字段运行添加的时候为空,可以在email字段定义中加上 blank=True(可以空白),
比如book的publication_date添加 blank=True, null=True(可以为null)属性。
修改models属性之后记得及时做数据迁移。
使用verbose_name属性指定字段的别名:
比如给publisher的name字段指定一个中文的别名verbose_name='出版社名称'。
在models的修改页面,默认显示的是models定义的str函数返回的字符串。
3. 定制admin
通过定义MoldelAdmin来定制model在admin的表现。比如给Author定义AuthorAdmin。
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
相应的注册代码也要变化:
admin.site.register(Author, AuthorAdmin)
给Author添加一个搜索框:
search_fields = ('first_name', 'last_name')
给book添加一个过滤器
list_filter = ('publication_date',)
过滤器不光可以作用在日期字段上,还可以作用在boolean类型和外键上。
另一种增加日期过滤的方式:
date_hierarchy = 'publication_date'
字段排序:
ordering = ('-publication_date',)
修改编辑页面显示的字段及显示顺序,默认按照models中字段的定义顺序显示:
fields = ('title', 'authors', 'publisher', 'publication_date')
与fields相反的字段是exclude
exclude = ['publication_date',]
改善多对多关系中对象选择操作,比如给BookAdmin添加如下属性:
filter_horizontal = ('authors',)
filter_horizontal和filter_vertical 选项只适用于多对多关系。
一对多的外键关系,admin使用select box下拉菜单来表示。如不想用select box,可添加如下属性,让原来一次性加载所有publisher的select box变成填写publisher的id:
raw_id_fields = ('publisher',)
让字段分组显示,fieldsets和上面提到的field不能同时出现:
fieldsets = (
('作者', {'fields': ('authors',)}),
('出版商', {'fields': ('publisher',)}),
)
定制list_display字段的显示。比如给Author加一个布尔型gender字段,来表示性别。为了让显示更加人性化:
# 定制显示属性
def showgender(self):
if self.gender:
return '男'
else:
return '女'
list_display = ('first_name', 'last_name', 'email', showgender)
给该函数设置简短描述,让显示更加友好:
showgender.short_description = '性别'
可以将modeladmin的属性简单划分为列表页属性和添加、修改页属性
# 列表页属性
list_display,list_filter,search_fields,list_per_page等
# 添加、修改页属性
fields ,fieldsets, filter_horizontal, raw_id_fields等
django (三) admin后台系统的更多相关文章
- 玩转Django2.0---Django笔记建站基础八(admin后台系统)
第八章 admin后台系统 admin后台系统也成为网站后台管理系统,主要用于对网站前台的信息进行管理,如文字.图片.影音和其他日常使用文件的发布.更新.删除等操作,也包括功能信息的统计和管理,如用户 ...
- django在admin后台注册自己创建的数据库表
django在admin后台注册自己创建的数据库表,这样我们就可以在admin后台看到表结构信息,我们就可以在admin后台快速录入表记录信息 如果没有注册,那么你在登录django自带的admin的 ...
- 自定义django的admin后台action
django的admin后台管理系统中自带了一个批量删除所选对象的action. 我们还可以添加自定义的action来实现其它类似的功能,如批量修改某个字段的功能.简单的,例如将文章批量标记为已发布的 ...
- Django框架admin后台管理和用户端静态文件
目录 一.admin后台管理 1. 如何使用 2. 路由分发的本质 二.用户上传的静态文件的展示 1. media配置 2. 手动开设media接口 三.图片防盗链 一.admin后台管理 djang ...
- Django:admin后台汉化问题
1.设置admin站点中文显示,即汉化admin后台管理站点. 方法一:修改settings文件 LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' 更改为: LANG ...
- django的admin后台管理如何更改为中文
新建Django的admin后端控制为英文显示,为了可以使其显示中文,可以将 setting.py配置文件修改 # LANGUAGE_CODE = 'en-us' # # # # # TIME_ZON ...
- django的admin后台管理
Admin后台管理 要进入admin后台管理首先要创建管理员账户 createsuperuser 其中密码要大于8位 使用之前要到应用下的admin.py中注册要管理的模型表 from django. ...
- Django 设置admin后台表和App(应用)为中文名
设置表名为中文 1.设置Models.py文件 class Post(models.Model): name = models.CharField() --省略其他字段信息 class Meta: v ...
- django的admin后台注册model并显示
在admin后台注册model并显示其他字段: 修改app下的admin.py,注册model: from .models import vmadmin.site.register(vm) #注册名为 ...
随机推荐
- 远程请求json数据,list中显示
public class MainActivity extends Activity { protected static final int WHAT_REQUEST_SUCCESS = 1; pr ...
- this.triggerEvent()用法
在对组件进行封装时 在当前页面想要获取组件中的某一状态,需要使用到this.triggerEvent(' ',{},{}),第一个参数是自定义事件名称,这个名称是在页面调用组件时bind的名称,第二个 ...
- 用 Java 抓取优酷、土豆等视频
1. [代码][JavaScript]代码 import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes ...
- Android View中滚动相关
方法 scrollTo: (内容的左上角)达到某个地点 scrollBy: 根据当前位置,再移动多少 属性: mScrollX, 以下是文档解释 The offset, in pixels ...
- python学习笔记:第二天(基本数据类型)
Python3 基本数据类型 1.标准数据类型 Python3中有六个标准的数据类型:Number(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictio ...
- 天天连萌UE分析
1.开始游戏消耗心,有消耗动画,[可以使用到副本次数上] 2.关卡结束,是个可爱的动画,[可以是潇洒的动画,一个吹箫的潇洒老翁或者帅哥] 3.点击爽快感:点击配对成功飘字及时且快速,[字体漂亮--潇洒 ...
- HDU - 1016 Prime Ring Problem 经典素数环
Prime Ring Problem A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., ...
- 在CentOS6.6上以replSet方式部署MongoDB集群
此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 部署方式在3台centos6.6系统上以Replica Set方式部署mongodb3.0.2集群. 官方参考 ...
- IETester for IE11, IE10, IE9, IE8, IE7 IE 6 and IE5.5 on Windows 8 desktop, Windows 7, Vista and XP
简介: IETester是一个免费的(用于个人和专业用途)WebBrowser,允许您在Windows 8桌面,Windows 7,Vista和XP上拥有IE11,IE10,IE9,IE8,IE7 I ...
- HDU5904【瞎搞】
哇咔咔,挂完. 靠着hack的100分挂在了rank167... 就是memset的问题,超时了:用map好了.. 思路: 标记a串以当前值为尾的上升子序列长度,然后还是搞b串,每次判一下当前值在a串 ...