您的位置:首页 > 编程语言 > Python开发

[译] 第三天:Flask - 使用Python 和OpenShift 来开发Python web应用

2013-12-12 18:34 603 查看
前言

最近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

在开始之前我们需要在机器上安装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是一个公开的,可扩展的开源服务平台。

前提准备

在建这个应用之前,需要几点准备:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: