为什么 str.split() 不适用于 fastapi str 类型?
Why is str.split() not working in with fastapi str type?
出于某种原因,str.split() 在 python.
的 fastapi 包中未按预期运行
为了简化,我包含了一个 FastAPI 的简单用例,但是 str.split() 似乎只删除了我打算拆分的字符,而不是 return a列出我可以通过索引访问各个项目的位置。高度简化的可重现代码:
### fastapi example
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/alignment/{item_id}")
def read_item(item_id: str, q: str):
my_list = q.split("+") ### the critical line in question
return {"people" : my_list[0]}
我运行 此代码使用 uvicorn 作为:
>>> uvicorn main:app --reload
通过在 firefox 中浏览
http://127.0.0.1:8000/alignment/abc123ABC123?q=abracadabra+django+musical
我的输出是:
{"people":"abracadabra django musical"}
但是,我希望输出为:
{"people" : "abracadabra"}
为了确保我没有发疯,我在 fastApi 之外使用了 str.split() 来显示预期结果是一个列表,我可以在其中通过索引单独访问每个访问的项目,此处显示:
### str.split example
q = "abracadabra+django+musical"
my_list = q.split("+")
a = my_list[0]
print(a)
>>> abracadabra # Actual result as expected
我有过一些假设,但都没有结果:
- 在 fastapi class 中为 read_item 声明的 str 类型没有相同的 .split() 函数,有没有办法默认为 python 的基础 str.split()函数?
- 也许这是一个编码问题,但是 URL 和 python 默认都是 ASCII,所以这似乎不是错误
- 也许“+”需要一个转义字符(在大多数 REGEX 情况下都是如此),但在
### str.split example
(上文)中它可以在没有任何 \ 或 \ 的情况下工作,所以我认为没有必要.
任何帮助将此字符串分成几部分的帮助都会非常有帮助。之后,我打算处理字符串列表,return 比第一个元素复杂得多 json ,但这似乎是我的主要障碍。
我相信如果将 split("+")
替换为 split(" ")
,您的代码将会正常工作。查询字符串中的 +
个字符在 url 编码时代表一个 space; FastAPI 将 url 在传递给视图函数之前解码查询字符串。
出于某种原因,str.split() 在 python.
的 fastapi 包中未按预期运行为了简化,我包含了一个 FastAPI 的简单用例,但是 str.split() 似乎只删除了我打算拆分的字符,而不是 return a列出我可以通过索引访问各个项目的位置。高度简化的可重现代码:
### fastapi example
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/alignment/{item_id}")
def read_item(item_id: str, q: str):
my_list = q.split("+") ### the critical line in question
return {"people" : my_list[0]}
我运行 此代码使用 uvicorn 作为:
>>> uvicorn main:app --reload
通过在 firefox 中浏览 http://127.0.0.1:8000/alignment/abc123ABC123?q=abracadabra+django+musical
我的输出是:
{"people":"abracadabra django musical"}
但是,我希望输出为:
{"people" : "abracadabra"}
为了确保我没有发疯,我在 fastApi 之外使用了 str.split() 来显示预期结果是一个列表,我可以在其中通过索引单独访问每个访问的项目,此处显示:
### str.split example
q = "abracadabra+django+musical"
my_list = q.split("+")
a = my_list[0]
print(a)
>>> abracadabra # Actual result as expected
我有过一些假设,但都没有结果:
- 在 fastapi class 中为 read_item 声明的 str 类型没有相同的 .split() 函数,有没有办法默认为 python 的基础 str.split()函数?
- 也许这是一个编码问题,但是 URL 和 python 默认都是 ASCII,所以这似乎不是错误
- 也许“+”需要一个转义字符(在大多数 REGEX 情况下都是如此),但在
### str.split example
(上文)中它可以在没有任何 \ 或 \ 的情况下工作,所以我认为没有必要.
任何帮助将此字符串分成几部分的帮助都会非常有帮助。之后,我打算处理字符串列表,return 比第一个元素复杂得多 json ,但这似乎是我的主要障碍。
我相信如果将 split("+")
替换为 split(" ")
,您的代码将会正常工作。查询字符串中的 +
个字符在 url 编码时代表一个 space; FastAPI 将 url 在传递给视图函数之前解码查询字符串。