如何在 FastAPI 中启用 CORS?
How can I enable CORS in FastAPI?
我试图在这个非常基本的 FastAPI 示例中启用 CORS,但它似乎不起作用。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=['*']
)
@app.get('/')
def read_main():
return {'message': 'Hello World!'}
这是我得到的回复:
curl -v http://127.0.0.1:8000
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8000 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1:8000
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Fri, 08 Jan 2021 19:27:37 GMT
< server: uvicorn
< content-length: 26
< content-type: application/json
<
* Connection #0 to host 127.0.0.1 left intact
{"message":"Hello World!"}*
你可以从这里找到答案:fastapi cors
那么这是一个非常简单的代码来实现它:
创建一个 python 文件并将其命名为 main.py
.
在此文件中添加代码。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
async def main():
return {"message": "Hello World"}
和运行这个应用程序:
uvicorn main:app --reload --host 0.0.0.0 --port 8000
如果你的电脑ip是192.12.12.12
你可以检查这个link然后在html中写一个小的javascript:
<script>
fetch("http://192.12.12.12:8000/").then((Response) => {
return Response.json()
}).then((data) => {
console.log(data);
})
</script>
CORS 或“跨源资源共享”是指浏览器中的前端 运行 具有与后端通信的 JavaScript 代码,并且后端位于不同的“ origin” 比前端。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [
"http://domainname.com",
"https://domainname.com",
"http://localhost",
"http://localhost:8080",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
在我的例子中,当出现 pydantic 或类型问题时,CORS 不起作用。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [
"http://localhost:3000",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# works well!
@app.get("/list")
async def main():
return ["hi", "hello"]
# error cases
from typing import List
from app.nosql.model import Book
@app.get("/error")
async def main():
# case 1
ret = mongo_db.engine.find(Book, limit=10) # keyword "await" missing
return ret # CORS 500 error
# case 2
ret: List[Book] = await mongo_db.engine.find(Book, limit=10) # data was not fit with model Book
return ret # CORS error
# case 3
return ["hi", "hello"] # works well...
服务器端错误说明了什么?
可能是服务器发生错误。
用新功能测试怎么样。 (没有错误)
如果服务器运行良好.. 嗯.. 对不起.
我试图在这个非常基本的 FastAPI 示例中启用 CORS,但它似乎不起作用。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=['*']
)
@app.get('/')
def read_main():
return {'message': 'Hello World!'}
这是我得到的回复:
curl -v http://127.0.0.1:8000
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8000 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1:8000
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Fri, 08 Jan 2021 19:27:37 GMT
< server: uvicorn
< content-length: 26
< content-type: application/json
<
* Connection #0 to host 127.0.0.1 left intact
{"message":"Hello World!"}*
你可以从这里找到答案:fastapi cors
那么这是一个非常简单的代码来实现它:
创建一个 python 文件并将其命名为
main.py
.在此文件中添加代码。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
async def main():
return {"message": "Hello World"}
和运行这个应用程序:
uvicorn main:app --reload --host 0.0.0.0 --port 8000
如果你的电脑ip是192.12.12.12
你可以检查这个link然后在html中写一个小的javascript:
<script>
fetch("http://192.12.12.12:8000/").then((Response) => {
return Response.json()
}).then((data) => {
console.log(data);
})
</script>
CORS 或“跨源资源共享”是指浏览器中的前端 运行 具有与后端通信的 JavaScript 代码,并且后端位于不同的“ origin” 比前端。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [
"http://domainname.com",
"https://domainname.com",
"http://localhost",
"http://localhost:8080",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
在我的例子中,当出现 pydantic 或类型问题时,CORS 不起作用。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [
"http://localhost:3000",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# works well!
@app.get("/list")
async def main():
return ["hi", "hello"]
# error cases
from typing import List
from app.nosql.model import Book
@app.get("/error")
async def main():
# case 1
ret = mongo_db.engine.find(Book, limit=10) # keyword "await" missing
return ret # CORS 500 error
# case 2
ret: List[Book] = await mongo_db.engine.find(Book, limit=10) # data was not fit with model Book
return ret # CORS error
# case 3
return ["hi", "hello"] # works well...
服务器端错误说明了什么? 可能是服务器发生错误。 用新功能测试怎么样。 (没有错误) 如果服务器运行良好.. 嗯.. 对不起.