FastAPI 跨域访问CORS设置详解
创作时间:
作者:
@小白创作中心
FastAPI 跨域访问CORS设置详解
引用
CSDN
1.
https://m.blog.csdn.net/Humbunklung/article/details/144118836
问题发现
在前端开发中,当Vue3应用尝试调用后台服务时,可能会遇到跨域访问错误。例如,以下截图显示了一个典型的跨域错误:
这是一个基本的FastAPI服务示例代码:
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
import random
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Union[bool, None] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
@app.get("/score/{count}")
def get_score(count: int):
if count <= 0: return {}
result = []
for i in range(count):
result.append({"number": i+1, "score": random.uniform(0.0, 100.0)})
return result
问题解决
在FastAPI中设置跨域访问(CORS)可以通过使用fastapi.middleware.cors模块来实现。以下是具体的配置步骤:
- 导入
CORSMiddleware - 配置CORS中间件
- 将中间件添加到FastAPI应用
修改后的代码如下:
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
import random
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# 配置CORS
origins = [
"http://localhost",
"http://localhost:8000",
"http://localhost:3000", # 前端运行在3000端口
"http://localhost:5173"
# 添加其他允许的来源
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
class Item(BaseModel):
name: str
price: float
is_offer: Union[bool, None] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
@app.get("/score/{count}")
def get_score(count: int):
if count <= 0: return {}
result = []
for i in range(count):
result.append({"number": i+1, "score": random.uniform(0.0, 100.0)})
return result
解释
origins:这是一个列表,包含允许访问你的API的来源。你可以根据需要添加多个来源,例如"http://localhost:3000"。allow_credentials:如果设置为True,则允许发送凭据(如cookies)。allow_methods:允许的HTTP方法,["*"]表示允许所有方法。allow_headers:允许的HTTP头,["*"]表示允许所有头。
修改结果
经过上述配置后,代码能够正常执行,不再出现跨域错误:
热门推荐
死亡证明办理全攻略:用途、材料及律师调取流程详解
电脑如何启用双重认证?(增加账户安全)
金水伤官格的八字命理「金水伤官格为什么命运不定」
交叉训练,全面提升体能:多样化运动结合,避免平台期,享受运动乐趣
表见代理的构成要件及法律后果
艾脐贴的功效与作用
新生儿物理降温全攻略:六种安全有效的方法
银行手机银行功能设计的用户体验测试与优化策略
如何通过关键词研究提高文章原创性
PPI才是决定屏幕清晰度的关键!
工作中如何提高抗压能力
如何使用msata固态硬盘安装Win10系统(简易教程,轻松安装您的操作系统)
家电“5大件”怎么买合适?换过两套房的家电后,给你些实在建议
紫微斗数之廉贞星:此星在命盘什么地方,这辈子的业障就在哪里
地漏选购攻略 不同空间地漏选择有讲究
利萨如图形的动态演示
正确刷腻子与涂料的方法及注意事项
网络爬虫基本原理及实现(简单易懂)
大脑供血不足和缺氧的五种治疗方法
《海底两万里》中“鹦鹉螺号”的原型:超长待机的海中“活化石”
揭秘贵阳美食之绝味——酸汤鱼
如何分析黄金白银价格的国际比例关系?这种关系对投资有何指导意义?
6年过去,李小璐、PGone等人现状曝光:有人回归家庭,有人仍在追梦
“食人菌”感染症,病如其名?
车祸中使用医保的要求有哪些?这些要求有哪些实际应用?
考社工证有什么好处 发展前景怎么样
《轻松掌握:如何快速找到人的八字命盘》
钱壮飞牺牲后,留下四个子女独自走过烽火岁月,他的后代现在如何
“999银”VS“925银”,到底哪个好?看这“3点”就明白!
【社工案例】孤影生辉 点亮心窗——社会工作者介入独居老人个案