Flask学习之一 hello world
本人电脑环境:
系统:linux
python: 2.7.3
这里是按照Miguel Grinberg的教程来弄的~为什么有教程了我还要写?因为我想记录一下学习心得啊,连简单的Hello World我也出现了点问题,就把问题记录下来了。
英文渣的我是选择网上的中文翻译,以下是几个地址:
博客园的:http://www.cnblogs.com/ubunoon/archive/2013/01/17/2864224.html
开源中国社区的:http://www.oschina.net/translate/the-flask-mega-tutorial-part-i-hello-world
第三个:http://www.pythondoc.com/flask-mega-tutorial/index.html
另外的参考:
欢迎来到flask的世界:http://dormousehole.readthedocs.org/en/latest/
一、安装flask
当然python2.7是要有的,ubuntu下python好像是自带的,不是自带也没关系,反正linux使用包安装管理器安装起来很方便。
说最好安装一个虚拟环境,好处是你自已主要的Python安装环境则不会受影响,以及,用这种方式来安装时不需要root管理员权限。
教程里说直接下载 virtualenv.py 就好,但事实上我只下载这个文件没有成功安装好虚拟环境。
先到 https://pypi.python.org/pypi/virtualenv 这里下载最新的virtualenv版本,下载下来是一个文件夹,解压之后把所有东西放到你新建的那个文件夹(我用的文件夹名字就是教程里面的microblog,这个文件夹就是我们应用的最上层文件夹)里面,再执行
python virtualenv.py flask
这样就在flask目录里面创建一个完整的Python环境。
接下来就按照使用以下命令安装 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
多数人应该是直接就成功了,但是我在过程中出现过类似如下错误:
致命错误: Python.h:没有那个文件或目录 编译中断。 error: Setup script exited with error: command 'gcc' failed with exit status 1
解决方法是安装python-dev,这是Python的头文件和静态库包:
sudo apt-get install python-dev
根据教程里面的说法:
关于SQLAlchemy,需要注意:SQLAlchemy v0.8 并不兼容之前的一些版本。尤其是sqlalchemy-migrate模块无法和v0.8一起使用。所以我们需要强制安装v0.7.9,命令如下:
flask/bin/pip uninstall sqlalchemy flask/bin/pip install sqlalchemy==0.7.9
然后安装成功之后,就可以把除了flask文件夹之外的东西删除了,当然不删也没有关系。
二、通过Flask创建 "Hello, World"
首先来到你刚才创建的microblog文件夹,创建我们应用的文件结构
mkdir app mkdir app/static mkdir app/templates mkdir tmp
我们的应用程序包是放置于 app 文件夹中。
子文件夹 static 是我们存放静态文件像图片,JS文件以及样式文件。
子文件夹 templates 显然是存放模板文件。
让我们开始为app包创建一个简单的脚本(文件 app/__init__.py):
from flask import Flask app = Flask(__name__) from app import views
注意这个__init__.py是放在app文件夹下面的。
上面的脚本简单地创建应用对象,接着导入视图模块,该模块我们暂未编写。
视图是响应来自网页浏览器的请求的处理器。在 Flask 中,视图是编写成 Python 函数。每一个视图函数是映射到一个或多个请求的 URL。
接下来是第一个视图函数(文件 app/views.py ):
from app import app @app.route('/') @app.route('/index') def index(): return "Hello, World!"
注意这个文件也是放到app文件夹下面的。
这个视图是非常简单,它只是返回一个字符串,在客户端的网页浏览器上显示。两个 route 装饰器创建了从网址 / 以及 /index 到这个函数的映射。
route() 装饰器用于把一个函数绑定到一个 URL。
上面这句话的意思是 你访问 http://127.0.0.1:5000/index 或者http://127.0.0.1:5000 浏览器显示出来的内容是一样的。显然我们这里能看到的就是 Hello, World! 这样的字符串。
教程说:能够完整工作的 Web 应用程序的最后一步是创建一个脚本,启动我们的应用程序的开发 Web 服务器。让我们称这个脚本为 run.py,并把它置于根目录
就是说 run.py 这个文件要放到microblog文件夹下,代码如下:
#!flask/bin/python from app import app app.run(debug = True)
教程说这个脚本简单地从我们的 app 包中导入 app 变量并且调用它的 run 方法来启动服务器。请记住 app 变量中含有我们在之前创建的 Flask 实例。
完成上面的步骤后ls的结果如下:
注意.pyc文件是我执行python后出现的文件
接下来就需要执行这个脚本:
chmod a+x run.py ./run.py
执行后终端会出现:
在服务器初始化后,它将会监听 5000 端口等待着连接。现在打开你的网页浏览器输入以下两个URL的任意一个:
http://localhost:5000 http://localhost:5000/index
打开浏览器之后你可能会在终端看到:
你可以通过 Ctrl-C 来终止服务器
三、关于调试
如果你 打开调试模式,那么服务器会在修改应用之后自动重启,并且当应用出错时还会提供一个 有用的调试器。
app.run(debug=True)
另一种是作为参数传递给 run 方法,这样在修改应用后就不用重启服务器。