你可以添加中间件到你的fastapi应用程序中
“中间件”是一种函数,该函数可在每个请求由任何特定路径操作处理之前与每个请求一起使用。以及返回之前的每个响应。
import time
from fastapi import FastAPI, Request
app = FastAPI()
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
response.headers["X-Process-Time"] = str(process_time)
return response
CORS
前后端跨域通信。
http://localhost
https://localhost
http://localhost:8080
这三个地址都是属于不同的域,即使处于同样的域名,不同的端口协议都属于跨域。
为了实现跨域,在后端必须的有一个允许的域列表,
或者使用“”通配所有的域。但是通配只允许某些类型,不包括涉及凭据的内容:cookie,授权headers。
所以为了适用于所有的情况,最好指定允许的域。
使用CORSMiddleware
在fastapi中可以使用CORSMiddleware。
1、import CORSMiddleware
2、创建允许域列表(作为字符串)
3、作为中间件添加到FastAPI应用程序。
也可以指定后端是否允许:
1、凭证(授权标头,Cookie等)。
2、特定的HTTP方法(POST,PUT)或所有带通配符的方法""。
3、特定的HTTP标头或所有通配符"*"。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [
"http://localhost.tiangolo.com",
"https://localhost.tiangolo.com",
"http://localhost",
"http://localhost:8080",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
async def main():
return {
"message": "Hello World"}
您需要显式启用特定的来源,方法或标头,以便允许浏览器在跨域上下文中使用它们。
支持以下参数:
1、allow_origins-应该允许进行跨域请求的来源列表。您可以[’’]用来允许任何来源。
2、allow_origin_regex-一个正则表达式字符串,与应允许进行跨域请求的原点匹配。例如。'https://..example.org’。
3、allow_methods-跨域请求应允许的HTTP方法列表。默认为[‘GET’]。您可以使用[’’]允许所有标准方法。
4、allow_headers-跨域请求应支持的HTTP请求标头列表。默认为[]。您可以[’’]用来允许所有标头。的Accept,Accept-Language,Content-Language和Content-Type头总是允许CORS请求。
5、allow_credentials-表示跨域请求应支持cookie。默认为False。
6、expose_headers-指出应使浏览器可以访问的所有响应标头。默认为[]。
7、max_age-设置浏览器缓存CORS响应的最长时间(以秒为单位)。默认为60。