首页 > 其他分享 >sanic生命周期

sanic生命周期

时间:2022-09-23 12:56:16浏览次数:48  
标签:生命周期 请求 响应 中间件 request Access headers sanic

首先在Sanic的生命周期,流程大致如下:
http请求——Sanic解析request——匹配路由——请求中间件——视图函数——响应中间件——http响应

Sanic在匹配路由中会检测是否存在对应的请求方法,如果没有直接响应405,根本不走后面的中间件了,这意味着你不能使用中间件来实现所有路由表上的预检请求,那么在注册路由的时候,就一定要显式申明OPTIONS或在CBV中实现options方法,之后我们才可以通过中间件来实现功能

@app.middleware("request")
def cors_middle_req(request: Request):
"""路由需要启用OPTIONS方法"""
if request.method.lower() == 'options':
allow_headers = [
'Authorization',
'content-type'
]
headers = {
'Access-Control-Allow-Methods':
', '.join(request.app.router.get_supported_methods(request.path)),
'Access-Control-Max-Age': '86400',
'Access-Control-Allow-Headers': ', '.join(allow_headers),
}
return HTTPResponse('', headers=headers)

@app.middleware("response")
def cors_middle_res(request: Request, response: HTTPResponse):
"""跨域处理"""
allow_origin = '*'
response.headers.update(
{
'Access-Control-Allow-Origin': allow_origin,
}
)
前一个请求中间件cors_middle_req用于拦截所有OPTIONS方法,它在设置三个跨域请求头后直接返回HTTPResponse对象,在这个中间件中,告知了浏览器允许的请求方式和请求头,并设置了一个24小时的缓存(86400/3600)时间
后一个响应中间件cors_middle_res用于处理所有响应请求,在响应头中加入Access-Control-Allow-Origin来允许跨域,allow_origin可以改成指定域名
在整个过程中我们使用到了6个规范响应头中最常用的4个,剩下两个响应头大家可以自行去了解用途和适用场景

标签:生命周期,请求,响应,中间件,request,Access,headers,sanic
From: https://www.cnblogs.com/l-uz/p/16722328.html

相关文章

  • sanic框架了解
    最近在工作中需要用到sanic框架Sanic是什么?话不多说先给一个官方的解释SanicisaPython3.6+webserverandwebframeworkthat’swrittentogofast.Itallows......
  • Vue 的父组件和子组件生命周期钩子函数执行顺序?
    Vue的父组件和子组件生命周期钩子函数执行顺序可以归类为以下4部分:加载渲染过程父beforeCreate->父created->父beforeMount->子beforeCreate->子crea......
  • vue的生命周期
    四个阶段创建阶段---挂载阶段---更新阶段---销毁阶段八个生命周期函数(钩子函数)创建阶段有两个钩子函数,beforeCreate在数据代理和数据监听之前执行,created在数据代理......
  • Uni-app页面生命周期
    uni-app 支持如下页面生命周期函数:文档:https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle函数名说明平台差异说明最低版本onInit监听页面初始化,其参数......
  • Uni-app应用生命周期
    uni-app 支持如下应用生命周期函数:函数名说明onLaunch当uni-app 初始化完成时触发(全局只触发一次)onShow当 uni-app 启动,或从后台进入前台显示onHide当......
  • 域名生命周期有几个阶段?
    域名生命周期不同阶段域名生命周期是指域名从开始到域名结束的阶段。一般来说,一个域名的生命周期有五阶段,分别是:可注册期、已注册期、注册商保留期、赎回宽限期、待删除期......
  • maven的三个标准生命周期
    Maven的生命周期maven有以下三个标准的生命周期:1、clean:项目清除的处理2、default:项目部署3、site:项目站点文档创建处理clean生命周期pre-clean......
  • Vue3:生命周期
    Vue3.x的生命周期在Vue3.x中,新增了一个setup生命周期函数,setup执行的时机是在beforeCreate生命函数之前执行,因为在这个函数中不能通过this来获取实例的;同时为了命名的统一......
  • POD的生命周期
    POD的生命周期#删除所有的pod[root@k8s-m01~]#kubectldeletepod--all##initcontainer初始化容器是指,在主容器启动之前,我们可以让他做一些准备工作。比如:1.......
  • Netty 学习(四):ChannelHandler 的事件传播和生命周期
    Netty学习(四):ChannelHandler的事件传播和生命周期作者:Grey原文地址:博客园:Netty学习(四):ChannelHandler的事件传播和生命周期CSDN:Netty学习(四):ChannelHandler的事件......