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

给不了解这一系列文章的读者:我正在尝试“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 " + nameif __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前我们需要安装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是一个开源、公开、可伸缩的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/ 访问。

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


原文 Day 3: Flask--Instant Python Web Development with Python and OpenShift
翻译 SegmentFault

from: http://segmentfault.com/a/1190000000351512

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

  1. python 模板引擎 对比_Python Web开发模板引擎优缺点总结

    做 Web 开发少不了要与模板引擎打交道.我陆续也接触了 Python 的不少模板引擎,感觉可以总结一下了. 一.首先按照我的熟悉程度列一下: pyTenjin:我在开发 Doodle 和 91 外教 ...

  2. python:实现简单的web开发demo

    server.py代码: #!/bin/python #-*- coding: UTF-8 -*- #文件名:server.py #create by wzh 2017/10/26import soc ...

  3. 你评论,我赠书~【哈士奇赠书 - 13期】-〖Python程序设计-编程基础、Web开发及数据分析〗参与评论,即可有机获得

    大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区.

  4. Flask 框架 是 Python 中最流行的 Web 框架之一

    Flask 是 Python 中最流行的 Web 框架之一,以小巧.灵活.可扩展性强著称, 熟练掌握Flask 框架,深入解析Flask 框架的精髓,希望掌握Flask 最佳实践项目. Flask W ...

  5. php和python web开发-初入Web开发,php、python和ruby应该学哪个?

    php.python和ruby都适合做WEB开发,对于web开发初学者来说,最大的问题就是学习哪种编程语言更适合未来的职业发展并且更有前景.要选择一门适合自己的语言,首先你要考虑php.python和 ...

  6. pythonweb开发-Python Web开发从入门到精通

    Python Web开发从入门到精通循序渐进地讲解了Python Web开发的核心知识,并通过具体实例的实现过程演示了Web开发程序的流程.Python Web开发从入门到精通共15章,内容包括Pyt ...

  7. 【python】 web开发入门

    进入Web开发 现在你完成了Python忍者训练,准备深入Ptyhon的Web开发,但现在的问题是有很多的框架,从中选择最好的框架非常困难,但从初学者的角度出发,Flask基本Web框架将非常适合We ...

  8. python web 开发教程下载_Python Web开发从入门到精通

    Python Web开发从入门到精通循序渐进地讲解了Python Web开发的核心知识,并通过具体实例的实现过程演示了Web开发程序的流程.Python Web开发从入门到精通共15章,内容包括Pyt ...

  9. python web开发-Python Web开发从入门到精通

    Python Web开发从入门到精通循序渐进地讲解了Python Web开发的核心知识,并通过具体实例的实现过程演示了Web开发程序的流程.Python Web开发从入门到精通共15章,内容包括Pyt ...

最新文章

  1. 神经网络推理_分析神经网络推理性能的新工具
  2. python语言易错知识点强化
  3. JavaScript函数调用规则
  4. 求职,北京,.netGIS
  5. Linux RPM、YUM、APT包管理工具
  6. 谈谈遵守公司作战纪律
  7. 工业大数据的应用有哪些
  8. 【开源】微信小程序、小游戏以及 Web 通用 Canvas 渲染引擎 - Cax
  9. 什么是垃圾回收(转)
  10. html常用的英文字体,50款设计必备 英文字体
  11. Mendix App推送服务之实践分享
  12. moodle环境安装linux,在Ubuntu 18.04/Debian 9上安装Moodle的步骤
  13. mt7620 eeprom 小米_小米CC9 Pro搭载1亿像素传感器,新款手表引关注;谷歌称微信软件性能太差;iPhone明年或配备120Hz屏幕...
  14. 淘宝数据魔方技术架构解析
  15. 缓存(Cookie,SessionStorage,localStorage)详解
  16. A1、A2、A3、A4纸都是多大尺寸
  17. 【生活常识】如何能安逸的活着?
  18. Java 操作excel 插入删除列,插入删除图片
  19. 两周!从入门到第15到第3!小白和你一起入门NLP
  20. 按键精灵---- 手机按键利用插件读取文本

热门文章

  1. FaceNet--Google的人脸识别
  2. 百度吴恩达:图像和音视频搜索是人工智能新方向
  3. 快递信息css3手风琴代码_用纯CSS实现手风琴效果的示例代码
  4. Visual Studio 2013开发 mini-filter driver step by step (4) - 获取文件名
  5. Oracle-绑定变量binding variable解读
  6. 区分JAVA中的对象和引用
  7. sob攻略超详细攻略_重庆旅游攻略~超详细攻略大全!必看篇!!
  8. halcon知识:差分模板variation_model
  9. Matlab实用程序--图形应用-双y轴图形的绘制
  10. ubuntu16.04安装ssh服务,远程登录