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

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

flask

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

Flask是什么?

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

让咱们看一段示例代码吧:github

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) 

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

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

  1. 第一行导入了Flask类,以便建立一个Flask应用的实例。数据库

  2. 接下来一行咱们建立了一个Flask类的实例。这是一个WSGI应用实例。WSGI是“Web服务器网关接口”(Web Service Gateway Interface)的缩写,同时也是架设web项目的Python标准。这一行要告诉Flask到哪里去找应用所需的静态资源和模板。在咱们的例子中,咱们传递了name,让Flask在当前模块内定位资源。json

  3. 接着咱们定义了一些关于/的路由。第一个路由是为根路径/准备的,第二个则对应于相似/shekhar/abc之类的路径。对于/路由,咱们将初始的name设定为Guest。若是用户访问 http://localhost:5000/ ,那么他会看到Hello Guest。若是用户访问 http://localhost:5000/shekhar ,那么他会看到 Hello shekharflask

  4. 最后咱们使用python app.py命令来启动开发服务器,以运行应用。咱们把上面的代码复制到app.py文件中。咱们同时经过Debug=True开启了调试,这样当意料以外的状况出现时,浏览器就能够提供一个交互式的调试器。开启调试的另外一个好处是,改动文件 以后,服务会自动从新加载。咱们可让调试器在后台运行,而后继续在咱们的应用上工做。这提供了高效的开发环境。你能够问问Java开发者如何实现自动从新加载 :)segmentfault

关于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 clone https://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/ 访问。

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

相关文章
相关标签/搜索