fastapi(十九)-中间件

你可以添加中间件到你的fastapi应用程序中
“中间件”是一种函数,该函数可在每个请求由任何特定路径操作处理之前与每个请求一起使用。以及返回之前的每个响应。

  • 它从你的应用程序中接收每个请求
  • 然后,它可以对该请求执行某些操作或运行任何所需的代码。
  • 然后,它传递要由应用程序其余部分处理的请求(通过某些路径操作)。
  • 然后,它将获取应用程序生成的响应(通过某些路径操作)
  • 它可以对响应做出响应或运行任何需要的代码。
  • 然后返回响应。
    创建middleware
    为了创建中间件,可以使用@app.middleware(“http”)装饰器。
    其中:
    1、接收request
    2、call_next将request作为参数,然后传给相应的路径,最后返回response
    3、最后可做进一步的修改response再返回。
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。

### 回答1: 使用FastAPI和Redis来获取session,可以按照以下步骤进行操作: 1. 首先,安装所需的库。使用pip命令安装FastAPIfastapi_session库,以及aioredis库。 2. 创建一个FastAPI应用程序,并导入所需的库和模块。 ```python from fastapi import FastAPI from fastapi_session import SessionMiddleware import aioredis ``` 3. 初始化FastAPI应用程序和Redis连接。 ```python app = FastAPI() redis = await aioredis.create_connection("redis://localhost:6379") ``` 4. 添加SessionMiddleware中间件FastAPI应用程序中。 ```python app.add_middleware(SessionMiddleware, secret_key="your-secret-key", redis_instance=redis) ``` 在上述代码中,需要将"your-secret-key"替换为一个随机生成的密钥,用于对会话数据进行加密。 5. 创建一个路由,用于访问和操作session数据。 ```python @app.get("/session") async def get_session(session=Depends(get_session_manager)): return session["data"] ``` 上述代码中的"get_session_manager"是一个自定义的依赖项函数,用于获取session管理器。 6. 启动FastAPI应用程序。 ```python if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000) ``` 现在,您可以使用FastAPI和Redis来获取session。当访问/session路由时,将返回session中存储的数据。您可以使用其他路由来设置、更新或删除session数据。请根据您的具体需求进行相应的操作。 ### 回答2: fastapi-redis-session 是一个用于获取 session 的 FastAPI 插件。它基于 Redis 数据库实现了会话管理,并提供了一种简单的方式来存储和获取会话数据。 为了使用 fastapi-redis-session,首先需要安装并导入 fastapi 和 redis 相关的库。然后,创建一个 FastAPI 应用程序,并使用 fastapi-redis-session 插件初始化会话管理。 通过 fastapi-redis-session,可以使用 `request.session` 来访问会话对象。会话对象有一个 `get` 方法,用于从会话中获取数据。例如,可以通过 `request.session.get('username')` 获取会话中的用户名。 如果需要设置会话数据,可以使用会话对象的 `__setitem__` 方法,用于将数据写入会话。例如,可以通过 `request.session['username'] = 'John'` 将用户名存储到会话中。 此外,还可以使用会话对象的 `delete` 方法,用于从会话中删除数据。例如,可以通过 `request.session.delete('username')` 删除会话中的用户名。 要注意的是,fastapi-redis-session 还提供了其他一些功能,如设置会话过期时间、使用不同的 Redis 配置和使用自定义的会话 ID。 总体而言,fastapi-redis-session 为 FastAPI 应用程序提供了一种简单而强大的方式来管理会话。通过使用该插件,可以轻松地获取、存储和操作会话数据,从而提高应用程序的用户体验和功能扩展性。 ### 回答3: FastAPI-Redis-Session 是一个通过 Redis 存储会话数据的 FastAPI 插件。要获取 session,首先需要安装和配置 FastAPI-Redis-Session 插件。 步骤如下: 1. 首先确保已安装 FastAPIFastAPI-Redis-Session 插件。可以使用 pip 进行安装: ``` pip install fastapi fastapi-redis-session ``` 2. 在 FastAPI 应用程序中导入 FastAPI-Redis-Session: ```python from fastapi_redis_session import SessionMiddleware from fastapi import FastAPI ``` 3. 创建 FastAPI 应用程序并添加中间件: ```python app = FastAPI() app.add_middleware(SessionMiddleware, secret_key="your-secret-key", expire_seconds=3600, redis_url="redis://localhost:6379") ``` 4. 在路由函数中,可以通过访问 `request.session` 来获取 session 对象,然后对其进行操作: ```python from fastapi import Request @app.get("/example") def example(request: Request): session = request.session # 获取 session 数据 data = session.get("key") # 设置 session 数据 session["key"] = "value" ``` 在上述示例中,我们首先从请求对象 `request` 中获取 `session` 对象,然后可以使用 `get()` 方法来获取 session 中的数据,或者使用字典的方式设置或修改 session 数据。 需要注意的是,在添加中间件时,我们需要提供一个密钥(`secret_key`)用于对 session 数据进行加密,过期时间(`expire_seconds`)用于定义 session 的过期时间,以及 Redis 的 URL 地址(`redis_url`)。 以上就是使用 FastAPI-Redis-Session 插件来获取 session 的简要步骤和示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值