[译] 第三天: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)

这是一段简单又直观的代码,来欣赏一下。我们来解析这段精短的代码:

  1. 第一行,我们导入了Flask类,以便创建Flask 程序的实例。
  2. 第二行,创建Flask类的实例,这是一个WSGI应用实例。WSGI(Web Service      Gateway Interface)Web服务器网关接口,是搭建Web程序的Python标准。Flask通过参数找到程序的静态文件和模板。在这个示例中,我们通过name 传递,让Flask用当前模块存放资源文件。
  3. 接着我们定义了几个"/"url映射路径,第一个是跟路径"/",后面一个是和它相关的比如/shekhar,/abc等。对于'/',我们默认设置为访客"Guest"。如果用户对http://localhost:5000/提出请求,他可以看到"Hello      Guest"的问候,如果对http://localhost:5000/shekhar请求,则能看到"Hello      shekhar".
  4. 最后我们用python app.py命令来启动服务,运行程序。把以上代码复制到app.py里,通过设置Debug=True启动调试。调试模式下,如果出现未知错误,可以在浏览器里交互调试。调试模式的另外一个好处是它可以自动加载更新。我们可以在后台环境开启调试,并保持应用继续工作。这就提供了一个很好的生产环境。随便问问Java开始者自动加载的好处:)

 

有几点关于Flask值得了解的: 

  1. FlaskArmin Ronacher2010年创建。
  2. Flask的灵感来自Sinatra(创建简洁Web程序的Ruby框架)
  3. Flask基于两个库,Werkzeug(PythonWSGI功具库)Jinja2(模板引擎)
  4. Flask带有合理缺省值的配置值和惯例。

我为什么关注Flask

我学习Flask的原因:

  1. 易学:我做了8年Java软件开发,学习Python基础后,我想做做Web开发。像我上面描述的示例一样,Flask是一款简单易用的框架,它自然符合我的需要,也让我更快进行的开发。
  2. 有非常活跃又充满朝气的社区:我问了几个用Python的小伙伴,他们都推荐我从Flask开始。谷歌搜索结果也都说Flask是最适合的Python Web 开发框架。
  3.  快速创建REST API: 我想学一种能简单实现REST[REpresentational      State Transfer,表述性状态转移]服务的框架,上面的示例了用Flask jsonify方法能很方便的返回json文档。以后的Web应用架构基于符合REST后端,用新式JavaScript MV*框架的前端。
  4. 280多页完美的文档介绍,包含很多示例。
  5. Flask遵循惯例优先原则。它有很多合理的缺省值,比如静态资源放静态文件中。大部分默认值可以重写。

关于《Flask及时Web开发》的细节

现在我们来看看这本书的一些相关信息。

  1. 这本书如菜谱一样,每部分你都能参照进行程序开发,总共78页。
  2. 只需11美元。
  3. 这本书由Flask核心成员编写。

我对这本书感兴趣的地方

  1. 从搭建虚拟环境开始是使用python的正确方法,避免破坏python主环境。使得我们可以在不同的程序用不同版本的python.
  2. 应用最佳实践,如程序适合的文件架构,即时Flask是微架构,我们也要对程序定义合适的层,这对开发企业级应用有好处。
  3. 这本书讨论了我还不了解的Flask功能和扩展,讲述了Flask-Script脚本扩展,Flask使得Flask程序可以支持写外部脚本。
  4. 详细讲述了WTForms, WTForms对写表单程序有帮助。

有待改进的地方

  1. 有几章写的不是很清晰,对初学者没有提供太多的上下文。我不明白为什么要在Flask应用里用二级域名。
  2. 没有像PostgresqlMysql这样的真实数据库。虽然作者提到了用其他数据库URI连接PostgreSQLMysql,但是我没有看到示例。我跟喜欢用真实数据库而不是内置的。使用内置数据库的好处是对初学者更简单上手。
  3. 没有讨论REST服务:REST服务对如今程序至关重要。用Flask的一个优势就在于我们能很方便的采用REST服务。
  4. 没有像Flask使用MongoDB那样讲怎样使用NoSQL.
  5. Flask框架支持很棒的单元测试,作者没有提到。
  6. 没有提到云开发。在这篇博客里,我会展示一下怎样用OpenShift来发布书里的示例应用。

我该买这本书吗?

这本书很适合Flask初学者,且想写传统的基于RDBMS Web应用。

开始使用Flask

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

前提准备

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

  1. OpenShift上注册。OpenShift完全免费,红帽给每个用户免费提供了3Gears来运行程序。目前,这个资源分配合计有每人1.5GB内存,3GB磁盘空间。
  2. 在本机安装rhc 客户端工具rhcruby 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。

  3. 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

posted on 2013-12-12 18:34  百花宫  阅读(1796)  评论(0编辑  收藏  举报