在FastAPI中,要使用session,实际上是使用Starlette Session,Starlette Session是作为一个中间件存在的,所以需要安装Starlette Session。执行命令:
pip install starlette-session16.1使用Redis作为session存储
代码如下:
from fastapi import FastAPI from redis import Redis from starlette_session import SessionMiddleware from starlette_session.backends import BackendType app = FastAPI() redis_client = Redis(host="127.0.0.1", port=6379, password="xxxxxx") app.add_middleware( SessionMiddleware, secret_key="secret", cookie_name="cookie22", backend_type=BackendType.redis, backend_client=redis_client )16.2使用Redis Cluster作为session存储
代码如下:
from fastapi import FastAPI from rediscluster import RedisCluster from starlette_session import SessionMiddleware from starlette_session.backends import BackendType app = FastAPI() redis_client = RedisCluster(host="127.0.0.1", port=6381, password="xxxxxx") app.add_middleware( SessionMiddleware, secret_key="secret", cookie_name="cookie22", backend_type=BackendType.redis, backend_client=redis_client )16.3 *** 作session
在FastAPI中, *** 作session可以通过request对象直接进行 *** 作,假设对象名为request,则:
request.session.update()
设置session,参数为字典
request.session.clear()
清除session
request.session
读取session
代码如下:
from fastapi import FastAPI from fastapi import Request from rediscluster import RedisCluster from starlette_session import SessionMiddleware from starlette_session.backends import BackendType app = FastAPI() redis_client = RedisCluster(host="127.0.0.1", port=6381, password="jane10181010") app.add_middleware( SessionMiddleware, secret_key="secret", cookie_name="cookie22", backend_type=BackendType.redis, backend_client=redis_client ) @app.get(path='/set') async def set(request: Request): request.session.update({"uid": "10181010"}) return {'res': True} @app.get(path='/cls') async def cls(request: Request): request.session.clear() return {'res': True} @app.get(path='/get') async def get(request: Request): return {'session': request.session}
执行请求:
curl http://127.0.0.1:8000/set -i HTTP/1.1 200 OK date: Tue, 18 Jan 2022 02:20:00 GMT server: uvicorn content-length: 12 content-type: application/json set-cookie: cookie22=eyJfY3NzaWQiOiAiOGExMDJiM2UtZjJiNS00ZmVmLWJhZWEtYWM5YjI4ZWQ1N2JlIn0=.YeYj0Q.UCFZKi3jalMw0SknLsmM_RYpSj0; Path=/; Max-Age=1209600; httponly; samesite=lax {"res":true} curl http://127.0.0.1:8000/get --cookie "cookie22=eyJfY3NzaWQiOiAiOGExMDJiM2UtZjJiNS00ZmVmLWJhZWEtYWM5YjI4ZWQ1N2JlIn0=.YeYj0Q.UCFZKi3jalMw0SknLsmM_RYpSj0; Path=/; Max-Age=1209600; httponly; samesite=lax" -i HTTP/1.1 200 OK date: Tue, 18 Jan 2022 02:20:26 GMT server: uvicorn content-length: 30 content-type: application/json set-cookie: cookie22=eyJfY3NzaWQiOiAiOGExMDJiM2UtZjJiNS00ZmVmLWJhZWEtYWM5YjI4ZWQ1N2JlIn0=.YeYj6w.H2gL6V-BTq4ePB9gaTg-3fAt5r0; Path=/; Max-Age=1209600; httponly; samesite=lax {"session":{"uid":"10181010"}} curl http://127.0.0.1:8000/cls --cookie "cookie22=eyJfY3NzaWQiOiAiOGExMDJiM2UtZjJiNS00ZmVmLWJhZWEtYWM5YjI4ZWQ1N2JlIn0=.YeYj0Q.UCFZKi3jalMw0SknLsmM_RYpSj0; Path=/; Max-Age=1209600; httponly; samesite=lax" -i HTTP/1.1 200 OK date: Tue, 18 Jan 2022 02:20:48 GMT server: uvicorn content-length: 12 content-type: application/json set-cookie: cookie22=null; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; httponly; samesite=lax {"res":true} curl http://127.0.0.1:8000/get --cookie "cookie22=eyJfY3NzaWQiOiAiOGExMDJiM2UtZjJiNS00ZmVmLWJhZWEtYWM5YjI4ZWQ1N2JlIn0=.YeYj0Q.UCFZKi3jalMw0SknLsmM_RYpSj0; Path=/; Max-Age=1209600; httponly; samesite=lax" -i HTTP/1.1 200 OK date: Tue, 18 Jan 2022 02:20:53 GMT server: uvicorn content-length: 16 content-type: application/json set-cookie: cookie22=null; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; httponly; samesite=lax {"session":null}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)