fastapi_No.6_获取cookie和header参数

Cookie

Cookie是在网站中为了辨别用户身份,进行Session跟踪而存储在用户本地终端上的数据(通常已经加密),由用户客户端计算机暂时或永久保存的信息。

设置Cookie

通常客户端首次访问服务端的时候,服务端都会向客户端发送一些Cookie信息,让客户端电脑中存储这些信息。
在fastapi中服务端向客户端设置cookie需要使用到Response类。

from typing import Union
from fastapi import  FastAPI
app = FastAPI()
# 声明一个用户类的请求体类型
from pydantic import BaseModel
class User(BaseModel):
    userName:str
    pwd:str

# 导入fastapi中的Response类用来设置cookie
from fastapi import Response
@app.post("/register/")
def createUser(user:User,response:Response):
    response.set_cookie(key="userName",value=user.userName)
    response.set_cookie(key="pwd",value=user.pwd)
    return {"result":"register successfully"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app="main:app",host="localhost",port=8080,reload=True)

本例中通过客户端向服务端发送注册请求后,服务端向客户端发送两个cookie。
利用postman演示结果如下:
演示结果
cookie部分结果

读取cookie信息

当客户端首次访问后,客户端往往就存储了cookie信息。后面再访问服务端时,服务端会读取客户端中的相关cookie信息。
fastapi中读取cookie信息,需要从fastapi包中引入Cookie函数。

# 演示服务端从客户端读取cookie信息
# 导入fastapi中的Cookie函数用来表示cookie
from fastapi import Cookie
@app.get("/items/{item_id}")
# 此处需要注意cookie定义的名称需要和客户端中cookie的key的名称一致!!!
def get_items(item_id:int,userName:Union[str,None]=Cookie(default=None),pwd:Union[str,None]=Cookie(default=None)):
    return {
        "item_id":item_id,
        "userName":userName,
        "pwd":pwd
    }

在读取客户端中Cookie时需要注意,代码中cookie的变量名称必须和客户端cookie中的key值一致!!!

在postman中测试的结果如下:

获取cookie信息的结果

Header

在请求头中包含很多客户端请求的一些额外说明,例如user-agent,content-type等信息。
请求头中的数据也是以键值对的形式存储的。所以当我们想获取某个key的请求体内容时,我们必须要设置对应的key的变量名称来接收请求头内容。
在fastapi中需要导入Header函数来接收请求头参数。

读取单值请求头数据

# 演示获取请求头的相关信息
# 导入fastapi中的Header函数用来表示header
from fastapi import Header
@app.get("/demo")
# 由于正常请求头中key的命名是这样的User-Agent,如何以这个作为变量名python认为是非法的变量命名
# 由于这种冲突fastapi中会将user_agent当做User-Agent。
# 如果不想使用这种默认的解决冲突方式需要,在Header函数中使用convert_underscores=False
def demo(user_agent:Union[str,None]=Header(None,convert_underscores=True),postman_token:Union[str,None]=Header(None)):
    return{
        "User-Agent":user_agent,
        "Postman-Token":postman_token
    }

此处需要知道Header函数中convert_underscores参数的含义

此例的演示结果如下:
获取header的演示结果

获取多值请求头数据

当获取多值请求头数据时,需要将相应的请求头对应的变量的类型设置为列表类型。

# 演示获取一个请求头具有多个值的情况
# 要获取多个值的请求头信息,需要将对应的请求头变量的类型设置为列表类型
from typing import List
@app.get("/demos")
def demos(x_token:Union[List[str],None]=Header(default=None,convert_underscores=True)):
    return {
        "X-Token":x_token
    }

演示结果如下图所示:
多值请求头数据获取演示结果

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习_程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值