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

使用 FastAPI 后端接收 JSON

谢鸿飞
2023-03-14

我在将JSON从我的前端发送到后端并在那里读取时遇到了一点问题。首先是简单的部分,在我的< code>index.html中,我读取一些字段中写的内容,并将其传递给< code>var inputs

js lang-js prettyprint-override"><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(”input:“JSON.stringify(inputs)”输出到控制台:

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

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

js prettyprint-override">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")
}

现在,在我的后端,我想以某种方式使用这些信息进行进一步的计算:

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}

按原样发送请求会在我的前端控制台中产生一个“错误422无法处理的实体”,我会得到“错误,但是在哪里?”在我的“后端测试”函数中定义的消息。到后端的连接在那里,调用/compute并且在calculate()中没有任何输入将会给我在函数backend_test(inputs)中定义的成功输出:“应该工作”。我不能直接查看后端代码中的错误,因为一切都是在公司的GitLab框架中设置的,测试只能通过提交更改和启动更新的网页来进行。

使用基础模型是我最后一次尝试阅读后,它在留档,家伙工作在一个类似的项目,但与不同的API只需编写def计算(身体)和有他的信息,但这似乎不工作在这个API

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

提前感谢,我在这个小问题上坐了 2 天,并不断回到相同的帮助页面,但无法使其工作。

解决方案:

在这部分添加数字(),因为我后来将它们称为int而不是str:

T_0 : Number(document.getElementById("a").value),
E_A : Number(document.getElementById("b").value),

在此处将类型更改为POST:

$.ajax({
            type: 'POST',

还有这里:

@app.post("/compute")

并且不要尝试返回列表,而是将此列表的元素作为 str 的变量:

x=str(liste.T_0)

return {"backend output:"+x}

共有1个答案

亢建木
2023-03-14

您应该将值转换为整数。

您的模型需要整数。

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

这意味着您应该像这样发送

{"T_0": int,"E_A": int}

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

使用DigitalparseInt将其转换为int,那么它应该可以工作。

将您的请求方式更改为发布。

type: 'POST'

你也可以改变你的方法,在你的服务器端发布。

@app.post("/compute")
 类似资料:
  • 我设计了一个从前端接收Json的控制器。控制器被正确调用 当我将Json的元素打印到控制台时,它们变成“null”。 前端向后端发送json。控制器被正确调用,但是当我将用户名和密码打印到控制台时,它们的值变为空。 从前端发送的Json。前端的请求url为 这是我的控制器代码: 以下是我的会员: 我尝试添加@刚体到方法,但它原来是

  • springboot接收前端上传到后端的文件时,在controller层内大多数使用的是MultipartFile进行接收的,当使用file进行接收时会报错 有大佬知道为啥不能用file接收文件吗?

  • 我正在尝试将一个名为“ethAddress”的值从客户端的输入表单传递给FastAPI,以便我可以在函数中使用它来生成matplotlib图表。 我使用fetch在Charts中发布输入的文本。tsx文件: 然后我有了我的api。py文件设置如下: 据我所知,我使用< code > fetch < code > POST 请求将请求体中的“ethAddress”从客户端传递到后端,在后端,我可以访

  • 本文向大家介绍python后端接收前端回传的文件方法,包括了python后端接收前端回传的文件方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇python后端接收前端回传的文件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我正在尝试使用FastAPI进行简单的操作。我使用 创建了一个基本结构,它只有两个属性,即 和 。 我想使用<code>post</code>操作发布这些数据-<code>{“name”:“XYZ”,“roll”:51}</code>。 我知道Swagger UI(OpenAPI)提供的的自动留档,我们可以用它来发布数据。但是我不想使用它。我想用的是使用URL直接发布数据,并希望在浏览器本身中看到

  • 我对nodejs/reactjs是新手。我有一个从外部资源接收JSON帖子的NodeJS后端。我能够在express-async-router请求中显示控制台中的数据。