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头,["*"]
表示允许所有头。
修改结果
经过上述配置后,代码能够正常执行,不再出现跨域错误:
热门推荐
超级主播"退潮":直播电商行业的变与不变
央视《成语探华夏》节目走进邯郸,文化传承再启新篇
孕期体重管理指南:如何科学孕育健康宝宝
如何选择具有良好业绩表现的 ETF?业绩表现的评估方法有哪些?
当动物年老了,丧失生存能力,子女会给他养老吗?和你想的不一样
中国制造业企业向东南亚投资的新动机、新机遇与新挑战
专家:关注城中村改造模式变革,城中村改造对城市发展有何影响?
【研究启示】重视T1DM患者早期肾脏损伤的筛查及管理
如何更好地维护手机电池的健康
“湖北”地名何时登上历史舞台?
精神分裂症的复发率是不是特别高?停药就会复发吗?
诚信,构建社会和谐的基石
S1赛季金铲铲之战:亚索的致胜攻略与玩法解析
夏季空调温度调节指南,舒适与节能并重
腹泻背后的隐藏"杀手"
汽车消费7个陷阱
抚顺琥珀价值,揭秘抚顺琥珀的价值:稀世珍宝还是商业炒作?
离婚财产分割对特殊情况怎么处理
股票MACD指标的八种买入形态详解
口干口苦的原因与应对策略
现代CPU性能分析与优化:Roofline性能模型详解
早餐吃牛油果好处多,营养师拆解其神奇功效
人民币汇率飙升的原因及对国内消费者购买力的影响
如何为160斤男士选择合适长度的皮带及选购指南
从论资排辈到抽签选官:中国古代选官制度的流弊分析
汽车行驶安全电控技术-防抱死制动系统(ABS)详解
提升芝麻信用分的策略与技巧
沪苏轨交双11号线“同乘”促“同城”,智创TOP承接城际产业协作
骨盆不良姿态全解析:类型、成因与改善方法
石家庄2025元宵节热门景点公交出行攻略