python比flask更好的框架_Python框架快速API:一个比Flask和Tornada性能更高的API框架

0

前言

前几天给大家分别分享了(入门篇)简析蟒蛇网框架FastAPI——一个比瓶和托纳达更高性能的空气污染指数框架和(进阶篇)巨蟒网框架FastAPI——一个比瓶和托纳达更高性能的空气污染指数框架。今天欢迎大家来到FastAPI系列分享的完结篇,本文主要是对于前面文章的补充和扩展。

当然这些功能在实际开发中也扮演者极其重要的角色。

1

中间件的使用

瓶有钩子函数,可以对某些方法进行装饰,在某些全局或者非全局的情况下,增添特定的功能。

同样在FastAPI中也存在着像钩子函数的东西,也就是中间件中间件了。

计算回调时间

-- coding: UTF-8 --

导入时间

从fastapi导入FastAPI

来自starlette.requests导入请求

app=FastAPI()

@ app。中间( ' http ')

异步定义add _ process _ time _ header(请求:请求,调用_next):

start_time=time.time()

响应=await call _ next(请求)

process _ time=时间。时间()-开始时间

[X-进程-时间']=字符串(进程_时间)

打印(response.headers)

回应

@app.get('/ ')

异步def main():

返回{ "消息: '你好,世界'}

ifname=='__main__':

进口玉米

运行(应用程序,主机='127.0.0.1 ',端口=8000)

请求重定向中间件

从fastapi导入FastAPI

从史泰莱特。中间件。https重定向导入http重定向中间件

app=FastAPI()

应用程序。add _ middleware(HttpsredirectMidware)

被重定向到 301

@app.get('/ ')

异步def main():

返回{ "消息: '你好,世界'}

授权允许宿主访问列表(支持通配符匹配)

从fastapi导入FastAPI

从史泰莱特。中间件。可信主机导入可信主机中间件

app=FastAPI()

可信主机中间件,允许的主机数=['示例。com ','*。示例。com']

)

@app.get('/ ')

异步def main():

返回{ "消息: '你好,世界'}

跨域资源共享

从fastapi导入FastAPI

从史泰莱特。中间件。克-奥二氏分级量表导入克-奥二氏分级量表中间件

app=FastAPI()

允许跨域请求的域名列表(不一致的端口也会被视为不同的域名)

起源=[

'https://gzky.live ',

'https://google.com ',

'http://localhost:5000 ',

'http://localhost:8000 ',

]

通配符匹配,允许域名和方法

app.add_middleware(

中间件,

allow_origins=origins,

允许凭证=真,

allow_methods=['*'],

allow_headers=['*'],

)

在前端ajax请求,出现了外部链接的时候就要考虑到跨域的问题,如果不设置允许跨域,浏览器就会自动报错,跨域资源的安全问题。

所以,中间件的应用场景还是比较广的,比如爬虫,有时候在做全站爬取时抓到的Url请求结果为301,302,之类的重定向状态码,那就有可能是网站管理员设置了该域名(二级域名)不在宿主访问列表中而做出的重定向处理,当然如果你也是网站的管理员,也能根据中间件做些反爬的措施。

更多中间件参考https://fastapi.tiangolo.com/advanced/middleware

2

背景任务

创建异步任务函数,使用异步或者普通def函数来对后端函数进行调用。

发送消息

-- coding: UTF-8 --

从快速api导入后台任务,依赖项,快速空气污染指数

app=FastAPI()

def write_log(消息:字符串):

open('log.txt ',mode='a ')作为log:

log.write(消息)

def get _ query(后台任务3360后台任务,q:字符串=无):

if q:

message=f ' found query: { q } n '

后台任务.添加任务(写日志,消息)

返回q

@ app。发布( '/发送通知/{ email } ')

异步def发送通知(

email:字符串,background _ tasks 3360 background tasks,q:字符串=依赖项(get_query)

):

message=f ' message to { email } n '

后台任务.添加任务(写日志,消息)

返回{ "消息: '消息已发送'}

使用方法极其的简单,也就不多废话了,write_log当成工作方法被调用,先方法名,后传参。

3

自定义反应状态码

在一些特殊场景我们需要自己定义返回的状态码

从fastapi导入FastAPI

从starlette导入状态

app=FastAPI()

201

@app.get('/201/ ',status_code=status。HTTP _ 201 _创建)

async def item201():

返回{ ' httpStatus ' : 201 }

302

@app.get('/302/ ',status_code=status。发现)

异步def项302():

返回{ ' httpStatus ' : 302 }

404

@app.get('/404/ ',status_code=status。未找到)

异步def项404():

返回{ ' httpStatus ' : 404 }

500

@app.get('/500/ ',status_code=status。HTTP_500_INTERNAL_SERVER_ERROR)

异步def项500():

返回{ ' httpStatus ' : 500 }

ifname=='__main__':

进口玉米

运行(应用程序,主机='127.0.0.1 ',端口=8000)

所以有趣的是,假设有人写了这样一个代码

async def getHtml(自我、url、会话):

try:

async with session.get(url,标头=自身标头,超时=60,验证_ ssl=假)分别为:

如果在[的地位200,201]:

data=await resp.text()

返回数据

e:除外

打印(e)

及格

有趣的是,这个获取Html源代码的函数根据Http状态代码判断它是否正常返回。如果我按照上面写的直接返回一个404或304状态码,但是响应数据是正常的,那么这个爬行者不会爬不动任何东西吗?所以,嘿嘿你知道!

4

关于部署

部署FastAPI应用程序相对容易

紫玉米

FastAPI文档建议使用Uvicorn来部署应用程序(接下来是hypercorn),这是一个基于asyncio开发的轻量级、高效的网络服务器框架(仅支持Python 3 . 5 . 3和更高版本)

装置

pip安装uvicorn

启动模式

uv ICOM main : app-reload-host 0 . 0 . 0 . 0-port 8000

Gunicorn

如果您仍然喜欢使用Gunicorn部署项目,请参见下文。

装置

pip安装gunicorn

启动模式

gunicorn -w 4 -b 0.0.0.0:5000管理:app -D

码头工人部署

使用docker部署应用程序的优势在于,您不需要设置特定的操作环境(事实上,Docker正在帮助您拉它)。您可以通过Dockerfile构建FastAPI映像,启动Docker容器,并通过端口映射轻松访问部署的应用程序。

引擎引擎

在Uvicorm/Gunicorn FASTAPI的基础上挂一层Nginx服务,网站就可以上线了。事实上,直接使用UVIC ORM或GUNICORN没有问题,但是Nginx可以让你的网站看起来更像一个网站。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值