Python Flask 开发 - Flask 路径参数类型(string、int、float、path、uuid)

查看路径参数类型

python 复制代码
for converter_name, converter_class in app.url_map.converters.items():
    print(f"{converter_name}: {converter_class}")
复制代码
# 输出结果

default: <class 'werkzeug.routing.converters.UnicodeConverter'>
string: <class 'werkzeug.routing.converters.UnicodeConverter'>
any: <class 'werkzeug.routing.converters.AnyConverter'>
path: <class 'werkzeug.routing.converters.PathConverter'>
int: <class 'werkzeug.routing.converters.IntegerConverter'>
float: <class 'werkzeug.routing.converters.FloatConverter'>
uuid: <class 'werkzeug.routing.converters.UUIDConverter'>

一、string

python 复制代码
@app.route('/user/<string:username>')
def show_string(username):
    return f'type: string, value: {username}, python_type: {type(username).__name__}'
  1. 测试 /user/john_doe

    输出结果

    type: string, value: john_doe, python_type: str

  2. 测试 /user/123

    输出结果

    type: string, value: 123, python_type: str

  3. 测试 /user/john%20doe

    输出结果

    type: string, value: john doe, python_type: str


二、int

python 复制代码
@app.route('/article/<int:article_id>')
def show_int(article_id):
    return f'type: int, value: {article_id}, python_type: {type(article_id).__name__}'
  1. 测试 /article/42

    输出结果

    type: int, value: 42, python_type: int

  2. 测试 /article/0

    输出结果

    type: int, value: 0, python_type: int

  3. 测试 /article/-100

    输出结果

    Not Found

  4. 测试 /article/3.14

    输出结果

    Not Found

  5. 测试 /article/abc

    输出结果

    Not Found

  6. 测试 /article/10abc

    输出结果

    Not Found


三、float

python 复制代码
@app.route('/price/<float:price>')
def show_float(price):
    return f'type: float, value: {price}, python_type: {type(price).__name__}'
  1. 测试 /price/19.99

    输出结果

    type: float, value: 19.99, python_type: float

  2. 测试 /price/-5.5

    输出结果

    Not Found

  3. 测试 /price/100

    输出结果

    Not Found

  4. 测试 /price/100.0

    输出结果

    type: float, value: 100.0, python_type: float

  5. 测试 /price/.5

    输出结果

    Not Found

  6. 测试 /price/3.1415926

    输出结果

    type: float, value: 3.1415926, python_type: float

  7. 测试 /price/10,5

    输出结果

    Not Found

  8. 测试 /price/10k

    输出结果

    Not Found

  9. 测试 /price/abc

    输出结果

    Not Found


四、path

1、演示
python 复制代码
@app.route('/path/<path:filepath>')
def show_path(filepath):
    return f'type: path, value: {filepath}, python_type: {type(filepath).__name__}'
  1. 测试 /path/docs

    输出结果

    type: path, value: docs, python_type: str

  2. 测试 /path/docs/api

    输出结果

    type: path, value: docs/api, python_type: str

  3. 测试 /path/docs/api/v1

    输出结果

    type: path, value: docs/api/v1, python_type: str

  4. 测试 /path/static/css/style.css

    输出结果

    type: path, value: static/css/style.css, python_type: str

  5. 测试 /path/a/b/../d

    输出结果

    type: path, value: a/b/../d, python_type: str

2、string 处理路径类型的问题
python 复制代码
@app.route('/path/<string:filepath>')
def show_path(filepath):
    return f'type: string, value: {filepath}, python_type: {type(filepath).__name__}'
  1. 测试 /path/docs

    输出结果

    type: string, value: docs, python_type: str

  2. 测试 /path/docs/api

    输出结果

    Not Found

  3. 测试 /path/docs/api/v1

    输出结果

    Not Found

  4. 测试 /path/static/css/style.css

    输出结果

    Not Found

  5. 测试 /path/a/b/../d

    输出结果

    Not Found


五、uuid

python 复制代码
@app.route('/resource/<uuid:resource_id>')
def show_uuid(resource_id):
    return f'type: uuid, value: {resource_id}, python_type: {type(resource_id).__name__}'
  1. 测试 /resource/123e4567-e89b-12d3-a456-426614174000

    输出结果

    type: uuid, value: 123e4567-e89b-12d3-a456-426614174000, python_type: UUID

  2. 测试 /resource/550e8400-e29b-41d4-a716-446655440000

    输出结果

    type: uuid, value: 550e8400-e29b-41d4-a716-446655440000, python_type: UUID

  3. 测试 /resource/not-a-uuid

    输出结果

    Not Found

  4. 测试 /resource/123

    输出结果

    Not Found

  5. 测试 /resource/123e4567-e89b-12d3-a456-42661417400(短了)

    输出结果

    Not Found

  6. 测试 /resource/123e4567-e89b-12d3-a456-4266141740000(长了)

    输出结果

    Not Found

相关推荐
期待のcode1 分钟前
Redis的主从复制与集群
运维·服务器·redis
翼龙云_cloud3 分钟前
腾讯云代理商: Linux 云服务器搭建 FTP 服务指南
linux·服务器·腾讯云
一晌小贪欢9 分钟前
Python 爬虫进阶:如何利用反射机制破解常见反爬策略
开发语言·爬虫·python·python爬虫·数据爬虫·爬虫python
Java编程爱好者9 分钟前
2026版Java面试八股文总结(春招+秋招+社招),建议收藏。
后端
躺平大鹅18 分钟前
5个实用Python小脚本,新手也能轻松实现(附完整代码)
python
阿猿收手吧!22 分钟前
【C++】异步编程:std::async终极指南
开发语言·c++
yukai0800823 分钟前
【最后203篇系列】039 JWT使用
python
朱昆鹏24 分钟前
开源 Claude Code + Codex + 面板 的未来vibecoding平台
前端·后端·github
REDcker27 分钟前
gRPC开发者快速入门
服务器·c++·后端·grpc
figo10tf27 分钟前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端