Django搭建图书管理系统03:编写博客文章的Model模型

news/2024/10/23 18:33:30/

Django 框架主要关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。

它们各自的职责如下:

层次职责
模型(Model),即数据存取层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
模板(Template),即业务逻辑层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
视图(View),即表现层存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

简单来说就是Model存取数据,View决定需要调取哪些数据,而Template则负责将调取出的数据以合理的方式展现出来。

数据库与模型

数据库是存储电子文件的场所,储存独立的数据集合。一个数据库由多个数据表构成。

啥意思?举个栗子,三年级二班中同学们的花名册就是数据表。有的花名册记录每位同学的考试成绩、有的记录身高体重、还有的记录兴趣爱好…所有的这些花名册都放在老师的柜子里,这个柜子就是**“数据库”**了。

默认情况下,数据库就是db.sqlite3这个文件了。

操作数据库使用的是复杂的SQL语句,它是完全不同于Python的另一种语言,这对新手来说无疑是困难的。

幸运的是,在 Django 里写Web应用并不需要你直接去操作数据库,而是定义好模型(用Python语法就可以了!),模型中包含了操作数据库所必要的命令。也就是说你只需要定义数据模型,其它的底层代码都不用关心,它们会自动从模型生成。

其实它有专门的术语,叫对象关系映射Object Relational Mapping,简称ORM),用于实现面向对象编程语言里不同类型系统的数据之间的转换。

编写Model.py

如前面所讲,Django中通过模型(Model)映射到数据库,处理与数据相关的事务。

打开book/models.py文件,输入如下代码:

from django.db import models# 图书信息数据模型
class Book(models.Model):barcode = models.CharField(max_length=20, default='', primary_key=True, verbose_name='图书条形码')bookName = models.CharField(max_length=20, default='', verbose_name='图书名称')price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='图书价格')count = models.IntegerField(default=0, verbose_name='库存')publishDate = models.CharField(max_length=20, default='', verbose_name='出版日期')publish = models.CharField(max_length=20, default='', verbose_name='出版社')bookPhoto = models.ImageField(upload_to='img', max_length='100', verbose_name='图书图片')bookDesc = models.TextField(max_length=8000, verbose_name='图书简介')bookUpdated = models.DateTimeField(auto_now=True)class Meta:db_table = 't_Book'verbose_name = '图书信息'verbose_name_plural = verbose_name

Book类定义了一本书的信息:图书名称、图书价格、出版日期、创建出版社、图书简介等。

我们还可以额外再定义一些内容,规范Book中数据的行为:

# book/models.py...class Book(models.Model):...# 内部类 class Meta 用于给 model 定义元数据class Meta:# 数据表名称db_table = 't_Book'verbose_name = '图书信息'verbose_name_plural = verbose_name# ordering 指定模型返回的数据的排列顺序# '-bookUpdated' 表明数据应该以倒序排列ordering = ('-bookUpdated',)# 函数 __str__ 定义当调用对象的 str() 方法时的返回值内容def __str__(self):#  将图书名称返回return self.bookName
  • 内部类Meta中的ordering定义了数据的排列方式。-bookUpdated表示将以创建时间的倒序排列,保证了最新的文章总是在网页的最上方。注意ordering是元组,括号中只含一个元素时不要忘记末尾的逗号。
  • __str__方法定义了需要表示数据时应该显示的名称。给模型增加 __str__方法是很重要的,它最常见的就是在Django管理后台中做为对象的显示值。因此应该总是返回一个友好易读的字符串。

恭喜你,你已经完成了博客网站最核心的数据模型的大部分内容。

代码不到20行,是不是完全没啥感觉。后面会慢慢体会Django的强大。

视图、模板马上就会讲到。

数据迁移(Migrations)

编写好了Model后,接下来就需要进行数据迁移。迁移是Django对模型所做的更改传递到数据库中的方式。

Django中MySQL配置

在项目的 settings.py 文件中配置 MySQL 数据库连接。

# settings.pyDATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'your_database_name','USER': 'your_username','PASSWORD': 'your_password','HOST': 'localhost','PORT': '3306',}
}

在这里插入图片描述

注意,每当对数据库进行了更改(添加、修改、删除等)操作,都需要进行数据迁移。

Django的迁移代码是由模型文件自动生成的,它本质上只是个历史记录,Django可以用它来进行数据库的滚动更新,通过这种方式使其能够和当前的模型匹配。

在PyCharm的终端,输入python manage.py makemigrations,对模型的更改创建新的迁移表:

(venv) PS E:\djangopj\library> python manage.py makemigrations
Migrations for 'book':book\migrations\0001_initial.py- Create model Book
(venv) PS E:\djangopj\library> 

通过运行 makemigrations 命令,Django 会检测你对模型文件的修改,并且把修改的部分储存为一次迁移。

然后输入python manage.py migrate应用迁移到数据库中

(venv) PS E:\djangopj\library> python manage.py migrate                                           
Operations to perform:Apply all migrations: admin, auth, book, contenttypes, sessions
Running migrations:                                              Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying auth.0012_alter_user_first_name_max_length... OKApplying book.0001_initial... OKApplying sessions.0001_initial... OK
(venv) PS E:\djangopj\library> 

Navicat查看表格创建成功。
在这里插入图片描述

migrate 命令选中所有还没有执行过的迁移并应用在数据库上,也就是将模型的更改同步到数据库结构上。迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表。它专注于使数据库平滑升级而不会丢失数据。

每当你修改了models.py文件,都需要用makemigrationsmigrate这两条指令迁移数据。

在迁移之后,Model的编写就算完成了。

总结

本章初步了解了Django的MTV模式,编写了博客文章的Model模型Book,并将其迁移到了数据库中。

下一步就向View进军,学习如何调取模型中的数据。


http://www.ppmy.cn/news/747692.html

相关文章

15年前的手机并没有jvm虚拟机,为何可以运行Java游戏

2000年代初期,随着移动通信技术的发展,手机逐渐普及。那个时代的手机功能相对比较单一,主要用于打电话和发送短信。但是,随着技术的进步,人们开始在手机上玩游戏,而其中最受欢迎的游戏就是Java游戏。在那个…

u盘pe能修改服务器开机密码吗,巧用U盘PE 快速修改管理员密码

事情多了,人总会忘记一些事情,有时候,我们忘记了Windows XP的超级管理员密码(或者说你想进入别人的账户),无法进入系统且无法登录带命令行的安全模式,这时,我们就可以使用一些工具来修改超级管理员密码&…

U盘不能格式化,磁盘管理里显示只读

U盘不能格式化,磁盘管理里显示只读 在windows下无法用DiskGenius更改只读属性,进PE后删除U盘分区后再新建分区,恢复正常,可以格式化和正常使用。

u盘写保护+计算机管理,U盘写保护的解决方法

当您把U盘连接电脑,360U盘保镖或者木马查杀提示“无法对U盘进行处理”或者“处理失败”时,您的U盘可能已经处于【写保护】状态了。此状态无法对U盘数据进行修改(添加、删除、修改名称),可按照如下方案进行操作~ 为什么写保护了? U…

计算机管理中优盘显示无媒体,U盘显示无媒体怎么办解决教程

在使用U盘过程中,遇到问题在所难免,特别是有些问题特别的棘手,比如U盘显示无媒体,这种故障会导致U盘直接打不开,那么里面的资料就危险了,今天U盘网就教大家怎么解决这个问题,分几种方法。 方法一…

计算机磁盘管理给优盘分区,给U盘分区的图文教程

相信有不少人都想给U盘分区,但又不知道该怎么做。其实这并不难,现在系统之家小编就以图文并茂的方式向大家讲诉如何给U盘分区,有U盘的朋友们可以赶紧试试哦。 1、将u盘插入电脑usb接口(台式用户建议插在主机机箱后置的usb接口),然…

u盘 计算机管理 没有就绪,U盘无法识别先别着急扔!这五步操作还能挽救一下...

USB接口我们一定不会陌生,键盘、鼠标、U盘、移动硬盘等等硬件都需要通过USB接口连接到电脑。尤其是U盘,几乎成为我们商务办公必不可少的工具,各种重要资料和软件都会通过U盘进行传输。但是如果遇到U盘无法识别的情况要怎么办呢? 有时候明明同一个USB接口,鼠标键盘都可以使…