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头,["*"]
表示允许所有头。
修改结果
经过上述配置后,代码能够正常执行,不再出现跨域错误:
热门推荐
警惕!磷酸二氢钾,绝对别和这三种物质混配,容易产生药害、肥害
聚焦农行丨寻味金华——一方火腿的传承与演绎
佛手瓜——一年一种的奇特果蔬(了解佛手瓜的生长特点与营养价值)
全球瞩目!2024年世界隧道大会在深圳开幕!
《人类政治发展史-227》拿破仑帝国(上)
山西:让博物馆提供更多文化滋养
重庆区县楼市动态:成交量与价格走势分析
如何评估企业的合作机会?这些合作机会有哪些影响?
LOL官方谈换线:削弱前中期换线战术,维护游戏公平性
产品拍摄如何选择适合的摄影器材
涨知识 | 羽毛球拍的6大正确保存方式!
限价房和经济适用房的区别及优势分析
蝌蚪吃什么食物?(蝌蚪吃什么 教你怎么养蝌蚪)
如何给团队发福利信息
Yandex首页使用教程:从入门到高级操作
史广建:智慧交通行业现状与发展前景
如何分析黄金价格的趋势图形?这种图形如何辅助投资决策的制定?
网络诽谤罪取证指引
学校家长安全护卫队:校园安全守护者的运作机制与实践
中国领土是天选之地,地理条件近乎完美,却存在5个大遗憾!
从图标入手,详解SD卡的容量、类型、最低速度等信息
从图标入手,详解SD卡的容量、类型、最低速度等信息
库里即将达成25000分和4000三分球双里程碑,活塞将成其最大挑战
5首励志诗词,艰难困苦有时尽,人生没有过不去的坎
餐饮厨房设备老化应对策略:升级与替换指南
如何选择合适的大功率开关电源
微血管型心绞痛的治疗药物有哪些
白左是什么意思?了解‘白左’的背景与含义
现役巨星扣篮次数:库里26次,约基奇191次,字母哥2078次
多人聊天室