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

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

编者注:我们发现了比较有趣的系列文章《30天学习30种新技术》,准备翻译,一天一篇更新,年终礼包。以下是第三天的内容。


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

image.png

给不了解这一系列文章的读者:我正在尝“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 " + name

if __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前我们需要安装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 clonehttps://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/ 访问。

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

相关文章
|
2天前
|
API 数据库 开发者
Flask:Python的轻量级Web框架
Flask:Python的轻量级Web框架
9 2
|
13天前
|
数据采集 NoSQL 调度
flask celery python 每月定时任务
flask celery python 每月定时任务
|
13天前
|
Linux Android开发 iOS开发
开源的Python库,用于开发多点触控应用程序
Kivy是一款开源Python库,专为开发多点触控应用设计,支持Android、iOS、Linux、OS X和Windows等平台。本文将指导你使用Kivy创建“Hello World”应用并打包成Android APK。首先通过`pip install kivy`安装Kivy,然后创建并运行一个简单的Python脚本。接着,安装Buildozer并通过`buildozer init`生成配置文件,修改相关设置后,运行`buildozer -v android debug`命令打包应用。完成构建后,你将在`./bin/`目录下找到类似`your-app-debug.apk`的文件。
18 2
|
18天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
73 6
|
17天前
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
在数字化时代,Web API成为连接前后端及构建复杂应用的关键。RESTful API因简洁直观而广受欢迎。本文通过实战案例,介绍Python Web开发中的RESTful API设计哲学与技巧,包括使用Flask框架构建一个图书管理系统的API,涵盖资源定义、请求响应设计及实现示例。通过准确使用HTTP状态码、版本控制、错误处理及文档化等技巧,帮助你深入理解RESTful API的设计与实现。希望本文能助力你的API设计之旅。
42 3
|
18天前
|
JSON API 数据库
从零到英雄?一篇文章带你搞定Python Web开发中的RESTful API实现!
在Python的Web开发领域中,RESTful API是核心技能之一。本教程将从零开始,通过实战案例教你如何使用Flask框架搭建RESTful API。首先确保已安装Python和Flask,接着通过创建一个简单的用户管理系统,逐步实现用户信息的增删改查(CRUD)操作。我们将定义路由并处理HTTP请求,最终构建出功能完整的Web服务。无论是初学者还是有经验的开发者,都能从中受益,迈出成为Web开发高手的重要一步。
40 4
|
16天前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
37 1
|
18天前
|
JSON API 开发者
惊!Python Web开发新纪元,RESTful API设计竟能如此性感撩人?
在这个Python Web开发的新纪元里,RESTful API的设计已经超越了简单的技术实现,成为了一种追求极致用户体验和开发者友好的艺术表达。通过优雅的URL设计、合理的HTTP状态码使用、清晰的错误处理、灵活的版本控制以及严格的安全性措施,我们能够让RESTful API变得更加“性感撩人”,为Web应用注入新的活力与魅力。
37 3
|
18天前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
在Web开发中,安全至关重要,尤其要警惕SQL注入和XSS攻击。SQL注入通过在数据库查询中插入恶意代码来窃取或篡改数据,而XSS攻击则通过注入恶意脚本来窃取用户敏感信息。本文将带你深入了解这两种威胁,并提供Python实战技巧,包括使用参数化查询和ORM框架防御SQL注入,以及利用模板引擎自动转义和内容安全策略(CSP)防范XSS攻击。通过掌握这些方法,你将能够更加自信地应对Web安全挑战,确保应用程序的安全性。
53 3
|
19天前
|
SQL 缓存 数据库
构建高效Web应用:掌握Python中的ORM映射技术
在Web开发中,数据库操作至关重要,但直接编写SQL语句会增加代码复杂度并降低效率。对象关系映射(ORM)技术通过将对象模型映射为数据库表,使开发者能以面向对象的方式处理数据,提升开发效率和代码可维护性。本文以Python和SQLAlchemy为例,介绍ORM的基本概念、安装方法及使用技巧,并展示其在提升Web应用性能方面的优势。通过ORM,开发者可以简化数据库操作,专注于业务逻辑实现,提高开发效率和代码质量。
39 1