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(翻译)
当初翻译的时候,也没有做仔细的校对,有不明白或者存在疑问的,看原文或者发评论。
*
* Copyright (c) 2011 Ubunoon.
* All rights reserved.
*
* email: netubu#gmail.com replace '#' to '@'
* http://www.cnblogs.com/ubunoon
* 欢迎来邮件定制各类验证码识别,条码识别,图像处理等软件
* 推荐不错的珍珠饰品,欢迎订购 * 宜臣珍珠(淡水好珍珠) */