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

如何在不使用Swagger UI的情况下将JSON数据发布到FastAPI后端?

呼延修然
2023-03-14

我正在尝试使用FastAPI进行简单的POST操作。我使用 BaseModel 创建了一个基本结构,它只有两个属性,即 nameroll

import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    roll: int

app = FastAPI()

@app.post("/")
async def create_item(item: Item):
    return item

if __name__ == '__main__':
    uvicorn.run(app, port=8080, host='0.0.0.0')

我想使用<code>post</code>操作发布这些数据-<code>{“name”:“XYZ”,“roll”:51}</code>。

我知道Swagger UI(OpenAPI)提供的http://localhost:8080/docs的自动留档,我们可以用它来发布数据。但是我不想使用它。我想用的是使用URLhttp://localhost:8080/直接发布数据,并希望在浏览器本身中看到结果,而不是在Swagger UI中看到结果。

共有1个答案

甄文彬
2023-03-14

您需要使用Javascript接口/库,例如Fetch API,它允许您以JSON格式发送数据(示例如下)。要提交form数据,请查看此答案,而要发布Filesform/JSON数据,请查看此答案。

对于前端,您可以使用Jinja2Templates来渲染并返回包含HTML / JS代码等的TemplateResponse。您可以使用 HTML 表单提交数据,然后将表单数据转换为 JSON,如此处所述。否则,您可以直接发布 JSON 数据,如下所示,例如 body:JSON.stringify({name: “foo”, roll: 1})。

app.py公司

from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
from pydantic import BaseModel

app = FastAPI()
templates = Jinja2Templates(directory="templates")

class Item(BaseModel):
    name: str
    roll: int
    
@app.post("/")
async def create_item(item: Item):
    return item

@app.get("/")
async def index(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

模板/index.html

<!DOCTYPE html>
<html>
   <body>
      <h1>Post JSON Data</h1>
      <form method="post" id="myForm">
         name : <input type="text" name="name" value="foo">
         roll : <input type="number" name="roll" value="1">
         <input type="button" value="Submit" onclick="submitForm()">
      </form>
      <div id="responseArea"></div>
      <script>
         function submitForm() {
             var formElement = document.getElementById('myForm');
             var data = new FormData(formElement);
             fetch('/', {
                   method: 'POST',
                   headers: {
                     'Accept': 'application/json',
                     'Content-Type': 'application/json'
                 },
                   body: JSON.stringify(Object.fromEntries(data))
                 })
                 .then(resp => resp.text())  // or, resp.json(), etc.
                 .then(data => {
                   document.getElementById("responseArea").innerHTML = data;
                 })
                 .catch(error => {
                   console.error(error);
                 });
         }
      </script>
   </body>
</html>
 类似资料:
  • 我正在尝试将一个名为“ethAddress”的值从客户端的输入表单传递给FastAPI,以便我可以在函数中使用它来生成matplotlib图表。 我使用fetch在Charts中发布输入的文本。tsx文件: 然后我有了我的api。py文件设置如下: 据我所知,我使用< code > fetch < code > POST 请求将请求体中的“ethAddress”从客户端传递到后端,在后端,我可以访

  • 问题内容: 我正在尝试不使用AJAX将数据发布到REST api。我想以JSON格式发送数据。我有以下代码,但一直试图找出如何转换输入字段并将其发布到服务器。这是我的代码尝试: 问题答案: 您可以使用json值添加一个隐藏的输入字段,如下所示- 您可以使用参数( 隐藏输入的名称 )访问json

  • 我找到了这些可能的答案,但没有成功。我做错什么了吗?我确信AngularJS会提供这个功能,但是如何提供呢?

  • 问题内容: 我是AngularJS的新手,一开始,我想只使用AngularJS开发一个新的应用程序。 我正在尝试使用Angular应用程序向服务器端进行AJAX调用。 为了发送参数,我尝试了以下操作: 这是可行的,但在上也使用jQuery 。为了消除对jQuery的依赖,我尝试: 但这似乎失败了。然后我尝试了: 但这似乎也失败了。然后我尝试了: 我找到了这些可能的答案,但未成功。难道我做错了什么?

  • 问题内容: 我必须将以下数据发送到URl的Web服务 要发送的数据格式为: 其中,和是键,并具有通过edittext字符串获取的相应值字符串。我在单击按钮时发布此数据。 我没有收到任何回应,因为我试图与我的合作开发者在他的iPhone相同的应用程序iPhone版本中与我的合作开发者进行反检查,因为服务器说用户名和密码无效。 我的课是: 请协助我,我是JSON和Android.Thanx解析的新手。

  • 问题内容: 我在将数据发送到在线数据库时遇到问题。当我检查数据库时,似乎什么都没有发布。我对收到的响应执行了NSLog,它为空。 这是.php: 但是,如果我将$ response硬编码为某个字符串值,而NSLog接收到的响应,它将接收适当的字符串值。 这是我的代码: 是不是无法插入IMEI(这就是为什么它不发布)或其他问题的事实? 谢谢你的协助。 问题答案: 一些观察: 您应该使用interfa