python:Fastapi - Cookie 和 Header

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python:Fastapi - Cookie 和 Header相关的知识,希望对你有一定的参考价值。

参考技术A

前面唠了一些关于请求体的一些事情,这次主要唠下 cookie 和 header 的东西, cookie 、 header 和 Path 、 Query 一样都是继承公共的 Param 类,传参的一些参数都差不多是一样的。

区别的就是 Path 、 Query 是在 postman 中的 Param 中放入参数进行请求,而 cookie 、 header 则是在 postman 中的 Headers 中放入参数进行请求

导入 Cookie

第一个值是参数的默认值,同时也可以传递所有验证参数或注释参数,来校验参数:

Cookie(...) 的默认值设置的是必填参数,如果请求时不填写则抛出异常
Cookie(None) 的默认值设置的是 None ,请求时则不填写,不会抛出,请求结果返回是 null 值

启动服务:

请求接口:

请求参数:

请求结果:

首先导入 Header

然后使用和 Path 、 Query 和 Cookie 一样的结构定义 Header 参数

第一个值是默认值,你可以传递所有的额外验证或注释参数:

Header(...) 的默认值设置的是必填参数,如果请求时不填写则抛出异常。但是如果你在工具(例如: postman 、 浏览器 )中请求接口,工具会默认给你提供一个 user_agent ,所以自然就看不到报错了。

Header 在 Path 、 Query 和 Cookie 提供的功能之上有一点额外的功能:

启动服务:

请求接口:

请求参数:

请求结果:

但是有些时候出于某些原因,需要禁用下划线到连字符的自动转换,设置 Header 的参数 convert_underscores 为 False 即可:

启动服务:

请求接口:

请求参数:

请求结果:

从请求结果可以清晰看到,类型错误,导致这个抛出错误原因就是在 headers 中设置了 convert_underscores=False 。

注意点: 因为有些代理服务器不支持使用带有下划线的 headers ,所以就会出现矛盾体,就是我既想禁用,又想正常访问的问题。对于这个问题,大家探讨吧…

因为与路径通信时会发送多个 HTTP headers ,对于重复的 headers 则需要使用一个 list 来获得重复 header 的所有值:

启动服务:

请求接口:

请求参数:

请求结果:

未完成,待续……

一直在努力,希望你也是!

微信搜索公众号:就用python

FastAPI 重定向给出了不允许的方法错误

【中文标题】FastAPI 重定向给出了不允许的方法错误【英文标题】:FastAPI redirect gives method not allowed error 【发布时间】:2021-06-25 05:30:46 【问题描述】:

我创建了一个登录路径,我在其中发布我的表单数据并设置一个 cookie。设置 cookie 后,我重定向到“/main”,在那里我得到detail:"Method Not Allowed" 作为响应。

@app.post("/login")
async def login(request:Request):
     response = RedirectResponse(url="/main")
     response.set_cookie(key="cookie",value="key-value")
     return response

@app.get("/main")
async def root(request:Request, cookie: Optional[str] = Cookie(None)):
     if cookie:
        answer = "set to %s" % cookie
     else:
          answer = "not set"

     return "value": answer

我进一步检查了控制台,发现在重定向期间向“/main”发出了 POST 请求,因此导致了错误。当我将其更改为 app.post("/main") 时,它工作正常。如何避免此错误?我不想每次都发布访问“/main”的请求。提前致谢。

【问题讨论】:

【参考方案1】:

我发现在 FastAPI 中,starlette 响应默认有代码 307,它在重定向期间保留方法,因此是 post 请求。我通过在返回响应之前添加response.status_code = 302 解决了这个问题。

【讨论】:

以上是关于python:Fastapi - Cookie 和 Header的主要内容,如果未能解决你的问题,请参考以下文章

FastAPI 重定向给出了不允许的方法错误

fastapi nodejs 性能比较

fastapi教程翻译(十六):Form Data(表格数据)

FastAPI 1:安装FastAPI

搭建ASGI高性能web服务器FastAPI,python

搭建ASGI高性能web服务器FastAPI,python