Day 3: Flask —— 使用Python和OpenShift进行即时Web开发

简介: 最近Packtpub找到了我,让我给他们新出版的关于Flask的书写书评。Flask是一个很流行的Python框架。那本书是Ron DuPlain写的《Flask 即时Web开发》。我决定把“30天学习30种新技术”挑战的第三天花在Flask上。在本文中,我首先将介绍Flask框架的一些基本知识,然后提供一个短篇的书评。同样,我也会把示例应用移植到OpenShift上。对于Flask而言我不是一个完全意义上的新手,我也用它创建过示例应用。对我来说,这是一次很好的温习。

编者注:我们发现了比较有趣的系列文章《30天学习30种新技术》,准备翻译,一天一篇更新,年终礼包。以下是第三天的内容。


Packtpub找到了我,让我给他们新出版的关于Flask的书写书评。Flask是一个很流行的Python框架。那本书是Ron DuPlain写的《Flask 即时Web开发》。我决定把“30天学习30种新技术”挑战的第三天花在Flask上。在本文中,我首先将介绍Flask框架的一些基本知识,然后提供一个短篇的书评。同样,我也会把示例应用移植到OpenShift上。于Flask而言我不是一个完全意义上的新手,我也用它创建过示例应用。对我来说,这是一次很好的温习。

image.png

给不了解这一系列文章的读者:我正在尝“30天学习30种新技术”的挑战。每天我会学习一种新技术,然后写一篇文章介绍下我学到了什么,我怎样使用新学的工具。如果一天不够一项技术,我会每天讨论一个关于该项技术的子话题。


Flask是什么?

有些开发者可能没听说过Flask,我来简单介绍一下吧。Flask是一个基于Python的微型的web开发框架。虽然Flask是微框架,不过我们并不需要像别的微框架建议的那样把所有代码都写到单文件中。毕竟微框架真正的含义是简单和短小。我们可以从单文件架构开始工作,只用需要的特性。等我们渐渐熟悉Flask之后,可以将代码提取成模块,同时学习Flask提供的高级功能。Flask没有给出关于文件架构的建议,但是在这篇文章的后面我会讨论书中建议的文件架构。


让我们看一段示例代码吧:

from flask import Flask

app = Flask(__name__)

@app.route('/', defaults={'name':"Guest"})

@app.route('/<string:name>' , methods=['GET'])

def say_hello(name):

   return "Hello " + name

if __name__ == "__main__":

   app.run(debug=True)

这个例子很简单,但是很有表达力。坐下来好好欣赏下。


我们来解释一下上面的代码吧:

  1. 第一行导入了Flask类,以便创建一个Flask应用的实例。
  2. 接下来一行我们创建了一个Flask类的实例。这是一个WSGI应用实例。WSGI是“Web服务器网关接口”(Web Service Gateway Interface)的缩写,同时也是架设web项目的Python标准。这一行要告诉Flask到哪里去找应用所需的静态资源和模板。在我们的例子中,我们传递了name,让Flask在当前模块内定位资源。
  3. 接着我们定义了一些关于/的路由。第一个路由是为根路径/准备的,第二个则对应于类似/shekhar/abc之类的路径。对于/路由,我们将初始的name设定为Guest如果用户访问 http://localhost:5000/ ,那么他会看到Hello Guest。如果用户访问 http://localhost:5000/shekhar ,那么他会看到 Hello shekhar
  4. 最后我们使用python app.py命令来启动开发服务器,以运行应用。我们把上面的代码复制到app.py文件中。我们同时通过Debug=True开启了调试,这样当意料之外的情况出现时,浏览器就可以提供一个交互式的调试器。开启调试的另一个好处是,改动文件 之后,服务会自动重新加载。我们可以让调试器在后台运行,然后继续在我们的应用上工作。这提供了高效的开发环境。你可以问问Java开发者如何实现自动重新加载 :)


关于Flask值得知道的一些事:

  1. Flask由Armin Ronacher于2010年创建。
  2. Flask的灵感来自Sinatra。(Sinatra是一个极力避免小题大作的创建web应用的Ruby框架。)
  3. Flask依赖于两个库,一个是Werkzeug(Python的WSGI工具库),一个是Jinja2(一个模板引擎)。
  4. Flask遵循“约定优于配置”以及合理的默认值原则。


我为什么要关心Flask?

我决定学习Flask是因为:

  1. 易于学习: 我已有8年的Java开发经验。因此学完了Python基础之后我想接触web开发。Flask非常易于使用,同时,正如我上面的示例代码所展示的那样,是一个简单得要死的框架。我大脑很自然地就适应它了,使用Flask,我可以更快地开发。
  2. 非常活跃、生机勃勃的社区:我和几个Python的朋友交谈过,每个人都建议我从Flask入手。我也google过,我发现到处都说Flask是最好的现代web开发的Python框架。
  3. 快速创建REST API:我希望学习便于创建REST服务的框架。我们上面展示的例子,可以很容易地改成返回json文档的应用,只需使用Flask的jsonify函数。未来的web应用将架构在REST后端和基于现代JawaScript MV*框架的前端。
  4. 280页优质文档,有很多例子。
  5. Flask遵循“约定优于配置”。也有合理的默认值,比如静态资源放置在static文件夹中。当然,大部分默认值是可覆盖的。


关于《Flask 即时Web开发》

现在让我们来看下这本书的一些细节吧。

  1. 这书属于菜谱类,每节创建一个示例应用。全书仅78页。
  2. 售价 $11。
  3. 作者为Flask提交过补丁。


我喜欢这书的哪些方面?

  1. virtualenv起步,这是python开发的正道。避免污染主python环境。方便不同的项目采用不同版本的python。
  2. 使用最佳实践,比如良好的目录结构之类的。虽然Flask是一个微框架,但是我们仍然应该为应用设定良好的层次。开发企业应用的时候这很有帮助。
  3. 介绍了一些我没听说过的Flask功能和扩展。 比如介绍了Flask-Script扩展。Flask-Script支持为Flask应用编写外部的脚本。
  4. 详细解释了WTForms。WTForms有助于编写基于表单的应用。


哪些可以更好?

  1. 对于初学者而言,一些主题不够清晰,相关知识也讲得不够。我就看不明白为什么要在Flask应用中使用子域名。
  2. 缺乏Postgresql和Mysql之类真实数据库的内容。虽然作者提到了使用不同的数据库uri来连接Postgresql和Mysql,但没有给出真实的例子。我更喜欢使用一个真实数据库的例子,而不是把数据库放在内存里。当然,把数据库放在内存里对初学者来说更容易。
  3. 没有提到REST服务:对于今时今日的应用而言,REST不可缺少。使用Flask的一大优势就是我们可以利用它很方便地编写REST服务。
  4. 没有提到如何配合Flask使用MongoDB之类的NoSQL数据库。
  5. Flask框架的单元测试支持相当完善,但是作者没有介绍。
  6. 没有提到云部署。在本文中,我将展示如何把书中提到的示例程序部署到OpenShift上。

我该买这本书么?

那些想编写传统的基于RDBMS的web应用的Flask初学者会发现这本书很有用。


Flask起步

开始使用Flask前我们需要安装Pythonvirtualenv。本文中使用的Python版本是2.7。

安装flask:

$ mkdir schedulingapp

$ cd schedulingapp/

$ virtualenv venv --python=python2.7

$ . venv/bin/activate

$ pip install flask

在上面的命令中,我们首先创建了一个为示例应用准备的目录,然后激活了virtualenv。virtualenv有助于避免污染python主环境。这意味着不同的项目可以使用不同的python版本。最后,我们安装了flask。pip install flask会安装最新的flask框架稳定版。


部署示例应用到OpenShift

书中的示例程序是一个简单的预约应用。注册账户后,可以登录应用创建、修改、查看预约。使用如下命令可以在本地运行应用:

$ git clonehttps://github.com/shekhargulati/instant-flask-web-development-book-app.git scheduleapp

$ cd scheduleapp

$ virtualenv venv --python=python2.7

$ . venv/bin/activate

$ pip install -r requirements.txt

$ python manage.py create_tables

$ python manage.py runserver

然后就可以在 http://127.0.0.1:5000 访问应用了。用户可以注册账号,开始使用应用了。

很不错。但是我打算把我的应用部署到云端。我们将在OpenShift上部署应用。OpenShift是一个开源、公开、可伸缩的PaaS(平台即服务)。


依赖

在构建应用之前,我们需要做些设置:

  1. 注册一个OpenShift账号。注册是完全免费的,Red Hat给每个用户三枚免费的Gear,可以用Gear运行你的应用。在写作此文的时候,每个用户能免费使用总共 1.5 GB 内存和 3 GB 硬盘空间。
  2. 安装 rhc客户端工具rhc是ruby gem,因此你的机子上需要装有 ruby 1.8.7以上版本。 只需输入 sudo gem install rhc即可安装 rhc 。如果你已经安装过了,确保是最新版。运行sudo gem update rhc即可升级。关于配置rhc命令行工具的详细信息,请参考: https://openshift.redhat.com/community/developers/rhc-client-tools-install
  3. 使用 rhc 的 setup 命令配置你的 OpenShift 账号。这个命令会帮助你创建一个命名空间,同时将你的ssh公钥上传至 OpenShift 服务器。

部署应用

输入如下命令即可将应用部署到 OpenShift:

rhc create-app schedapp python-2.7 postgresql-9.2 --from-code=https://github.com/shekhargulati/schedapp-openshift.git

这个命令将创建应用,设置公开的DNS,创建私有git仓库,最后利用你的Github仓库中的代码来部署应用。应用可以通过 http://schedapp-shekhargulati.rhcloud.com/ 访问。

今天就到这里了,欢迎反馈意见。

相关文章
|
4月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
407 4
|
6月前
|
存储 监控 算法
淘宝买家秀 API开发实录Python(2025)
本文讲述了作者在电商开发领域,尤其是对接淘宝买家秀 API 接口过程中所经历的挑战与收获。从申请接入、签名验证、频率限制到数据处理和实时监控,作者分享了多个实战经验与代码示例,帮助开发者更高效地获取和处理买家秀数据,提升开发效率。
|
9月前
|
API C++ 开发者
PySide vs PyQt:Python GUI开发史诗级对决,谁才是王者?
PySide 和 PyQt 是 Python GUI 开发领域的两大利器,各有特色。PySide 采用 LGPL 协议,更灵活;PyQt 默认 GPL,商业使用需授权。两者背后团队实力雄厚,PySide 得到 Qt 官方支持,PyQt 由 Riverbank Computing 打造。API 设计上,PySide 简洁直观,贴近原生 Qt;PyQt 增加 Pythonic 接口,操作更高效。性能方面,两者表现优异,适合不同需求的项目开发。选择时可根据项目特点与开源要求决定。
981 20
|
8月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
8月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。
|
8月前
|
JSON 开发框架 自然语言处理
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
本文主要介绍了应用开发中的三大核心内容:生命周期管理、资源限定与访问以及多语言支持。在生命周期部分,详细说明了应用和页面的生命周期函数及其触发时机,帮助开发者更好地掌控应用状态变化。资源限定与访问章节,则聚焦于资源限定词的定义、命名规则及匹配逻辑,并阐述了如何通过 `$r` 引用 JS 模块内的资源。最后,多语言支持部分讲解了如何通过 JSON 文件定义多语言资源,使用 `$t` 和 `$tc` 方法实现简单格式化与单复数格式化,为全球化应用提供便利。
313 104
|
8月前
|
JavaScript 前端开发 API
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
本文介绍了HarmonyOS应用开发中的HML、CSS和JS语法。HML作为标记语言,支持数据绑定、事件处理、列表渲染等功能;CSS用于样式定义,涵盖尺寸单位、样式导入、选择器及伪类等特性;JS实现业务逻辑,包括ES6语法支持、对象属性、数据方法及事件处理。通过具体代码示例,详细解析了页面构建与交互的实现方式,为开发者提供全面的技术指导。
317 104
|
8月前
|
开发框架 编解码 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(一)
该文档详细介绍了一个兼容JS的类Web开发范式的方舟开发框架,涵盖概述、文件组织、js标签配置及app.js等内容。框架采用HML、CSS、JavaScript三段式开发方式,支持单向数据绑定,适合中小型应用开发。文件组织部分说明了目录结构、访问规则和媒体文件格式;js标签配置包括实例名称、页面路由和窗口样式信息;app.js则描述了应用生命周期与对象管理。整体内容旨在帮助开发者快速构建基于方舟框架的应用程序。
330 102
|
5月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
711 7

推荐镜像

更多