代码改变世界

The Flask Mega(教程一 - Hello World)

2013-01-17 12:06  ubunoon  阅读(4728)  评论(2编辑  收藏  举报

原文链接:

背景

本人是一个有16年不同语言编写复杂应用经历的程序员,第一次使用是为了能够绑定C++库更加高效的使用。

除Python外,我还写过PHP,Ruby, Smalltalk以及你可能不信的C++。 这些组合中,我发现Python/Flask组合是其中最灵活的一个。

应用

接下来将要开发的app是一个有微博服务器特征的应用,我将分为十几个小节来介绍此app开发,下文将称此app成为microblog。我认为这是一个好的注意。

下面是我将为此app创建的几个要点:

  • 用户管理,包括管理登陆,session,用户角色,profile以及用户的avatars
  • 数据库管理,包括迁移处理
  • 网页Form支持,包含验证支持
  • 对于长列表项的分页支持
  • 全文搜索
  • 邮件通知用户
  • HTML以及RSS模板
  • 多语言支持
  • Caching以及其他性能优化
  • 开发和生产服务的调试技术
  • 生产服务上的安装

正如你看到的,我将创建一个完美的整个应用,希望该app结束时,将成为编写其他web应用的一个模板。

需求

需要一台安装Python2.6或2.7的机器,我们创建的应用可以在Window, OS X和Linux上运行。

该教程假定你比较服务器终端窗口(Windows用户的命令行)以及知道你的操作系统文件管理的基本命令行。如果你不清楚这些,我建议你在使用命令行前学习一下如何创建目录,复制文件等命令。

最后,你应该懂一些编写兼容的Python代码,最好也熟悉 Python的一些模块和包

安装Flask

好了,我们开始了!

如果你还没有安装Python,此处下载并安装 Python2.7

接下来我们需要安装Flask和一些使用到的扩展,我比较喜欢的方式是创建一个 虚拟环境(virtual environment). 并将所有的内容都装在此处,这样你的主Python安装将不会受到影响。此外,你也不需要root权限来安装应用和扩展。

打开一个终端,选择一个将要放置应用的位置,并创建一个microblog的文件夹。

然后下载 virtualenv.py,并将其放到microblog目录下 使用下面的命令创建虚拟环境

python virtualenv.py flask

上面的命令将在flask目录下创建一个完整的python环境。

虚拟环境可以按意愿被激活或者取消激活,作为激活的环境,将在系统的path环境添加本地的bin目录,因此如果输入python将得到的虚拟环境下的版本而不是系统中的版本。 我个人非常不喜欢这个特征,因此我从来不激活任何我的环境,相反,我仅通过输入路径名来调用python解释器。

如果你使用Linux, OS X或Cpygwin,安装flask及其扩展使用下面的命令,一个接一个:

flask/bin/pip install flask
flask/bin/pip install flask-login
flask/bin/pip install flask-openid
flask/bin/pip install flask-mail
flask/bin/pip install flask-sqlalchemy
flask/bin/pip install sqlalchemy-migrate
flask/bin/pip install flask-whooshalchemy
flask/bin/pip install flask-wtf
flask/bin/pip install flask-babel
flask/bin/pip install flup

(备注:在国内,直接这么安装,速度会比较慢,可以在install后添加一个参数 --index-url http://c.pypi.python.org/simple)

如果是Windows系统,命令稍微有些不同

flask\Scripts\pip install flask
flask\Scripts\pip install flask-login
flask\Scripts\pip install flask-openid
flask\Scripts\pip install flask-sqlalchemy
flask\Scripts\pip install sqlalchemy-migrate
flask\Scripts\pip install flask-whooshalchemy
flask\Scripts\pip install flask-wtf
flask\Scripts\pip install flask-babel
flask\Scripts\pip install flup

这些命令将下载和安装我们应用中所要的所有包。

注意SQLAlchemy: 版本0.8与之前的版本是不兼容的。为此,sqlalchemy-migrate模块将不会在0.8版本下运行。为此我们需要强制安装0.7.9的版本。使用下面的命令

flask/bin/pip uninstall sqlalchemy
flask/bin/pip install sqlalchemy==0.7.9

一旦sqlalchemy-migrate更新到支持0.8,我们最好应该在最新版本上使用该模块。

Windows用户需要多一个步骤,如果你有敏锐的观察能力,你将发现flask-mail在Windows命令行列表中没有包含,该扩展在Windows中不包含,因此我们需要通过通过下面的方式来安装

flask\Scripts\pip install --no-deps lamson chardet flask-mail

我将不详细解释为和如此,如果你需要了解更多信息,请查看flask-mail文档

如果所有的包安装成功,请删除不再需要的virtualenv.py。

Flask中的“Hello, World”

如果你已经在microblog文件夹下包含了flask子目录,该子目录存在python解释其以及Flask框架和我们将开发应用需要的扩展。现在我们将编写我们第一个web应用。

当你cd到microblog目录时,为app创建下面的基本目录结构:

mkdir app
mkdir app/static
mkdir app/templates
mkdir tmp

app目录将是放置我们应用的包,static子目录将包含整个静态文件,如images,javascripts,以及stylesheets, templates子目录顾名思义就是放置我们的模板文件。

让我们开始为app包创建一个简单的脚本(文件 app/init.py):

from flask import Flask

app = Flask(__name__)
from app import views

上面的脚本创建一个应用对象(Flask类),然后导入我们还未编写的views模块。

views是处理web浏览器访问时请求的响应。在Flask中views采用Python函数编写方式,每个views函数映射为一个或者或个请求的URL。

开始编写地一个view函数(文件 app/views.py):

from app import app

@app.route('/')
@app.route('/index')
def index():
    return "Hello, World!"

该view相当的简单,仅返回一个字符串,该字符串将在客户端的浏览器上显示。两个在函数上的route的修饰符将创建urls / 和 /index的映射到该函数。

最后一个步骤是创建一个启动开发的web server整个应用的脚本,然后通过该脚本运行web app。我们称此脚本为run.py

#!flask/bin/python
from app import app
app.run(debug = True)

该脚本简单的从我们的app包中导入app变量,然后调用app变量的run方法启动服务,记住app变量包含一个整我们之前创建的Flask实例。

为启动应用,需要运行该脚本。在OS X , Linux以及Cygwin中,在运行该脚本前需要通知系统这是一可执行文件:

chmod a+x run.py

该脚本可以通过下面方式简单运行:

./run.py

在Windows中处理稍微有些不一样,Windows中没有办法让系统知道该文件是一个可执行文件。因此你需要将此文件作为Python参数:

flask/Scripts/python run.py

服务器初始化后将监听5000端口,然后打开你的浏览器,输入下面的URL地址:

http://localhost:5000

此外也可以通过下面的URL:

http://localhost:5000/index

你看到在action中的route映射了么?第一个URL映射到/,第二个映射到/index。两个routes都关联到自己的view函数中,因此将产生相同的结果。 如果你输入另外的route,你将得到错误,因此这两个映射到view函数中。

当你想要结束server运行,使用Ctrl-C停止。

在此篇教程中,主要介绍了一些安装。

为了你可以懒得输入的这些代码,可以在此处下载该 代码

注意在你运行应用前,你仍旧需要按照之前的介绍安装Flask。

接下来

下一届我们将使用HTML模板修改我们简单的应用。

下一章见。

原文

DamonChen(翻译)

 

 

当初翻译的时候,也没有做仔细的校对,有不明白或者存在疑问的,看原文或者发评论。