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

相关推荐
程序员小杰@1 分钟前
Spring Boot 常用注解分类速记
java·spring boot·后端
挖掘狂人5 分钟前
Git 从 0 到 1:用一个小项目走完 add / commit / reset / merge / rebase / push
git·后端·github
vx_Biye_Design6 分钟前
springboot小学生英语学习APP62773-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·学习·课程设计
打工仔折腾 AI18 分钟前
用UU远程把家里电脑变成AI Agent常驻服务器:CLI、端口映射与代理实测
运维·服务器·人工智能·后端·python·电脑·ai agent 实战
guo_wen_qiang25 分钟前
云服务器nacos搭建-集群&持久化
java·运维·服务器
明月_清风28 分钟前
AI Agent 进入系统层:现在有哪些开源项目在解决这个问题?
人工智能·后端
泡海椒36 分钟前
JQuick-Excel dateFormat 转换实战:日期值与 FORMAT 显示格式的边界
开发语言·python·excel
念越40 分钟前
接口自动化测试从入门到实战:接口用例设计、Requests、Pytest、YAML、JSON Schema 与 Allure 报告
python·测试工具·自动化·json·pytest
言乐644 分钟前
Python贪心算法实现搜索推荐
python·django·virtualenv·pygame·tornado
benchmark_cc1 小时前
A股量化尾盘筛选对数据时效敏感:行情链路变慢时先排查哪里?
python·数据分析·pandas·量化交易·股票数据·quantdash