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 字符串
 
URL / 重定向行为
源码:
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构建
url_for 函数用于构建指定函数的 URL。它把函数名称作为第一个 参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。未知变量 将添加到 URL 中作为查询参数。
为什么不在把 URL 写死在模板中,而要使用反转函数url_for动态构建?
  1. 反转通常比硬编码 URL 的描述性更好。
  2. 你可以只在一个地方改变 URL ,而不用到处乱找。
  3. URL 创建会为你处理特殊字符的转义和 Unicode 数据,比较直观。
  4. 生产的路径总是绝对路径,可以避免相对路径产生副作用。
  5. 如果你的应用是放在 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
 
HTTP 方法
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'
测试图太占位置,就不加了。下一篇介绍静态资源与模板
 
 
 
 
 
posted @   红雨520  阅读(184)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示