由于某些原因,str.split()在python的fastapi软件包中的作用不正常。
[为简化起见,我提供了一个简单的FastAPI用例,但是str.split()似乎只删除了我打算分割的字符,而不是返回一个列表,在该列表中我可以按其访问单个项目指数。高度简化的可复制代码:
### 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
我有一些假设,但都没有得出结果:
### str.split example
(以上)中,它不需要任何\或\,因此我认为没有必要。任何对此字符串进行定界的帮助都将非常有帮助。之后,我打算处理字符串列表,并返回比第一个元素复杂得多的json,但这似乎是阻碍我前进的主要障碍。
我相信如果将split("+")
替换为split(" ")
,您的代码将起作用。 url编码时,查询字符串中的+
字符表示space;在传递给视图函数之前,FastAPI将对查询字符串进行url解码。