当前位置: 首页 > 知识库问答 >
问题:

FastAPI变量查询参数

洪星文
2023-03-14

我正在编写一个Fast API服务器,它接受请求,检查用户是否被授权,如果成功,则将其重定向到另一个URL。

我需要携带URL参数,例如http://localhost:80/data/?param1=val1

参数不受我控制,随时可能更改。

我怎样才能实现这一点?

代码:

from fastapi import FastAPI
from starlette.responses import RedirectResponse

app = FastAPI()

@app.get("/data/")
async def api_data():
    params = '' # I need this value
    url = f'http://some.other.api/{params}'
    response = RedirectResponse(url=url)
    return response


共有3个答案

龚凯泽
2023-03-14

如果在启动 API 时查询参数已知,但您仍然希望动态设置它们:

from fastapi import FastAPI, Depends
from pydantic import create_model

app = FastAPI()

# Put your query arguments in this dict
query_params = {"name": (str, "me")}

query_model = create_model("Query", **query_params) # This is subclass of pydantic BaseModel

# Create a route
@app.get("/items")
async def get_items(params: query_model = Depends()):
    params_as_dict = params.dict()
    ...

这样做的好处是您可以在自动文档中看到参数:

但是您仍然能够动态定义它们(在启动API时)。

注意:如果您的模型有dicts、lists或其他BaseModels作为字段类型,请求体就会弹出。GET不应该有正文内容,所以您可能希望避免这些类型。

从Pydantic文档中查看有关动态模型创建的更多信息。

夏侯华彩
2023-03-14

如FastAPI https://FastAPI . tiangolo . com/tutorial/query-params-str-validations/的文档中所述。

 @app.get("/")
 def read_root(param1: Optional[str] = None, param2: Optional[str] = None):
     url = f'http://some.other.api/{param1}/{param2}'
     return {'url': str(url)}

输出

龚德本
2023-03-14

在文档中,他们谈到直接使用请求,这让我想到了这一点:

from fastapi import FastAPI, Request
from starlette.responses import RedirectResponse

app = FastAPI()

@app.get("/data/")
async def api_data(request: Request):
    params = request.query_params
    url = f'http://some.other.api/?{params}'
    response = RedirectResponse(url=url)
    return response
 类似资料:
  • 我不明白 FastAPI 中的可选查询参数。它与默认值为 的默认查询参数有何不同? 在下面的示例中,arg1和arg2有什么区别?在该示例中,arg2是一个可选的查询参数,如上面的链接所述。

  • 这是唯一的解决办法吗:

  • 我想构建一个类似于< code>/cities的endpoint。population__gt=100000获取人口超过100,000的所有城市。 在FastAPI中最好的方法是什么?我不喜欢列举给定字段的所有可能的操作符,比如:

  • 注意:这个问题与这里的问题不同,因为我需要它来处理Swagger。 给定一个 FastAPI endpoint,我想允许任意一组 URL 参数,同时保持 Swagger 支持。 我的用例是,我想支持一组类似JSON API的查询参数,例如: 方括号的使用阻止了我使用传统的类来建模查询参数,所以我直接使用对象来代替。但是,我想使用Swagger来测试endpoint。我找不到提供任意URL参数的方法

  • 问题内容: 这不起作用。任何提示或技巧都将不胜感激。 问题答案: 您需要准备好的声明,请查看本教程。

  • 问题内容: 我有需要变量替换以更好地使用Go-kit服务的sql查询。 我有&作为用户输入的内容,这是我的休息服务的一部分,例如:和。 我已经尝试了一些事情,例如: 和: 导致错误: 仅硬编码的值有效,替换失败。 我没有从Oracle博客那里找到很多有关此方面的帮助,并且想知道是否有任何方法可以解决此问题。 问题答案: 参数占位符语法(参考:http : //go-database- sql.or