flask路由配置
Flask中通过使用route装饰器实现路由访问功能,其路由匹配URL规则基于Werkzeug的路由模块。该模块基于Apache及更早的HTTP服务器主张,希望保证优雅且唯一的URL。其使用格式如下:

from flask import Flask# 导入 Flask 类app = Flask(__name__)# 创建类的实例@app.route("/hello")# 使用 route() 装饰器来告诉 Flask 触发函数 的 URLdef hello_world(): return "<p>Hello, World!</p>"if __name__ == '__main__': app.run()
如上,可以通过访问:http://127.0.0.1:5000/hello.结果如下图所示:

URL规则
route装饰器基于Werkzeug规则实现,我们可以通过把URL的一部分标记为 <variable_name> 就可以在 URL 中添加变量,也可以通过使用converter:variable_name添加一个转换器来指定规则,支持的converter转换器类型如下:
string:接受任何没有斜杠 “/” 的文本(默认类型)
int:接受整数
float:接受浮点数
path:类似默认string,但也接受斜杠
uuid:只接受uuid字符串
any:可以指定多种路径,但是需要传入参数
示例代码如下:
from flask import Flaskfrom markupsafe import escapeapp = Flask(__name__)# URL没有尾部斜杠,访问这个URL就会得到一个 404@app.route('/hello') def hello(): return 'Hello, World'# 访问没有斜杠结尾的URL时会自动进行重定向,帮您在尾部加上一个斜杠@app.route('/projects/')def projects(): return '项目页面'# path变量路由,支持get、post方法@app.route('/user/<username>', methods=['GET', 'POST']) def profile(username): return f'{username}的个人页面'# 指定path参数为int类型,如:/post/123@app.route('/post/<int:post_id>') def show_post(post_id): return f'文章编号 {post_id}'# 展示/path/之后的子路径地址@app.route('/path/<path:subpath>')def show_subpath(subpath): return f'子路径 {escape(subpath)}'if __name__ == '__main__': app.run()
启动服务后,访问的记录如下图所示:

URL 构建
url_for()可以用于构建指定函数的URL,其使用格式:url_for(,dicts),且url_for会自动换衣特殊字符和unicode编码数据,而无需自己构建。
from flask import url_for,Flaskfrom markupsafe import escapeapp = Flask(__name__)@app.route('/hello')def hello(): return 'hello world'@app.route('/getUserById')def getUser(id): return f'当前用户Id:{id}'@app.route('/user/<username>')def user(username): return f'访问者:{username}'@app.route('/path/<path:subpath>')def show_subpath(subpath): return f'子路径 {escape(subpath)}'with app.test_request_context(): print(url_for('hello')) print(url_for('getUser',id=1000)) print(url_for('user',username="穆勒")) print(url_for('show_subpath', subpath='subpath/b'))
运行结果如下图所示:

Flask中通过使用route装饰器实现路由访问功能,其路由匹配URL规则基于Werkzeug的路由模块。该模块基于Apache及更早的HTTP服务器主张,希望保证优雅且唯一的URL。其使用格式如下:

from flask import Flask# 导入 Flask 类app = Flask(__name__)# 创建类的实例@app.route("/hello")# 使用 route() 装饰器来告诉 Flask 触发函数 的 URLdef hello_world(): return "<p>Hello, World!</p>"if __name__ == '__main__': app.run()
如上,可以通过访问:http://127.0.0.1:5000/hello.结果如下图所示:

URL规则
route装饰器基于Werkzeug规则实现,我们可以通过把URL的一部分标记为 <variable_name> 就可以在 URL 中添加变量,也可以通过使用converter:variable_name添加一个转换器来指定规则,支持的converter转换器类型如下:
string:接受任何没有斜杠 “/” 的文本(默认类型)
int:接受整数
float:接受浮点数
path:类似默认string,但也接受斜杠
uuid:只接受uuid字符串
any:可以指定多种路径,但是需要传入参数
示例代码如下:
from flask import Flaskfrom markupsafe import escapeapp = Flask(__name__)# URL没有尾部斜杠,访问这个URL就会得到一个 404@app.route('/hello') def hello(): return 'Hello, World'# 访问没有斜杠结尾的URL时会自动进行重定向,帮您在尾部加上一个斜杠@app.route('/projects/')def projects(): return '项目页面'# path变量路由,支持get、post方法@app.route('/user/<username>', methods=['GET', 'POST']) def profile(username): return f'{username}的个人页面'# 指定path参数为int类型,如:/post/123@app.route('/post/<int:post_id>') def show_post(post_id): return f'文章编号 {post_id}'# 展示/path/之后的子路径地址@app.route('/path/<path:subpath>')def show_subpath(subpath): return f'子路径 {escape(subpath)}'if __name__ == '__main__': app.run()
启动服务后,访问的记录如下图所示:

URL 构建
url_for()可以用于构建指定函数的URL,其使用格式:url_for(,dicts),且url_for会自动换衣特殊字符和unicode编码数据,而无需自己构建。
from flask import url_for,Flaskfrom markupsafe import escapeapp = Flask(__name__)@app.route('/hello')def hello(): return 'hello world'@app.route('/getUserById')def getUser(id): return f'当前用户Id:{id}'@app.route('/user/<username>')def user(username): return f'访问者:{username}'@app.route('/path/<path:subpath>')def show_subpath(subpath): return f'子路径 {escape(subpath)}'with app.test_request_context(): print(url_for('hello')) print(url_for('getUser',id=1000)) print(url_for('user',username="穆勒")) print(url_for('show_subpath', subpath='subpath/b'))
运行结果如下图所示:
