使用Django构建Python Restful Web服务:二、生成数据模型

Python编程应用实战,尽在掌握

在上一章,我们完成了一个Django环境的搭建的安装。本章开始,我们着手构建我们基于Django的Restful服务,创建一个存储和记录电影信息的数据模型。

在现代动态网站中,底层数据库是每个网站的标配,也是绝大多数网站的唯一的数据来源,其用于存储网站所需的各种数据表及其表内的数据。

在Django中,模型用来作为数据库在框架中的表示,一般而言,一个模型就对应于数据库中的一张唯一的数据库表。

Django的模型有以下特点:

  • 每一个模型都是继承于django.db.models.Model的子类;
  • 每一个模型的属性都表示为数据库表中的字段(等同于SQL中的数据定义语言DDL);
  • 每一个模型的方法都用于对数据库表的操作(等同于SQL中的数据操作语言DML);

具体的Django模型使用方法,大家可以参考Django官方文档。下面,我们在项目中创建并生成一个模型。

2.1、定义一个模型

打开应用movies目录下的models.py文件:

在文件内定义一个模型类Movie,代码如下所示:

class Movie(models.Model):
    name = models.CharField(verbose_name='电影名称',max_length=30)
    movie_cate = models.CharField(verbose_name='电影分类',max_length=30,blank=True,null=True)
    release_date = models.DateField(verbose_name='上映日期')
    viewed = models.BooleanField(verbose_name='观看状态',default=False)
    created = models.DateTimeField(verbose_name='创建时间',auto_now_add=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '电影'
        verbose_name_plural = verbose_name
        ordering = ('name',)

在此,我们为这个名为Movie的模型(数据库表),定义了5个属性(字段),分别是电影名称、电影分类、上映日期、观看状态和创建时间。接下来,我们生成这个模型。

2.2、生成一个模型

在Django中,一个模型从定义完成到在数据库中创建(或修改)数据库表,需要两个步骤:

  • 创建模型的迁移(生成模型中的变动)
  • 执行模型的迁移(根据模型中的变动在数据库中执行相应的操作)

这两个步骤分别通过django的manage.py提供的makemigrations命令和migrate命令来实现。

下面我们通过这两个命令来生成一下刚刚定义好的模型。

2.2.1、创建模型的迁移

在vieturalenv虚拟环境下的项目目录下打开命令行窗口:

在光标下输入以下命令:

python manage.py makemigrations movies

其会提示我们模型中将会创建一个Movie模型:

2.2.2 执行模型的迁移

接着,我们就可以使用migrate命令来执行模型的迁移了,同样在光标下输入以下命令:

python manage.py migrate

因为我们第一次执行模型的迁移,Django项目中默认的很多模型,比如认证模型、用户模型、会话模型等也在本次模型迁移中被创建了:

2.3、查看模型

执行完模型的迁移,我们的数据库中就会创建对应的数据库表。在本次项目中,为了方便操作和演示,我们没有自定义数据库,所以使用的是默认的sqlite3数据库。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

如果有需要,大家可以自行选用其他的数据库。这时候,在项目目录下,可以发现已经存在一个sqlite3数据库的文件:

我们可以通过很多相关的软件打开sqlite数据库文件,在此我们使用的是SQLite Expert的个人版。

首先在官网上(http://www.sqliteexpert.com/download.html)下载安装好:

启动之后,选择打开我们项目下的db.sqlite3文件:

左侧的db下,显示的就是我们这个db.sqlite3数据库中所包含的数据库表,可以发现我们在movies应用下定义的movie模型也在其中。点击movies_movie表,右侧的内容栏会出现这个表的信息:

现在表中没有数据,但是我们可以看到这个表的字段,除了我们定义的5个字段外,还有一个默认的自增id字段。通过这个工具,我们可以在Django admin界面之外很方便的查看和管理数据。

2.4、本章小结

在本章,我们介绍并使用了Django的模型。通过模型类来定义数据模型,并通过迁移生成模型数据表。最后利用sqlite的可视化管理工具查看了生成的模型数据表。

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2018-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

基于网络流量的SDN最短路径转发应用

网络的转发是通信的基本功能,其完成信息在网络中传递,实现有序的数据交换。通过SDN控制器的集中控制,可以轻松实现基础的转发算法有二层MAC学习转发和基于跳数的最...

46710
来自专栏人工智能LeadAI

用python编写一个本地论文管理器

介绍和引入 最近初学NLP相关的深度学习,下了很多论文,数量一多,发现论文管理是个问题。 首先论文数目一多,必须要按类别放到子文件夹下。但是某一篇论文,往往有...

3709
来自专栏Hadoop实操

模型训练和部署-Iris数据集

在前面的文章Fayson介绍了关于《CDSW1.4的新功能》、《Hadoop之上的模型训练 - CDSW1.4新功能模块》、《CDSW1.4的Experimen...

1322
来自专栏ATYUN订阅号

小白也可以操作的手机TensorFlow教程:Android版和iOS版

TensorFlow通常用于训练海量数据,但新兴的智能手机市场也不可忽略。那些不能等待未来和love Machine Learning的人正在通过制造工具来突破...

3686
来自专栏人工智能LeadAI

TensorFlow从0到1 | 第十八章: 升级手记:TensorFlow 1.3.0

《TensorFlow从0到1》写到现在,TensorFlow的版本也从当时的1.1.0迭代到了8月初发布的1.3.0。可以预见在未来很长一段时间里,它仍会持续...

2887
来自专栏AI科技评论

开发 | GitHub项目推荐 : 用于对机器学习模型进行对抗性攻击、防御和基准测试的Python库

此资料库包含CleverHans的源代码,CleverHans是一个Python库,用于将机器学习系统中的漏洞与对抗性示例进行对比。 您可以在随附的博客上了解有...

1122
来自专栏磨磨谈

利用火焰图分析ceph pg分布

性能优化大神Brendan Gregg发明了火焰图来定位性能问题,通过图表就可以发现问题出在哪里,通过svg矢量图来查看性能卡在哪个点,哪个操作占用的资源最多 ...

1022
来自专栏瓜大三哥

串口通信控制器的Verilog HDL实现(四) 接收模块的Verilog HDL 实现

但凡涉及到双方通信的系统,接收机的复杂度往往都是高于发送机的,对于串口通信系统也如此。在接收系统中,起始状态和数据都需要依靠接收端检测得到,为了避免毛刺影响,...

2085
来自专栏Deep learning进阶路

caffe随记(六)---tools工具举例

经过前面几篇博文的介绍,我们已经对caffe有了个大概的了解,知道它的数据结构,而且也尝试了caffe的Hello World---mnist例程。 前一篇博文...

2130
来自专栏生信技能树

【视频讲解】-使用rmarkdown来制作html报表

第一步:安装R语言及Rstudio 首先根据操作系统来安装R语言软件 最好是安装最新版 Download R for Windows from CRAN Dow...

3757

扫码关注云+社区