У меня проблема CORS с этим кодом с localhost:3000.
Я проверил документацию fastAPI и добавил код для решения этой проблемы.
Но изменений нет, и у меня всегда возникает ошибка .
Вот мой код:
import httpx
from fastapi import FastAPI
from pydantic import BaseModel
from starlette.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [
"http://localhost:3000"
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
msgs=dict()
class Body(BaseModel):
title: str
class Msg(BaseModel):
type: str
content: dict
@app.post("/posts/")
async def posts(body: Body):
number= len(msgs)+1
title = body
msgs[number]= {
"type": "PostCreated",
"data": {
"id": number,
"title": title.title
}
}
api_url = "http://localhost:4005/events"
async with httpx.AsyncClient() as client:
response = await client.post(api_url, json={
"type": "PostCreated",
"data": {
number, title
}
})
return msgs
@app.post("/events/")
async def event_monitoring(msg: Msg) :
print(msg.type)
@app.get("/posts/")
async def root():
return msgs
Вот предупреждение об ошибке:
Access to XMLHttpRequest at 'http://localhost:4000/posts/' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
localhost:3000 — клиент, localhost:4000 — сервер.
Как решить эту проблему?
EDIT: сервер выдает эту ошибку:
"OPTIONS /posts HTTP/1.1" 405 Method Not Allowed
все методы еще разрешены...
РЕДАКТИРОВАТЬ 2: этот код работает правильно! но теперь у меня есть ошибка 422.
import httpx
from fastapi import FastAPI
from pydantic import BaseModel
from starlette.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [
"http://localhost:3000"
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
msgs=dict()
class Body(BaseModel):
title: str
class Msg(BaseModel):
type: str
content: dict
@app.post("/posts/")
async def posts(body: Body):
number= len(msgs)+1
title = body
msgs[number]= {
"type": "PostCreated",
"data": {
"id": number,
"title": title.title
}
}
api_url = "http://localhost:4005/events/"
async with httpx.AsyncClient() as client:
response = await client.post(api_url, json={
"type": "PostCreated",
"data": {
"id": number,
"title": title.title
}
})
return msgs
@app.post("/events/")
async def event_monitoring(msg: Msg) :
print(msg.type)
@app.get("/posts/")
async def root():
return msgs
РЕДАКТИРОВАТЬ 3:
Класс Msg был неправильным... Мне пришлось это поставить, и теперь он работает:
class Msg(BaseModel):
type: str
data: dict
Подробнее здесь: https://stackoverflow.com/questions/792 ... middleware
Проблема CORS с FastAPI, несмотря на использование определенного промежуточного программного обеспечения [дубликат] ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как написать собственный класс промежуточного программного обеспечения FastAPI
Anonymous » » в форуме Python - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-