Fast API使用
相关的代码上都有注释,其中前端代码是用来提交表单的
此代码进行了跨域处理,允许前端直接提交表单,并正常返回
完整代码:
from typing import Unionfrom fastapi import Header, Cookie
from pydantic import BaseModel, Field
from fastapi.responses import RedirectResponse
from fastapi import Depends, FastAPI, HTTPException, Form, File, UploadFile
from fastapi.responses import JSONResponse
from typing import Optional
from fastapi.middleware.cors import CORSMiddleware
import asyncioapp = FastAPI()# 配置允许的跨域来源
origins = ["http://127.0.0.1", # 本地前端"http://127.0.0.1:3000", # 如果使用 VS Code Live Server"http://127.0.0.1:8000", # 如果使用 VS Code Live Server"http://localhost", # 本地前端"http://localhost:3000" # 本地开发时的 URL"http://localhost:8000" # 本地开发时的 URL
]# 添加 CORS 中间件
app.add_middleware(CORSMiddleware,allow_origins=origins, # 允许的来源allow_credentials=True, # 允许发送 Cookieallow_methods=["*"], # 允许所有方法allow_headers=["*"], # 允许所有头部
)# 自定义中间件处理 OPTIONS 请求
@app.middleware("http")
async def options_middleware(request, call_next):if request.method == "OPTIONS":headers = {"Access-Control-Allow-Origin": "*", # 允许所有来源"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE", # 允许的 HTTP 方法"Access-Control-Allow-Headers": "Content-Type", # 允许的请求头}return JSONResponse(content=None, status_code=200, headers=headers)response = await call_next(request)print(response)# 添加 CORS 头部到响应response.headers["Access-Control-Allow-Origin"] = "*" # 或指定前端地址return response# 定义实体对象
class Item(BaseModel):name: str = Field(..., title="Item Name", max_length=100)description: str = Field(None, title="Item Description", max_length=255)price: float = Field(..., title="Item Price", gt=0)tax: float = None# 依赖项函数
def common_parameters(q: str = None, skip: int = 0, limit: int = 100):return {"q": q, "skip": skip, "limit": limit}# 主路径
@app.get("/")
def read_root():return {"Hello": "World"}# get
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):if item_id == 42:raise HTTPException(status_code=404, detail="Item not found")content = {"item_id": item_id}headers = {"X-Custom-Header": "custom-header-value"}return JSONResponse(content=content, headers=headers)# put
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):return {"item_id": item_id}# post
@app.post("/items/")
def create_item(item: Item):print(f"{item.name}--{item.description}--{item.price}--{item.tax}")return item# 请求依赖前置
@app.get("/items/")
def read_item(commons: dict = Depends(common_parameters), user_agent: str = Header(None),session_token: str = Cookie(None)):return commons# return {"User-Agent": user_agent, "Session-Token": session_token}# 后处理函数
async def after_request():print("after_request")pass# 后处理依赖项
@app.get("/items/", response_model=dict)
async def read_items_after(request: dict = Depends(after_request)):return {"message": "Items returned successfully"}# 异步依赖项函数
async def get_token():# 模拟异步操作await asyncio.sleep(2)return "fake-token"# 异步路由操作函数
@app.get("/async/")
async def read_items(token: Optional[str] = Depends(get_token)):return {"token": token}# 直接前端传参
@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):return {"username": username}# redirect
@app.get("/redirect")
def redirect():return RedirectResponse(url="/items/")# 路由操作函数
@app.post("/files/")
async def create_file(file: UploadFile = File(...)):return {"filename": file.filename}# 传参处理
@app.get("/items/")
def read_item(skip: int = 0, limit: int = 10):return {"skip": skip, "limit": limit}
前端代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Create Item</title>
</head>
<body><h1>Create Item</h1><form id="itemForm"><label for="name">Item Name:</label><br><input type="text" id="name" name="name" required maxlength="100"><br><br><label for="description">Item Description:</label><br><textarea id="description" name="description" maxlength="255"></textarea><br><br><label for="price">Item Price:</label><br><input type="number" id="price" name="price" step="0.01" required min="0.01"><br><br><label for="tax">Item Tax (optional):</label><br><input type="number" id="tax" name="tax" step="0.01" min="0"><br><br><input type="submit" value="Submit"></form><script>document.getElementById('itemForm').addEventListener('submit', async function(event) {event.preventDefault();// Gather the form dataconst formData = new FormData(event.target);const data = {name: formData.get('name'),description: formData.get('description'),price: parseFloat(formData.get('price')),tax: formData.has('tax') ? parseFloat(formData.get('tax')) : null};try {const response = await fetch('http://127.0.0.1:8000/items/', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify(data)});if (response.ok) {const jsonResponse = await response.json();alert('Item created: ' + JSON.stringify(jsonResponse));} else {alert('Error: ' + response.statusText);}} catch (error) {alert('Network error: ' + error);}});</script>
</body>
</html>相关文章:
Fast API使用
相关的代码上都有注释,其中前端代码是用来提交表单的 此代码进行了跨域处理,允许前端直接提交表单,并正常返回 完整代码: from typing import Unionfrom fastapi import Header, Cookie from pydantic import BaseModel, Field f…...
LLM - Llama 3 的 Pre/Post Training 阶段 Loss 以及 logits 和 logps 概念
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145056912 Llama 3 是 Meta 公司发布的开源大型语言模型,包括具有 80 亿和 700 亿参数的预训练和指令微调的语言模型,支持…...
MySQL 中删除重复数据 SQL 写法
要在 MySQL 中删除重复的数据并只保留一条,可以使用下面的方法(要用的时候直接复制小改下条件和表名称即即可) 方法一:使用 left join 子查询删除重复数据(推荐) 温馨提示:本人在 500w 数据下执行此 SQL 耗费 15s-30s…...
docker minio镜像arm64架构
minio版本为RELEASE.2021-09-03T03-56-13Z 原项目信创改造,服务器资源改为了arm64架构,统信uos docker镜像库内没有对应的minio镜像,当前镜像为拉取源码后,自编译打包镜像,亲测可用。 使用方式 将tar包导入到服务器…...
VUE3 监听器(watch)
在 Vue 3 中,监听器(watch)是用来观察响应式数据的变化,并在数据发生变化时执行相应操作的机制。watch 主要用于响应式数据变化时的副作用处理,比如异步操作、数据更新等。 1. 基础使用 在 Vue 3 中,watc…...
CAPL如何设置TCP/IP传输层动态端口范围
在TCP/IP协议中,应用程序通过传输层协议TCP/UDP传输数据,接收方传输层收到数据后,根据传输层端口号把接收的数据上交给正确的应用程序。我们可以简单地认为传输层端口号是应用程序的标识,这就是为什么我们说应用程序在使用TCP/IP协议通信时要打开传输层端口号或者绑定端口号…...
随记:有关Springboot项目中的时间格式实现的几种方式
1.注解 JsonFormat DateTimeFormat import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat;import java.time.LocalDateTime;public class Event {// 序列化和反序列化时生效JsonFormat(pattern "yyyy-MM…...
IntelliJ IDEA 优化设置
针对 Java 开发,IntelliJ IDEA 有许多优化设置,可以帮助提高代码编写、调试、构建和运行的效率。以下是一些针对 Java 开发的优化建议: 1. 增加 JVM 内存和性能优化 增加堆内存: 通过调整 idea.vmoptions 文件,增加 IntelliJ ID…...
jsp企业财务管理系统设计与实现
企业财务管理系统 摘要 对于企业集来说,财务管理的地位很重要。随着计算机和网络在企业中的广泛应用,企业发展速度在不断加快,在这种市场竞争冲击下企业财务管理系统必须优先发展,这样才能保证在竞争中处于优势地位。对此企业必须实现财务管理…...
EscherNet运行笔记
文章标题:EscherNet: A Generative Model for Scalable View Synthesis 1. 环境配置 conda env create -f environment.yml -n eschernet conda activate eschernet 2. 数据下载 wget https://tri-ml-public.s3.amazonaws.com/datasets/views_release.tar.gz 3…...
Java中的反射机制及其应用场景
目录 什么是Java反射机制? 工作原理 主要应用场景 注意事项 总结 什么是Java反射机制? Java反射机制是一种强大的工具,它允许程序在运行时访问、检查和修改其本身的类和对象的信息。通过反射,开发者可以在不知道类的具体实现…...
信息科技伦理与道德3:智能决策
1 概述 1.1 发展历史 1950s-1980s:人工智能的诞生与早期发展热潮 1950年:图灵发表了一篇划时代的论文,并提出了著名的“图灵测试”;1956年:达特茅斯会议首次提出“人工智能”概念;1956年-20世纪70年代&a…...
青少年编程与数学 02-006 前端开发框架VUE 16课题、组件基础
青少年编程与数学 02-006 前端开发框架VUE 16课题、组件基础 一、定义一个组件二、使用组件三、传递 props四、监听事件五、通过插槽来分配内容六、动态组件七、DOM 内模板解析注意事项1、大小写区分2、闭合标签3、元素位置限制 课题摘要:本文介绍了Vue.js中的组件基础…...
25/1/11 算法笔记 Yolov8物体识别
这几天做了给Yolov8检测物体的小任务,今天来做下总结。 首先介绍下整个Yolov8检测的步骤吧,安装库那些就不讲了。 这是我的文件包的对象树。 有images包,里面装了训练和验证的图像。 labels包,装了标注好的labels的txt文件&…...
水水水水水水
为了拿推广卷,但不想把我原本完整的文章拆成零散的多篇,只能出此下策随便发一篇,认真写的都笔记专栏里 网络技术:数字时代的基础设施 在当今社会,网络技术无疑是推动现代生活和经济发展的核心动力之一。从简单的信息传…...
XS5037C一款应用于专业安防摄像机的图像信号处理芯片,支持MIPI和 DVP 接口,内置高性能ISP处理器,支持3D降噪和数字宽动态
XS5037C是一款应用于专业安防摄像机的图像信号处理芯片,支持MIPI和 DVP 接口,最 大支持 5M sensor接入。内置高性能ISP处理器,支持3D降噪和数字宽动态。标清模拟输出支 持960H,高清模拟输出支持HDCCTV 720P/1080P/4M/5M。高度集成…...
机器学习无处不在,AI顺势而为,创新未来
机器学习无处不在: 1、推荐广告和搜索:推广搜不分家,属于数据科学中,对人的行为进行理解 2、计算机视觉CV:对人看到的东西进行理解 3、自然语言处理:对人交流的东西进行理解 4、数据挖掘和数据分析&…...
pandas处理json的相关操作
Pandas 是一个强大的数据处理库,它提供了丰富的功能来处理 JSON 数据。以下是 Pandas 中处理 JSON 的所有常见操作: 1. 读取 JSON 文件 使用 pandas.read_json() 函数可以从 JSON 文件或 JSON 字符串中读取数据。 从 JSON 文件读取 import pandas as …...
linux内存泄露定位过程(kmemleak和slab debug)
1,当遇到内存增加过多时,或者由于内存导致系统oom时我们怎么定位呢,定位时需要确认是内核态还是用户态内存泄露。 排查步骤 top查看VIRT和RES内存 rootubuntu2004:~# top top - 21:05:39 up 7 min, 1 user, load average: 5.01, 4.09, 2.…...
2025年安卓面试复习总结
文章目录 深入理解并熟练运用常用设计模式及反射原理,能够自定义注解及泛型,多次通过设计模式对 app 代码进行高效重构,显著提升代码的可维护性与扩展性。设计模式自定义注解泛型Kotlin泛型 精通多线程原理,对 ThreadPoolExecutor…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
