Flask框架02(路由)
前言:
使用route()装饰器来把函数绑定到 URL。在flask01最小应用 中,就使用route添加了一个路由,将/下的请求绑定到了index函数上。
1 2 3 | @app .route( '/version' ) def version(): return 'Version: V0.1' |
这里添加了一个路由,将/version下的请求绑定到version函数上。除了这种简单的路由,我们还可以可以动态变化 URL 的某些部分, 还可以为一个函数指定多个规则。
通过把 URL 的一部分标记为 <variable_name> 就可以在 URL 中添加变量。标记的 部分会作为关键字参数传递给函数。通过使用 <converter:variable_name> ,可以 选择性的加上一个转换器,为变量指定规则。
源码:
1 2 3 4 5 6 7 8 9 10 11 | @app .route( '/user/<username>' ) def get_username(username): return 'Username %s' % escape(username) @app .route( '/user/<int:user_id>' ) def get_user_id(user_id): return 'Userid %d' % user_id @app .route( '/path/<path:subpath>' ) def show_subpath(subpath): return 'Subpath %s' % escape(subpath) |
这里的源码没什么需要解释的,就只需要介绍一下类型:
转换器类型:
string (缺省值) 接受任何不包含斜杠的文本
int 接受正整数
float 接受正浮点数
path 类似 string ,但可以包含斜杠
uuid 接受 UUID 字符串
源码:
1 2 3 4 5 6 7 | @app .route( '/projects/' ) def projects(): return 'The project page' @app .route( '/about' ) def about(): return 'The about page' |
解释:
projects 的 URL 是中规中矩的,尾部有一个斜杠,看起来就如同一个文件夹。 访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。
about 的 URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。
url_for 函数用于构建指定函数的 URL。它把函数名称作为第一个 参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。未知变量 将添加到 URL 中作为查询参数。
为什么不在把 URL 写死在模板中,而要使用反转函数url_for动态构建?
-
反转通常比硬编码 URL 的描述性更好。
-
你可以只在一个地方改变 URL ,而不用到处乱找。
-
URL 创建会为你处理特殊字符的转义和 Unicode 数据,比较直观。
-
生产的路径总是绝对路径,可以避免相对路径产生副作用。
-
如果你的应用是放在 URL 根路径之外的地方(如在 /myapplication 中,不在 / 中),url_for 会为你妥善处理。
源码:
1 2 3 4 5 6 7 8 9 10 11 | @app .route( '/' ) def index(): return 'Hello World' @app .route( '/version' ) def version(): return 'Version: V0.1' @app .route( '/user/<username>' ) def get_username(username): return 'Username %s' % escape(username)with app.test_request_context(): print (url_for( 'index' )) print (url_for( 'version' )) print (url_for( 'get_username' , username = 'John Doe' )) |
输出结果:
/
/version
/user/John%20Doe
Web 应用使用不同的 HTTP 方法处理 URL 。当你使用 Flask 时,应当熟悉 HTTP 方法,我们前面的路由都是没有设置HTTP方法的。 缺省情况下,一个路由只回应 GET 请求。但是我们可以使用route装饰器的 methods 参数来处理不同的 HTTP 方法。
源码:
1 2 3 4 5 6 | @app .route( '/key' , methods = [ 'GET' , 'POST' ]) def methods_test(): if request.method = = 'POST' : return 'post key' else : return 'get key' |
测试图太占位置,就不加了。下一篇介绍静态资源与模板
作者:红雨
出处:https://www.cnblogs.com/52why
微信公众号: 红雨python
出处:https://www.cnblogs.com/52why
微信公众号: 红雨python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通