首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用FastAPI-后端接收JSON

使用FastAPI-后端接收JSON
EN

Stack Overflow用户
提问于 2021-01-28 10:57:38
回答 1查看 1.1K关注 0票数 1

在将JSON从前端发送到后端并在那里阅读时,我遇到了一些小问题。首先,在我的index.html中,我阅读了一些字段中所写的内容,并将其传递给了var inputs

代码语言:javascript
运行
复制
<script type="text/javascript">
    function get_inputs()
    {
        var inputs =
            {
                T_0 : document.getElementById("a").value,
                E_A : document.getElementById("b").value,
                           }
        backend_test(inputs)
        console.log("input:" + JSON.stringify(inputs))
        return inputs
    }
</script>

“console.log(”输入:“+JSON.stringify(输入))”输出到控制台:

输入:{“T_0”:“3”,"E_A":"5"}

它调用函数backend_test,它应该接受我所做的输入,并通过GET请求将它作为JSON发送给我的FastAPI:

代码语言:javascript
运行
复制
function backend_test(inputs)
{
    var inputs = inputs
    
    console.log('frontend_func inputs out: ' + JSON.stringify(inputs))


$(document).ready(function()  //supposed to wait for the functions to be fully loaded
{
$.ajax({
            type: 'GET',
            contentType: 'application/json',
            data: JSON.stringify(inputs),
            dataType: "json", 
            url:"fastapi/compute",
            success: function (result) 
            { 
                console.log(result)
                console.log("should work")
            },
            error: function (error) 
            {
                console.log(error)
                console.log("error, but where?")
            }
        });
});
return("yay")
}

现在,在我的后端,我想使用这些信息来进一步计算:

代码语言:javascript
运行
复制
from fastapi import Request, FastAPI
from pydantic import BaseModel
from .self_ignition import test_function
from typing import List

class Liste(BaseModel):
    T_0: int
    E_A: int

@app.get("/compute")
def calculate(liste: Liste):

    
    return {"backend output:" + liste}

发送请求的在我的前端控制台中传递了一个"Error 422不可处理实体“,我得到了"error,但在哪里?”在我的"backend_test“函数中定义的消息。有一个与后端的连接,调用/compute而在/compute()中没有任何输入,这将给我定义的backend_test函数(输入)定义的成功输出:”应该工作“。我不能直接查看后端代码中的错误,因为在公司的set_up框架中,所有东西都是GitLab,只有通过执行更改和启动更新的网页才能进行测试。

使用"Base“是我在文档中看到有关它的最后一次尝试,这个人从事类似的项目,但是使用不同的API只需编写"def计算(body)”,并且有他的信息,但这在这个API中似乎行不通。

请注意,这些只是使连接工作的代码的一部分。我真正需要的是知道FastAPI是如何传递接收JSON的,因为这些文档并没有真正帮助我工作。

提前谢谢,我在这个小问题上坐了两天,不断地回到相同的帮助页,但无法使它发挥作用。

解决方案:

将Number()添加到这个部分,因为我后来将它们作为int,而不是str:

代码语言:javascript
运行
复制
T_0 : Number(document.getElementById("a").value),
E_A : Number(document.getElementById("b").value),

将类型更改为在此处发布:

代码语言:javascript
运行
复制
$.ajax({
            type: 'POST',

在这里:

代码语言:javascript
运行
复制
@app.post("/compute")

不要试图返回列表,而是返回一个变量,该变量将该列表的元素作为str:

代码语言:javascript
运行
复制
x=str(liste.T_0)

return {"backend output:"+x}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-28 11:34:36

应将值转换为整数。

您的模型期望整数。

代码语言:javascript
运行
复制
class Liste(BaseModel):
    T_0: int
    E_A: int

这意味着你应该这样发送

代码语言:javascript
运行
复制
{"T_0": int,"E_A": int}

但在当前情况下,您将发送string而不是int

使用NumberparseInt将其转换为int,然后它就能工作了。

将请求方法更改为post。

代码语言:javascript
运行
复制
type: 'POST'

此外,您还可以将方法更改为在服务器端发布。

代码语言:javascript
运行
复制
@app.post("/compute")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65935720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档