2026/5/21 18:11:47
网站建设
项目流程
网站建设微盘下载,汕头室内设计公司排名,wordpress全是博客,长沙建个网站要多少钱路由规则的秘密#xff1a;斜杠#xff08;/#xff09;的玄机- #x1f6a6; 访问优先级#xff1a;Flask如何选择路由#xff1f;- #x1f3af; 参数类型与转换器#xff1a;让URL更智能- #x1f6e0;️ 完整代码示例与实践#x1f5fa;️ 路由#xff1a;你的W…路由规则的秘密斜杠/的玄机- 访问优先级Flask如何选择路由- 参数类型与转换器让URL更智能- ️ 完整代码示例与实践️ 路由你的Web应用导航地图可以把Flask的路由系统想象成你应用内部的导航地图。它定义了用户访问的不同URL地址如 /about, /user/jack应该由哪个“处理函数”来接待并返回响应。没有清晰的路由请求就会迷路返回404。✏️ 如何定义基础与动态路由使用 app.route() 装饰器是定义路由最标准的方式。1. 基础静态路由URL路径是固定的。app.route(/)def index():return 首页app.route(/about)def about():return 关于我们2. 动态路由URL中包含可变部分动态参数用 参数名 表示。这是Flask最强大的特性之一app.route(/user/username)def show_user_profile(username):return f用户{username}app.route(/post/int:post_id)def show_post(post_id):return f文章ID: {post_id}, 类型是{type(post_id)}⚖️ 路由规则的秘密斜杠/的玄机URL结尾的斜杠 / 在Flask路由中具有特殊含义它决定了该路径是“目录”性质还是“文件”性质。- 严格路径末尾无斜杠例如/about。访问/about/会得到404。- 目录路径末尾有斜杠例如/projects/。访问/projects时Flask会自动重定向到/projects/。这常用于资源集合。这个设计是为了保持URL一致性仿照了UNIX-like系统中目录和文件的区别。 访问优先级Flask如何选择路由当你定义了多个相似的路由时Flask遵循“更具体优先”的原则进行匹配类似于编程语言中的变量作用域。app.route(/user/username)def user_info(username):return f通用用户页{username}app.route(/user/admin)def admin_page():return 管理员专属页面# 访问 /user/admin 时会匹配第二个路由admin_page因为它更具体。# 访问 /user/jack 时才匹配第一个动态路由。优先级核心原则- 静态路由优先级高于动态路由。- 在动态路由中更具体的转换器如int:优先级通常高于通用的string类型。 参数类型与转换器让URL更智能默认的动态部分username接收的是字符串但不含斜杠。为了处理其他类型Flask内置了路由转换器。# 内置转换器示例app.route(/user/int:user_id) # 只匹配整数app.route(/price/float:amount) # 只匹配浮点数app.route(/path/path:subpath) # 匹配包含斜杠的字符串常用于路径app.route(/uuid/uuid:uuid_val) # 只匹配UUID格式字符串转换器做了什么- 类型验证 确保URL参数符合预期格式不符合则返回404。- 类型转换 将URL中的字符串自动转换成Python类型如int, float再传给视图函数。️ 完整代码示例与实践将上面所有知识点整合到一个示例应用中方便你复制和实验。from flask import Flaskapp Flask(__name__)# 1. 基础静态路由app.route(/)def home():return h1欢迎来到首页/h1app.route(/about)def about():return 关于我们# 2. 动态路由与转换器app.route(/user/username)def profile(username):return f用户主页{username}app.route(/post/int:post_id)def post_detail(post_id):return f正在查看整数ID为 {post_id} 的文章。app.route(/price/float:amt)def show_price(amt):return f价格是{amt} 元。# 3. 演示优先级app.route(/section/about)def section_about():return 这是一个静态路由 /section/aboutapp.route(/section/page_name)def section_page(page_name):return f这是动态路由页面名{page_name}# 4. 斜杠规则示例app.route(/projects/)def projects():return 项目列表页目录性质末尾有斜杠if __name__ __main__:app.run(debugTrue)动手测试- 启动应用访问http://127.0.0.1:5000/user/admin和http://127.0.0.1:5000/user/123。- 访问http://127.0.0.1:5000/post/100和http://127.0.0.1:5000/post/abc观察区别。- 访问http://127.0.0.1:5000/projects注意浏览器地址栏的变化自动重定向到/projects/。