一 前言
在第(二)节介绍了模型Book的设计,实质就是在models.py里写了一个Book类,定义了变量和元数据,也就是设计数据库里对应的表应该长什么样子。就如前面所说,你可以将定义的模型类理解成数据库的一张表,类的实例对象理解成表中一行数据,类中的变量对应表中字段。Python奉行代码优先的理念,通过定义模型类,实现python代码与数据库操作的解耦,即使Python开发者不会数据库SQL,也能轻松完成数据库操作。
模型类定义完后,如何实现在数据库生成对应的表呢?如何通过Django后台管理模型呢?这就是本节要回答的问题。
二 模型迁移
迁移(migration),是一个将models.py定义的模型类映射到数据库并生成数据表的动作,主要涉及两个命令:
python manage.py makemigrations python manage.py migrate
命令说明:
1. 该命令的执行位置是在manage.py文件的同级目录;
2. 命令顺序执行,即先执行makemigrations,完成后,再执行migrate;
3. Django默认使用SQLlite,不需要做任何配置,但如果使用的其他数据库,需要预先在项目的settings.py配置、指定数据库;
可能你会疑惑,迁移为什么要搞成两步呀?
原因是这样的:
makemigrations命令,带着make,该动作只是将模型改动生成到文件,默认是在项目的migrations目录下,注意此时只是生成了一个可读可编辑的文本文件,并没有对数据库进行改动,这样做的目的是,便于通过版本控制系统(如git、svn)记录、同步你对模型的修改,毕竟版本控制系统是无法和数据库打交道的。有了中间记录,就可以放心的使用migrate将改动同步到数据库了。
三 通过Admin后台管理模型
Django的省心之处就是它会基于项目模型创建一套简易的后台管理系统,通过该系统可以方便的对模型进行增删改查,虽然也被很多人诟病,Django太重、集成度太强,但既然有现成的、省事儿的,为啥还要自己造轮子呢?!
进入Admin后台管理的步骤如下:
1. 首次登录,创建一个admin站点用户,命令如下:
python manage.py createsuperuser
根据提示输入用户名、邮箱地址、密码即可。
2. 启动服务器,命令如下:
python manage.py runserver 127.0.0.1:8000
IP:端口根据实际修改,启动后,浏览器访问http://127.0.0.1:8000/admin/,就会看到管理后台界面,如图:
上图中管理后台登录界面的站点名字已经被我从默认的Django Administration改成图书借阅管理系统了,后面会介绍如何改。
3. 在amdin.py中使用admin.site.register()注册模型
from django.contrib import admin from django.contrib.auth.models import Group,User as AdminUser from .models import Book,User,ValidUser # Register your models here. admin.site.register(Book)
注意:
只有注册的模型才会出现在admin后台管理系统。
4. 再次进入管理后台界面,发现模型book已经出现在管理后台,如图:
此时,你可能会发现模型名字怎么变成图书了,还记得在(二)节中设计模型用的verbose_name = '图书'吧,就是这个效果。
四 定制Admin后台
通过上述步骤,已经可以在admin管理后台看到定义的模型了,后台页面显示和布局都是默认的,Django提供了ModelAdmin类实现对模型展示的定制,如下是对BOOK模型进行的简单定制:
@admin.register(Book) class BookAdmin(admin.ModelAdmin): list_display = ('book_name','author_name','total_num','available_num','book_img') #readonly_fields = ('book_name','author_name','total_num','available_num') search_fields = ('book_name','author_name') list_filter = ['available_num'] list_per_page = 10 admin.AdminSite.site_header = '图书借阅管理系统' admin.AdminSite.site_title = '管理后台'
说明:
1. 直接可以按照以上代码套路定制自己的后台,首先定义一个ModelAdmin的子类BookAdmin,在该子类里定制展示效果和特性,同时使用admin.register装饰器,接收的参数就是需要定制的模型;
2. 常用定制字段说明如下:
1) list_display: 显示在页面的字段;
2)readonly_fields: 指定哪些字段是只读类型;
3)search_fields: 在页面添加搜索框,且指定按哪些字段进行搜索;
4)list_per_page: 设置每页显示多少个对象,如果超过,会进行分页;
5)admin.AdminSite.site_header:设置站点页头
6)admin.AdminSite.site_title: 设置页面标题
7)list_filter:过滤页面元素
简单定制后,效果如下: