FastAPI请求处理与Cookie机制详解

张开发
2026/4/14 23:40:26 15 分钟阅读

分享文章

FastAPI请求处理与Cookie机制详解
文章目录前言一、request请求1.1 什么是request请求1.2获取Content-Type请求头信息的两种方法1.2.1 直接通过字典方式获取不推荐1.2.2 通过get方法获取推荐1.3 request请求三种获取参数的方法1.3.1 第一种路径参数1.3.2 第二种查询参数1.3.3 第三种请求体参数二、什么是Cookie2.1 什么是Cookie2.2 Cookie的原理是什么2.2.1 第一步服务器创建Cookie2.2.2 浏览器保存Cookie2.2.3 浏览器自动发送Cookie2.3 添加Cookie2.4 获取Cookie结语注在学习本篇文章之前请先学习FastAPI入门实战从零搭建到核心功能详解前言Web开发的核心在于处理请求与维持状态。本文从FastAPI的Request对象出发详解请求头读取、参数获取的实用技巧并深入剖析Cookie的工作原理。无论你是刚入门的新手还是想系统梳理知识点的开发者都能在这里找到清晰的答案。一、request请求1.1 什么是request请求用户打开浏览器访问网站时浏览器会向服务器发送一条消息。这条消息就是request请求。它里面包含了用户想干什么、带了什么数据、用什么方式访问等信息。服务器收到这条消息后会查看里面的内容然后决定返回什么给用户。1.2获取Content-Type请求头信息的两种方法请求头里面放了很多辅助信息。比如用户的浏览器类型、想要接收什么格式的数据、身份验证的令牌等。1.2.1 直接通过字典方式获取不推荐这种方式像查字典一样直接用中括号取值。但如果请求头里没有这个字段程序会直接报错。fromfastapiimportAPIRouter,Request,Response request_routerAPIRouter()request_router.get(/header/)asyncdefget_request_header(request:Request):# 获取Content-Type请求头的头信息# Content-Type是HeaderName(头名)# 如果请求头中没有该头信息Content-Type则会抛出异常content_typerequest.headers[Content-Type]return{Content-Type:content_type}代码详解使用字典的索引访问方式request.headers[Content-Type]当请求头种不存在“Content-Type”时会抛出KeyError异常这会导致API响应500 Internal Server Error异常1.2.2 通过get方法获取推荐这种方式更安全。如果请求头里没有这个字段它会返回None程序不会崩溃。fromfastapiimportAPIRouter,Request,Response request_routerAPIRouter()request_router.get(/header/2/)asyncdefget_request_header_2(request:Request):# 获取Content-Type请求头的头信息# Content-Type是HeaderName(头名)# 如果请求头中没有该头信息Content-Type则会返回Nonecontent_typerequest.headers.get(Content-Type)user_agentrequest.headers.get(User-Agent)return{Content-Type:content_type,User-Agent:user_agent}代码详解使用字典的get()方法request.headers.get(Content-Type)当请求头中不存在“Content-Type”时返回None不会抛出异常API会正常响应可以提供默认值request.headers.get(Content-Type,application/json)1.3 request请求三种获取参数的方法用户传数据给服务器通常有三种方式。这些方式对应URL的不同部分。1.3.1 第一种路径参数路径参数写在URL里面是URL路径的一部分。比如/path_params/张三。fromfastapiimportAPIRouter,Request,Response request_routerAPIRouter()request_router.get(/path_params/{name})asyncdefget_path_params(request:Request):# 获取路径参数 path_paramsnamerequest.path_params.get(name)return{name:name}1.3.2 第二种查询参数查询参数跟在问号后面用键值对的形式。比如/?name张三。fromfastapiimportAPIRouter,Request,Response request_routerAPIRouter()request_router.get(/params/)asyncdefget_request_params(request:Request):# 获取请求参数 query_paramsnamerequest.query_params.get(name)return{name:name}1.3.3 第三种请求体参数请求体放在POST或PUT请求里面通常是JSON格式的数据。获取请求体需要用到await因为读取数据是异步操作。fromfastapiimportAPIRouter,Request,Response request_routerAPIRouter()request_router.post(/body/)asyncdefget_request_body(request:Request):# 获取请求体 body# body_data await request.body()# print(body_data)# return {body_data: body_data}# 获取请求体 body,推荐使用json方法body_dataawaitrequest.json()return{body_data:body_data}二、什么是Cookie2.1 什么是CookieCookie是服务器放在用户浏览器里的一小段文字。这段文字可以保存用户的身份标识、偏好设置等信息。下次用户在访问网站时浏览器会自动带上这段文字。服务器看到这段文字就能认出这个用户是谁。2.2 Cookie的原理是什么HTTP协议本身不保存状态。这意味着服务器记不住用户之前做过什么。但网站经常需要记住用户比如记住登录状态。Cookie解决了这个问题。它的工作流程如下2.2.1 第一步服务器创建Cookie用户第一次访问时服务器生成一个唯一的编号。这个编号就是SessionID。服务器把这个编码存到数据库里同时把它发给用户的浏览器。2.2.2 浏览器保存Cookie浏览器收到这个编号后把它存到本地。这就是Cookie。2.2.3 浏览器自动发送Cookie用户下次访问时浏览器会自动把这个编号发送给服务器。服务器检查这个编号就能知道用户是谁。注这种构架设计还存在一些问题服务器为每个用户创建独立的线程对象并分配不同的SessionID。这样不同用户的数据就不会混在一起。如果用户太多服务器内存可能不够用这时可以用Redis等工具来存Session数据。2.3 添加Cookie服务器通过Response对象把Cookie发给浏览器。可以设置Cookie的名字、值、有效期等。fromfastapiimportAPIRouter,Request,Response request_routerAPIRouter()request_router.post(/cookie/set)asyncdefset_cookie(response:Response):# 获取Cookie# Cookie是HeaderName(头名)# 如果请求头中没有该头信息Cookie则会返回Noneresponse.set_cookie(session_id,123456,max_age60)return{message:cookie set}2.4 获取Cookie浏览器再次访问时会自动带上之前保存的Cookie。服务器通过Request对象可以读取这些Cookie。fromfastapiimportAPIRouter,Request,Response request_routerAPIRouter()request_router.get(/cookie/get)asyncdefget_cookie(request:Request):# 获取Cookie# Cookie是HeaderName(头名)# 如果请求头中没有该头信息Cookie则会返回Nonesession_idrequest.cookies.get(session_id)return{message:cookie get,session_id:session_id}结语掌握Request与Cookie你就掌握了Web开发的两大基石。前者让你读懂用户的每一次请求后者让你记住用户的每一次到访。把这些知识串起来你就能构建出真正可用的Web服务。继续实践继续探索下一篇文章我们再见。

更多文章