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头,["*"]表示允许所有头。
修改结果
经过上述配置后,代码能够正常执行,不再出现跨域错误:
热门推荐
婴儿低烧症状及应对方法
英国一年制硕士真的是"水硕"吗?
2型神经纤维瘤病基因检测:从诊断到预防的全面指南
生产数据管控流程怎么确保数据准确性
事业单位请病假工资计算方法详解
小儿髋关节滑膜炎怎么治疗最有效
个体工商户名下的房产转移到经营者个人名下,是否要缴纳相关税费?
湖南女子学院2024年各专业学费收费标准详解
快速上手,上海白菜如何与其他食材完美搭配
临沂注册公司:个体工商户与法人代表有什么区别?
静山之谜:地上仅0.6米,地下却藏着一座真正的山
无人机失控时该如何应对
老年人下肢浮肿是什么原因引起的
大方漆器:贵州传统工艺美术瑰宝
充值USDT选择什么网络好?有这几个秘诀
怎样在银行防范中间业务风险?
探索青甘大环线:9-10月的绝美之旅
打破健身误区:女性力量训练指南
有限合伙企业与有限责任公司:探究两者之间的主要区别
如何让“城市动脉”更畅通?长沙打造“多元化”公共交通体系有诀窍
舌尖到心间,守好校园每一餐:哈尔滨市教育局多措并举筑牢校园食品安全防线
夏季野钓攻略:四个方向找地形,深浅都能钓大鱼
身体有病,胯骨知道?医生:总是“胯骨疼”,或是3种疾病的警报
贴片电容的耐压等级及选择技巧
万和热水器打不着火故障检修(解决万和热水器点不着火的问题)
美国未来几十年或现上万“鬼城”,死亡人数多于出生人口
如何在法律允许下获取配偶的住宿信息
探析五险一金基数的确定:法律依据与实务操作指南
WES是什么意思?详解WES的多重含义及其应用场景
如何计算相机分辨率和镜头选型