日課書

编程100小时挑战

Flask Web应用的一般模式

圣贤云:程序 = 数据结构 + 算法。

粗略看,Flask应用 = Models + View Functions + Templates。

其中Model即模型,是对Web应用的抽象表达,通常用关系数据库来实现。比如我们对一个博客应用进行模型抽象,即回答博客是什么。博客首先要有文章,每篇文章至少有标题和正文。如果开通评论,那么每个评论会对应:评论人,所属文章,和评论内容。还有些博客有几个人共同维护,每个人对应不同的管理权限,那么每个人都会有id、权限等属性。因此一个博客程序所抽象出来的Model就是,表示文章、评论和用户的三张表格。这些表格利用数据库schema来定义,生成相应的数据库,随着程序的运行会对里面的数据进行增删改查的操作。你通过网页看谋篇博文,其实是Web应用从表示文章的表格中读取了相应的一篇,返回给浏览器的。

所以在创建基于Flask的应用时,我们首先考虑要实现的项目目标,进而抽象出模型,利用关系模型来表示,最终在选取相应的数据库在程序中实现。对于练手的小型项目可以选择sqlite,大型直接选开源的MySQL。

在用户看来,使用Web应用,也就是浏览网站,无非是打开一个个网页。从开发者角度看,用户每输入一个网址或点击一个连接,都是期待获得一个新的页面。用技术的语言讲就是,Web编程就是,编写处理每个HTTP请求并返回响应内容的程序。而像Flask这样的Web框架,简化了我们处理请求的过程,它对请求和响应进行了抽象,做了大量底层的工作,让我们只要编写每个URL对应的响应函数就行了,一个请求对应一个View Function。

返回的内容基本上都是网页。对于一个网站而言不同的页面间有相同的布局和元素,只有部分内容不同。而且如果直接返回HTML代码会让程序很难维护。基于以上两点,Flask和大部分Web框架一样,都会采用模板机制。返回的内容添加到提前预设好的模板中,再把通过模板渲染后的网页响应给用户。在Flask中,采用Jinja模板。

所以开发Flask应用的一般流程和模式如下:

  1. 确定项目要实现的功能特性
  2. 设定开发环境和项目结构
  3. 抽象出数据模型
  4. 处理数据库的链接、创建等
  5. 根据不同的URL请求编写视图函数
  6. 根据视图函数的返回内容,编写不同的模板。
  7. 给模板添加样式,使用css。
  8. 对程序进行测试,利用unittest.
  9. 部署到服务器,比如Heroku云服务。