Python的Flask框架路由实现详解
作者:晚风吹儿
这篇文章主要介绍了Python的Flask框架路由实现详解,在启动程序时,python解释器会从上到下对代码进行解释,当遇到装饰器时,会执行,并把函数对应的路由以字典的形式进行存储,当请求到来时,即可根据路由查找对应要执行的函数方法,需要的朋友可以参考下
一、路由
通过URL访问一个网页,使用 route() 装饰器把函数绑定到 URL
使用 route() 装饰器把函数绑定URL示例:
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Index Page' @app.route('/hello') def hello(): return 'Hello, World' if __name__ == '__main__': app.run()
运行flask后,可打开本地路径进行访问
访问路径://127.0.0.1:5000/
访问路径://127.0.0.1:5000/hello
二、URL变量
1、变量规则
通过把 URL 的一部分标记为 <variable_name> 就可以在 URL 中添加变量。标记的部分会作为关键字参数传递给函数。通过使用 converter:variable_name ,可以选择性的加上一个转换器,为变量指定规则
from markupsafe import escape from flask import Flask app = Flask(__name__) @app.route('/user/<username>') def show_user_profile(username): # show the user profile for that user return f'User {escape(username)}' @app.route('/post/<int:post_id>') def show_post(post_id): # show the post with the given id, the id is an integer return f'Post {post_id}' @app.route('/path/<path:subpath>') def show_subpath(subpath): # show the subpath after /path/ return f'Subpath {escape(subpath)}' if __name__ == '__main__': app.run()
url支持的变量类型:
类型 | 说明 |
string | (缺省值) 接受任何不包含斜杠的文本 |
int | 接受正整数 |
float | 接受浮点数 |
path | 类似 string ,但可以包含斜杠 |
uuid | 接受 UUID 字符串 |
访问路径//127.0.0.1:5000/user/盘盘
2、唯一的 URL / 重定向行为
代码如下(示例):
@app.route('/projects/') def projects(): return 'The project page' @app.route('/about') def about(): return 'The about page'
projects 的 URL 是中规中矩的,尾部有一个斜杠,看起来就如同一个文件夹。访问一个没有斜杠结尾的 URL ( /projects )时 Flask 会自动进行重定向,自动在尾部加上一个斜杠( /projects/ )
about 的 URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠( /about/
)就会得到一个 404 “未找到” 错误。这样可以保持 URL 唯一,并有助于搜索引擎重复索引同一页面
3、URL 构建
url_for() 函数用于构建指定函数的 URL。 它把函数名称作为第一个 参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量
from flask import url_for app = Flask(__name__) @app.route('/') def index(): return 'index' @app.route('/login') def login(): return 'login' @app.route('/user/<username>') def profile(username): return f'{username}\'s profile' with app.test_request_context(): print(url_for('index')) print(url_for('login')) print(url_for('login', next='/')) print(url_for('profile', username='John Doe'))
输出:
/
/login
/login?next=/
/user/John%20Doe
到此这篇关于Python的Flask框架路由实现详解的文章就介绍到这了,更多相关Flask 路由内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!