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头,["*"]表示允许所有头。
修改结果
经过上述配置后,代码能够正常执行,不再出现跨域错误:
热门推荐
报价1000美金的红人,我是如何以50美金谈下来的?
SQL注入攻击实验教程
国家自然科学基金全流程解读:开篇
纯电动汽车常见高压系统不上电故障
男大必备的运动风穿搭来袭,照着穿,准没错
EGT传感器:汽车性能提升的关键技术
制造业企业各部门如何参与生产成本控制与管理
风口轮到“自主可控”?半导体材料ETF逆势上扬,如何看持续性?
新员工入职签什么合同,有哪些需要注意的地方?
消化的智慧:选择对的食物,让肠胃更轻松
详解材料检测验收报告的审核流程,确保项目质量与合规性
清华新学期书单,一起来读!
液位测量方法详解:蒸汽锅炉水位探测技术
只吃兔子肉,真的会饿死?
小家电“吹风”也致命?警惕“吹”来横祸!
二十位世界哲学大师对生命的观点
产后便秘知多少?
港生探访少林寺 感受中华武术魅力
2024上海幼儿园招生规则详解:积分政策与区域入学指南
普通人应该如何管理风险
為什麼一學習就想睡?
一旦爆发战争,究竟哪些东西最珍贵、最值钱呢?
掌握音标发音技巧,提升英语听说能力的有效方法与建议
Excel数据填充模板:四种实用方法详解
复旦大学直博招生新政:重塑留学中介业务与留学生选择
箫技巧:高超吹音和泛音
项目成本预算调整策略全解析
美元汇率下降对跨境电商的影响与应对策略
最新显卡碰撞:RTX5070推迟至3月初,AMD如何应对市场博弈?
LED显示屏光污染防治:技术措施与管理办法