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

相关推荐
凤山老林16 小时前
动态 i18n 体系落地:Spring Boot 多租户热加载与前后端协同实践
java·spring boot·后端·i18n
l12586516 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
东风破_16 小时前
TypeScript 高级类型进阶:keyof、Exclude、Record 与类型组合思想
前端·后端·typescript
凤山老林16 小时前
数据库读写分离与动态路由实战:Spring Boot + ShardingSphere-JDBC 生产配置
数据库·spring boot·后端·分库分表·sharding-jdbc
Littlehero_12117 小时前
QT自定义控件之热换站系统(源码开源)
开发语言·qt
meilindehuzi_a17 小时前
Python 基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
caimouse17 小时前
ReactOS 窗口系统分析(5):可见区域与窗口 DC — vis.c + windc.c
c语言·开发语言
Zane199417 小时前
调用了 async 函数却没执行?一文讲透协程、event loop 与 await
后端·python
OPEN-F17 小时前
Python进阶教程:装饰器与生成器深入
开发语言·python
Zane199417 小时前
HashMap 为什么要在长度16、容量必须是2的幂这些细节上较劲
java·后端