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

如何使用FastAPI从一个请求中返回多个值?

罗光华
2023-03-14

我正在尝试使用FastAPI MongoDB创建一个API,它可以从请求中返回多个值。MongoDB充满了数据,使用mongoengine,我可以在向特定endpoint发送请求时查阅一个或所有数据。我现在要做的是从endpoint接收一个或多个数据,例如:

当查询endpoint< code > http://127 . 0 . 0 . 1:8000/rice 时,我得到一个JSON响应,其中包含MongoDB上该项目的所有数据。但问题是,我需要让这个endpoint从MongoDB中查询一个或多个数据,并返回用户发送给endpoint的尽可能多的数据,例如:< code > http://127 . 0 . 0 . 1:8000/rice

在代码中,我有一个main.py,其路径如下:

@app.get('/{description}', status_code=200)
def get_description(description):
    return JSONResponse(TabelaService().get_description(description))

函数调用另一个函数,该函数调用另一个函数,该函数使用查询集从MongoDB查询数据并将其序列化:

    def get_description(self, description):
        try:
            description = TabelaNutricional.get_by_description(description)
            return self.serialize(description)
        except:
            raise DescriptionNotFound

下面是从MongoDB获取数据的函数:

    @queryset_manager
    def get_by_description(doc_cls, queryset, description):
        nutriente = queryset(description=str(description)).get()
        return nutriente

有人知道如何在endpoint中获取更多数据吗?谢谢!

共有1个答案

云景焕
2023-03-14

您可以声明一个类型为<code>List</code>的查询参数,并显式使用<code>query</ccode>,如本文和本答案所示,以及文档中所述。这样,您可以接收查询参数的多个值,例如。,

http://127.0.0.1:8000/?item=rice&item=pasta&item=bean 

在服务器端,您可以html" target="_blank">遍历项目列表并为列表中的每个项目调用您的函数,并创建一个包含结果的字典以发回客户端。例如:

@app.get('/', status_code=200)
def get_description(item: List[str] = Query(...)):
    data = {}
    for i in item:
        d = TabelaService().get_description(i)
        data[i] = d
        
    return JSONResponse(data)

如果您仍然想使用路径参数,您可以使用下面的,并按照您的问题中所示调用它,即< code > http://127 . 0 . 0 . 1:8000/rice

@app.get('/{items}', status_code=200)
def get_description(items: str):
    items = items.split('&')
    data = {}
    for i in items:
        d = TabelaService().get_description(i)
        data[i] = d
        
    return JSONResponse(data)

注意:如果使用上面的(带path参数),http://127.0.0.1:8000/docs的OpenAPI docs (Swagger UI)不会加载。这是因为当访问该URL时,上面的endpoint被调用,并将< code>docs作为< code>items路径参数的值。因此,您可以在该endpoint上添加一个额外的路径,例如< code > @ app . get('/API/{ items } ' ,并使用例如< code > http://127 . 0 . 0 . 1:8000/API/rice调用它

 类似资料:
  • 问题内容: 我正在使用jsp和servlet构建Web应用程序,我从jsp发送ajax请求,我想从servlet返回两个json对象。我尝试执行以下操作,但是代码不起作用。 //在jquery中,我编写了这段代码 //在servlet中,我编写了此代码 有人能帮我吗??? 问题答案: 您应该这样做: 服务器端: 客户端: 希望这可以帮助。干杯

  • 是否可以对同一个事务多次调用< code > dslcontext . transaction result()? 我希望在同一个事务中向不同的表中插入行,并将主键返回给封闭(非事务)代码块。 我知道我可以创建一些自定义的返回类型来保存多个值,但是从代码可读性的角度来看,最好是多次调用< code > dslcontext . transaction result()并每次传递一个单独的结果。

  • 问题内容: 选项:使用元组 考虑下面这个简单的例子: 但是,随着返回值的数量增加,这很快就会成为问题。如果要返回四个或五个值怎么办?当然,你可以继续修改它们,但是很容易忘记哪个值在哪里。在任何想要接收它们的地方打开它们的包装也是很丑陋的。 选项:使用字典 下一步的逻辑步骤似乎是引入某种“记录符号”。在Python中,一种明显的方法是使用dict。 考虑以下: (请注意,y0,y1和y2只是抽象标识

  • 问题内容: 我必须在循环上进行一系列Ajax请求。其中约有100个。每个请求都返回一个JSONP变量。我从JSON提取数据,并将该值附加到div中。问题是我希望div以函数调用的顺序附加数据。即顺序。现在,我每次刷新页面时都会得到不同的顺序,具体取决于请求完成的顺序。这是我的代码。 当我在div中显示索引值时,每次我得到随机订单。有时是2 4 3 1 7,有时是1 5 2 7 4。我什至尝试asy

  • 我正在尝试发送一个经过身份验证的请求,只需点击邮递员。 所以,我有一个名为“Oauth”的请求,我正在使用测试将令牌存储在局部变量中。 我现在要做的是,对于需要承载令牌的任何其他请求,自动运行Oauth请求(从预请求脚本)。 有没有一种方法可以通过单击邮递员按钮来获取访问令牌并发送经过身份验证的请求?

  • 问题内容: 我有一个函数,用关键字声明一个变量。然后,它将启动AJAX请求以设置变量的值,然后从函数中返回此变量。 但是,我的实现失败了,我也不知道为什么。 这是代码的简化版本; 问题答案: AJAX请求是异步的。您的sendRuest函数正在执行,正在发出AJAX请求,但它是异步发生的;因此,sendRuest的其余部分在AJAX请求(和onreadystatechange处理程序)执行之前就已