最近Packtpub找到了我,让我给他们新出版的关于Flask的书写书评。Flask是一个很流行的Python框架。那本书是Ron DuPlain写的《Flask 即时Web开发》。我决定把“30天学习30种新技术”挑战的第三天花在Flask上。在本文中,我首先将介绍Flask框架的一些基本知识,然后提供一个短篇的书评。同样,我也会把示例应用移植到OpenShift上。对于Flask而言我不是一个完全意义上的新手,我也用它创建过示例应用。对我来说,这是一次很好的温习。
给不了解这一系列文章的读者:我正在尝试“30天学习30种新技术”的挑战。每天我会学习一种新技术,然后写一篇文章介绍下我学到了什么,我怎样使用新学的工具。如果一天不够一项技术,我会每天讨论一个关于该项技术的子话题。
有些开发者可能没听说过Flask,我来简单介绍一下吧。Flask是一个基于Python的微型的web开发框架。虽然Flask是微框架,不过我们并不需要像别的微框架建议的那样把所有代码都写到单文件中。毕竟微框架真正的含义是简单和短小。我们可以从单文件架构开始工作,只用需要的特性。等我们渐渐熟悉Flask之后,可以将代码提取成模块,同时学习Flask提供的高级功能。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服务器网关接口”(Web Service Gateway Interface)的缩写,同时也是架设web项目的Python标准。这一行要告诉Flask到哪里去找应用所需的静态资源和模板。在我们的例子中,我们传递了name
,让Flask在当前模块内定位资源。
接着我们定义了一些关于/
的路由。第一个路由是为根路径/
准备的,第二个则对应于类似/shekhar
、/abc
之类的路径。对于/
路由,我们将初始的name
设定为Guest
。如果用户访问 http://localhost:5000/ ,那么他会看到Hello Guest
。如果用户访问 http://localhost:5000/shekhar ,那么他会看到 Hello shekhar
。
最后我们使用python app.py
命令来启动开发服务器,以运行应用。我们把上面的代码复制到app.py
文件中。我们同时通过Debug=True
开启了调试,这样当意料之外的情况出现时,浏览器就可以提供一个交互式的调试器。开启调试的另一个好处是,改动文件 之后,服务会自动重新加载。我们可以让调试器在后台运行,然后继续在我们的应用上工作。这提供了高效的开发环境。你可以问问Java开发者如何实现自动重新加载