Django web开发系列(三)模型与管理后台
admin
2023-07-12 05:23:51
0

一 前言

在第(二)节介绍了模型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 web开发系列(三)模型与管理后台
上图中管理后台登录界面的站点名字已经被我从默认的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已经出现在管理后台,如图:

Django web开发系列(三)模型与管理后台

此时,你可能会发现模型名字怎么变成图书了,还记得在(二)节中设计模型用的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:过滤页面元素

简单定制后,效果如下:

Django web开发系列(三)模型与管理后台

相关内容

热门资讯

OpenAI,正式组建机器人事... 人工智能(AI)领域巨头OpenAI发布公告,宣布大力扩张内部机器人事业部,正式全面切入硬件赛道,实...
星火空间完成近亿元Pre-A轮... 据星火空间消息,6月1日,合肥星火空间科技有限公司完成近亿元Pre-A轮融资。本轮融资由云泽资本和轨...
刚刚,宇树IPO闪电过会!王兴... 智东西 作者 | 许丽思 编辑 | 漠影 智东西6月1日报道,刚刚,宇树通过上交所上市委会议审议。 ...
京东工业发起百川计划 携手上游... 京东工业大模型生态发布会6月1日在北京举行,京东工业携手合作伙伴正式开启“百川计划”,从数据、模型、...
强脑科技预计今年机械手销量大涨... IT之家 6 月 2 日消息,据彭博社 2 日(今天)报道,强脑科技预计,随着中国人形机器人产业快速...
一图看懂差距!iPhone 1... 快科技6月2日消息,iPhone 18 Pro不同版本电池容量不同的相关话题冲上社交平台热搜榜,引发...
iPhone 18 Pro 或... 据科技狐,近日,知名爆料人 Sonny Dickson 分享了 iPhone 18 Pro 全套机模...
武契奇:不排除卸任总统后担任总... 塞尔维亚总统武契奇近期密集释放政坛人事与大选相关信号,明确无意在 2027 年总统任期届满后谋求连任...
6月新机夯到拉盘点,告诉你哪台... 现在这形势,手机升价是不可能躲得过的了,而且涨价期至少持续两年。那既然内存涨价躲不过,就只能选升级大...
伊朗公开已故最高领袖哈梅内伊安... 新华社德黑兰6月2日电 据伊朗伊斯兰共和国通讯社2日报道,根据伊朗已故最高领袖阿里·哈梅内伊生前遗愿...