[译] 第三天:Flask - 使用Python 和OpenShift 来开发Python web应用
前言
最近Packtpub联系到我,让我给他们发布在Falsk上的新书写书评,一本关于很流行的Python 框架的书。书名叫《Flask及时Web开发》Instant Flask Web Development,作者是Ron DuPlain. 我技术挑战的第三天,决定来学学Flask.在这篇博客里,首先来谈谈Flask框架基础,再提供一小段书评。我会在OpenShift上给出一个示例程序。Flask对我来说并不陌生,以前用它写过几个应用。这次就当温故知新。
给还不知道这个系列的小伙伴说明一下,我在进行一项30天学习30种技术的挑战,每天我会学一门新技术,再把所学写成博客,并介绍怎样使用新工具。有些技术不能在一天覆盖完,我会多花几天,分开讨论不同的章节。
什么是Flask?
我来给还不了解Flask的小伙伴介绍一下。Flask是一个轻量级的web应用框架,使用Python编写。这里的微框架并不像其他所说的所有的代码都放在一个文件里面。它实际是指简单的小型框架。我们可以从一个简单的文件架构开始。等熟悉了之后,可以使用它的模板和扩展功能。Flask并没有提关于文件架构的建议,不过待会我们可以来讨论一下这书里建议的文件架构。
用一段代码来直观感受一下吧:
from flask import Flask app = Flask(__name__) @app.route('/', defaults={'name':"Guest"}) @app.route('/' , methods=['GET']) def say_hello(name): return "Hello " + name if __name__ == "__main__": app.run(debug=True)
这是一段简单又直观的代码,来欣赏一下。我们来解析这段精短的代码:
- 第一行,我们导入了Flask类,以便创建Flask 程序的实例。
- 第二行,创建Flask类的实例,这是一个WSGI应用实例。WSGI(Web Service Gateway Interface)指Web服务器网关接口,是搭建Web程序的Python标准。Flask通过参数找到程序的静态文件和模板。在这个示例中,我们通过name 传递,让Flask用当前模块存放资源文件。
- 接着我们定义了几个"/"url映射路径,第一个是跟路径"/",后面一个是和它相关的比如/shekhar,/abc等。对于'/',我们默认设置为访客"Guest"。如果用户对http://localhost:5000/提出请求,他可以看到"Hello Guest"的问候,如果对http://localhost:5000/shekhar请求,则能看到"Hello shekhar".
- 最后我们用python app.py命令来启动服务,运行程序。把以上代码复制到app.py里,通过设置Debug=True启动调试。调试模式下,如果出现未知错误,可以在浏览器里交互调试。调试模式的另外一个好处是它可以自动加载更新。我们可以在后台环境开启调试,并保持应用继续工作。这就提供了一个很好的生产环境。随便问问Java开始者自动加载的好处:)
有几点关于Flask值得了解的:
- Flask由Armin Ronacher在2010年创建。
- Flask的灵感来自Sinatra(创建简洁Web程序的Ruby框架)。
- Flask基于两个库,Werkzeug(Python的WSGI功具库)和Jinja2(模板引擎)。
- Flask带有合理缺省值的配置值和惯例。
我为什么关注Flask?
我学习Flask的原因:
- 易学:我做了8年Java软件开发,学习Python基础后,我想做做Web开发。像我上面描述的示例一样,Flask是一款简单易用的框架,它自然符合我的需要,也让我更快进行的开发。
- 有非常活跃又充满朝气的社区:我问了几个用Python的小伙伴,他们都推荐我从Flask开始。谷歌搜索结果也都说Flask是最适合的Python Web 开发框架。
- 快速创建REST API: 我想学一种能简单实现REST[REpresentational State Transfer,表述性状态转移]服务的框架,上面的示例了用Flask jsonify方法能很方便的返回json文档。以后的Web应用架构基于符合REST后端,用新式JavaScript MV*框架的前端。
- 280多页完美的文档介绍,包含很多示例。
- Flask遵循惯例优先原则。它有很多合理的缺省值,比如静态资源放静态文件中。大部分默认值可以重写。
关于《Flask及时Web开发》的细节
现在我们来看看这本书的一些相关信息。
- 这本书如菜谱一样,每部分你都能参照进行程序开发,总共78页。
- 只需11美元。
- 这本书由Flask核心成员编写。
我对这本书感兴趣的地方
- 从搭建虚拟环境开始是使用python的正确方法,避免破坏python主环境。使得我们可以在不同的程序用不同版本的python.
- 应用最佳实践,如程序适合的文件架构,即时Flask是微架构,我们也要对程序定义合适的层,这对开发企业级应用有好处。
- 这本书讨论了我还不了解的Flask功能和扩展,讲述了Flask-Script脚本扩展,Flask使得Flask程序可以支持写外部脚本。
- 详细讲述了WTForms, WTForms对写表单程序有帮助。
有待改进的地方
- 有几章写的不是很清晰,对初学者没有提供太多的上下文。我不明白为什么要在Flask应用里用二级域名。
- 没有像Postgresql或Mysql这样的真实数据库。虽然作者提到了用其他数据库URI连接PostgreSQL和Mysql,但是我没有看到示例。我跟喜欢用真实数据库而不是内置的。使用内置数据库的好处是对初学者更简单上手。
- 没有讨论REST服务:REST服务对如今程序至关重要。用Flask的一个优势就在于我们能很方便的采用REST服务。
- 没有像Flask使用MongoDB那样讲怎样使用NoSQL.
- Flask框架支持很棒的单元测试,作者没有提到。
- 没有提到云开发。在这篇博客里,我会展示一下怎样用OpenShift来发布书里的示例应用。
我该买这本书吗?
这本书很适合Flask初学者,且想写传统的基于RDBMS 的Web应用。
开始使用Flask
在开始之前我们需要在机器上安装Python和virtualenv. 我这里使用的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是一个公开的,可扩展的开源服务平台。
前提准备
在建这个应用之前,需要几点准备:
- 在OpenShift上注册。OpenShift完全免费,红帽给每个用户免费提供了3个Gears来运行程序。目前,这个资源分配合计有每人1.5GB内存,3GB磁盘空间。
- 在本机安装rhc 客户端工具,rhc是ruby gem包,所以你需要安装1.8.7或以上版本的ruby。输入
sudo gem install rhc
来安装rhc,如果你已经安装了,确保那是最新的。要更新rhc,输入
sudo gem update rhc.
想了解rhc command-line 工具,更多帮助参考https://openshift.redhat.com/community/developers/rhc-client-tools-install。
- 用rhc 安装命令安装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/
这就是今天的,继续给反馈吧!
原文:https://www.openshift.com/blogs/day-3-flask-instant-python-web-development-with-python-and-openshift