Life with teacher Lemon.

Flask 开发笔记-路由解析

2021.01.09 | 共 745 字,阅读需约 2 分钟.

在上一篇 Flask 学习笔记-牛刀小试 中,我们给出了最简单的 web 应用的写法,应用的写法,下面我们来解读一下 Flask 是如何进行路由解析的。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world(name='Lemon'):
    return 'Hello {}'.format(name)

应用实例化

Flask 应用的实例化是通过导入 Flask 类,并初始化该类实现的。

# 导入类 Flask
from flask import Flask
# 实例化
app = Flask(__name__)

视图函数

实例化之后,我们需要实现一个可以访问的 URL 路径,在 Flask 中是通过定义视图函数来实现的,比如这里定义的函数 hello 就是一个视图函数,并且这个视图函数的名称是自由定义的,但必须在该文件内部唯一。

@app.route('/<name>')
def hello(name):
    return 'Hello {}'.format(name)

可以访问的 URL 就是由路由 @app.route('/') 来定义实现的。

当你访问 http://localhost:5005/Lemon 时,页面响应 Hello Lemon

路由解析

这里只是传递了字符串,那么传递其他类型的参数时,路由都有哪些写法呢?我们来罗列一下

类型 路由
string 不包含斜杠的文本
int 整数
float 浮点数
path 类似string,可以包含斜杠等特殊字符
uuid 支持传递一个uuid格式的字符串

string 类型的路由写法

@app.route('/<name>')
def hello(name):
    return 'Hello {}'.format(name)

访问 http://localhost:5005/Lemon , 页面响应 Hello Lemon


int 类型的路由写法

@app.route('/int/<int:num>')
def hello(num):
    return 'Hello {}'.format(num)

访问 http://localhost:5005/int/2021 , 页面响应 Hello 2021


float 类型的路由写法

@app.route('/float/<float:num>')
def hello_float(num):
    return 'Hello {}'.format(num)

访问 http://localhost:5005/float/3.1415926 , 页面响应 Hello 3.1415926


path 类型的路由写法

@app.route('/path/<path:name>')
def hello_path(name):
    return 'Hello {}'.format(name)

访问 http://localhost:5005/path/一蓑/烟雨 , 页面响应 Hello 一蓑/烟雨


uuid 类型的路由写法

@app.route('/uuid/<uuid:name>')
def hello_uuid(name):
    return 'Hello {}'.format(name)

访问 http://localhost:5005/uuid/一蓑/烟雨 , 页面响应 Not Found,参数格式不正确。

此时必须传递 uuid 格式的字符串,正确访问 http://localhost:5005/uuid/9503776e-3b43-4b06-be3f-1d99cbc06fc6


视图函数指定多个路由

如果我想在不传递的参数的时候,使用默认值来处理响应,该如何定义路由呢?我们可以针对视图函数指定多个路由规则,并指定默认值,写法如下

@app.route('/')
@app.route('/<name>')
def hello(name='Lemon'):
    return 'Hello {}'.format(name)

访问 http://localhost:5005/ , 页面会响应 Hello Lemon


好了,关于 Flask 路由解析我们就介绍到这里。

发表评论
今日诗词