拿到请求参数之后,Flask 自己替你检查了什么?type=int 失败会怎样?JSON 里缺字段会返回什么?这篇用 test_client 把各种边界输入的结果逐个打印出来。
n='12' → {'n': 12}
n='abc' → {'n': 'DEFAULT'}
n='12abc' → {'n': 'DEFAULT'}
n=' 12 ' → {'n': 12}
n='1_000' → {'n': 1000}
n='+5' → {'n': 5}
n='-5' → {'n': -5}
n='١٢' → {'n': 12}
n='99999999999999999999' → {'n': 99999999999999999999}
n='' → {'n': 'DEFAULT'}
n='1.5' → {'n': 'DEFAULT'}
没有传 n → {'n': 'DEFAULT'}上一篇:API 错误响应统一格式;下一篇:API 分页。
x='1.5' → {'repr': '1.5'}
x='nan' → {'repr': 'nan'}
x='inf' → {'repr': 'inf'}
x='-inf' → {'repr': '-inf'}
x='1e400' → {'repr': 'inf'}
x='abc' → {'repr': 'None'}
flag='true' → {'flag': True}
flag='false' → {'flag': True}
flag='0' → {'flag': True}
flag='1' → {'flag': True}
flag='' → {'flag': False} /items/5 → 200 {'i': 5}
/items/007 → 200 {'i': 7}
/items/abc → 404
/items/-1 → 404
/items/1.5 → 404
/items/٣ → 200 {'i': 3} 缺 name(KeyError)→ 500 <!doctype html> <html lang=en> <title>500 Internal Server Er
name 是整数 12345 → 200 {'name': 12345}
name 是嵌套对象 → 200 {'name': {'a': [1, 2]}}
请求体是列表 → 500 ( <!doctype html> <html lang=en> <title>500 Internal ) 合法 → 201 {'ok': True, 'user': {'age': 30, 'name': 'ann'}}
name 缺失、age 越界 → 422 {'errors': {'age': '必填,0-150 的整数', 'name': '必填,字符串,1-20 个字符'}}
age 是字符串 → 422 {'errors': {'age': '必填,0-150 的整数'}}
age 是 true → 422 {'errors': {'age': '必填,0-150 的整数'}}
请求体是列表 → 422 {'errors': {'_': '请求体必须是 JSON 对象'}}
非法 JSON(silent=True 之后当成 None)→ 422 {'errors': {'_': '请求体必须是 JSON 对象'}}第 115、116 篇会用 Marshmallow 与 Pydantic 做同样的事。
/page → {'limit': 20, 'offset': 0}
/page?limit=5&offset=10 → {'limit': 5, 'offset': 10}
/page?limit=0 → {'limit': 1, 'offset': 0}
/page?limit=100000 → {'limit': 100, 'offset': 0}
/page?limit=-3&offset=-9 → {'limit': 1, 'offset': 0}
/page?limit=abc → {'limit': 20, 'offset': 0}
getlist:?id=1&id=2&id=x&id=3 → {'ids': [1, 2, 3]} (无法转换的元素被悄悄丢掉)请求体 500 字节 → 200 请求体 1000 字节 → 200 请求体 1001 字节 → 413 请求体 5000 字节 → 413