使用FastAPI搭建网站(四):使用cookie和session
###读取Cookie
与Path、Query、Form参数一样,FastAPI使用相同的方式读取Cookie参数
![cookie](https://ww3.sinaimg.cn/large/612edf3ajw1e2u8o36gogj.jpg)
```
from fastapi import Cookie
...
@app.get("/")
async def index(user: str = Cookie(...)):
return user
```
###设置Cookie
FastAPI可以通过 Response 类设置cookie
```
from fastapi import Response
...
@app.post("/")
def create_cookie(response: Response):
response.set_cookie(key="user", value="锵锵枪")
return "Hello World"
```
###使用Session
FastAPI本身不支持Session,但是我们可以引入 starlette 的中间件 SessionMiddleware 来实现,当然也可以自己写一个session类来处理session。session的使用非常简单,只要我们引入Request,就能在路径函数,模版等任意地方通过 request['session'] 使用session。
![网络安全](https://wx1.sinaimg.cn/large/006VkBIply1ghmwrt83kzj30bg07tdkv.jpg)
```
from starlette.middleware.sessions import SessionMiddleware
app.add_middleware(SessionMiddleware, secret_key='secret_key',max_age=25200,session_cookie='xxx_sid')
async def signin(request: Request , name : str = Form(...)):
if( name == admin['account'] ):
request['session']['user'] = admin['user']
```
- secret_key 是加密密钥,用于session数据的加密存储
- max_age 是session的有效期
- session_cookie session的cookieID
SessionMiddleware的session数据是直接加密后存储在cookie里的,我们也可以自己修改 SessionMiddleware 来存储在 redis、文件、memecache和Nosql之类的地方。
Done.