0%

Flask初探

flask初探

一个最小的应用:

1
2
3
4
5
6
7
8
# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/') # 通过装饰器声明路由
def hello_world():
return 'Hello World!'

上面的例子中index()函数注册为应用根地址的处理程序。使用app.route()装饰器注册视图函数是首选方法,但不是唯一的方法。Flask还支持一种更传统的方式:使用app.add_url_rule()方法。这个方法最简单的形式接受3个参数:URL、端点名和视图函数。下述示例使用app.add url rule()方法注册index()函数,其作用与前例相同:

1
2
3
def hello_world():
return 'Hello World!'
app.add_url_rule('/', 'index', index)

启动项目

一个完成的应用应该包括一个应用实例、一个路由和一个视图函数,此时运行以上的程序就可以完成一个小型的网页请求:

1
2
3
$ export FLASK_APP=app.py
$ flask run
* Running on http://127.0.0.1:5000/

命令解释:

  • export FLASK_APP=hello.py :设置环境变量,用于指定运行的应用文件,若没有设置,则默认会在项目根目录下找名为wsgi.py 或者 app.py的文件进行启动,否则会报异常。

  • flask run :运行项目

此时访问默认路径http://127.0.0.1:5000/即可进行访问,和Django类似,若想被外部服务器、特定的端口访问,可以使用flask run --host=0.0.0.0 --port=5050,此时外部就可以进行访问。

处理通过 flask run 命令的方式启动项目之外,还可以通过python脚本的方式启动项目

1
2
3
4
5
6
7
8
9
10
11
# 以python脚本方式启动项目
from flask import Flask

app = Flask(__name__)

@app.route('/') # 通过装饰器声明路由
def hello_world():
return 'Hello World!'

if __name__ == "__main__":
app.run()
1
$ python app.py 

该方式在单元测试中用较多。

调试模式

通过设置环境变量 export FLASK_ENV=development 启动调试模式,在该模式下,每次修改代码服务器都会自动重启,并且当应用出错的时候,还会提供调试工具。和Django一样,调试模式不应该应用在生产环境中。

路由

通过使用装饰器 @route() 或者 app.add_url_rule()将视图函数绑定到URL中,可以在URL中添加变量,实现动态路由,除了添加变量之外,还可以指定变量的类型。

类型 解释
string (缺省值) 接受任何不包含斜杠的文本
int 接受正整数
float 接受正浮点数
path 类似 string ,但可以包含斜杠
uuid 接受 UUID 字符串(通用唯一识别码)

path演示:

1
2
3
4
5
6
7
8
from cgi import escape

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
return 'Subpath %s' % escape(subpath)

# 访问 localhost:5000/path/baidu/google
# 返回结果:Subpath baidu/google

uuid演示: UUID是由一组32位数的16进制数字所构成,以连字号分隔的五组来显示,形式为 8-4-4-4-12,总共有 36个字符(即三十二个英数字母和四个连字号)

1
2
3
4
5
6
@app.route('/uuid/<uuid:uuid>')
def show_uuid(uuid):
return 'Uuid %s' % uuid

# 访问 localhost:5000/uuid/123e4567-e89b-12d3-a456-426655440000
# 返回结果:Uuid 123e4567-e89b-12d3-a456-426655440000

关于URL后是否添加 / 的问题

在访问尾部有斜杠的url的时候,若是填写url时没有添加/,则此次的访问会自动重定向到尾部含有斜杠的路径中,所以在访问尾部有斜杠的url的时候,无论手动添加斜杠与否,最终都会访问有斜杠的路径。

在访问尾部没有斜杠的url的时候,要是手动在末尾添加了斜杠,则得到404错误。