【Quart 框架——来源于Flask的强大且灵活的异步Web框架】

目录

  • 前言
  • 一、Quart简介
    • 1-1、简介
    • 1-2、与flask的区别
  • 二、快速开始
    • 2-1、安装
    • 2-2、基本用法
  • 三、核心功能
    • 3-1、异步路由
    • 3-2、WebSockets 支持
    • 3-3、中间件
    • 3-4、蓝图 (Blueprints)
  • 四、部署
    • 4-1、使用uvicorn部署
    • 4-2、使用hypercorn部署
  • 五、案例分析
  • 总结


前言

Quart 是一个基于 Python 的异步 Web 框架,灵感来自 Flask。它结合了 Flask 的易用性和成熟度,并添加了对 Python 异步特性的支持。

一、Quart简介

1-1、简介

Quart 是一个基于 Python 的异步 Web 框架,灵感来自 Flask。它结合了 Flask 的易用性和成熟度,并添加了对 Python 异步特性的支持。使用Quart你可以

  • 渲染和提供HTML模板
  • 构建Json API
  • 服务WebScoket
  • 流式请求、响应。

在这里插入图片描述

Quart 旨在提供一个类似于 Flask 的简单且灵活的 Web 框架,同时支持 Python 的异步功能(async 和 await)。这使得 Quart 能够处理高并发和异步 I/O 操作,适用于需要处理大量并发连接的应用程序,如实时 Web 应用和微服务。

1-2、与flask的区别

  • 异步支持:Quart 的最大特点是对异步操作的支持,而 Flask 主要是同步的。
  • WebSockets:Quart 内置对 WebSockets 的支持,而 Flask 需要使用 Flask-SocketIO 扩展。
  • 路由定义:Quart 的路由定义和 Flask 基本一致,但 Quart 的路由处理函数可以是异步的。

二、快速开始

2-1、安装

安装: python的版本必须大于3.8。

pip install quart
pip install python

2-2、基本用法

from quart import Quart, render_template, websocket

app = Quart(__name__)

@app.route("/")
async def hello():
    return await render_template("index.html")

@app.route("/api")
async def json():
    return {"hello": "world"}

@app.websocket("/ws")
async def ws():
    while True:
        await websocket.send("hello")
        await websocket.send_json({"hello": "world"})

if __name__ == "__main__":
    app.run()

三、核心功能

3-1、异步路由

Quart 允许你定义异步路由处理函数,使得处理异步 I/O 操作更加高效。

@app.route('/async')
async def async_route():
    # 异步操作
    await asyncio.sleep(1)
    return 'This is an async route'

3-2、WebSockets 支持

Quart 内置对 WebSockets 的支持,可以轻松处理实时通信。

from quart import websocket

@app.route('/ws')
async def ws():
    while True:
        message = await websocket.receive()
        await websocket.send(f'You said: {message}')

3-3、中间件

Quart 支持中间件,可以在请求处理之前或之后执行一些操作。

@app.before_request
async def before_request():
    print("This runs before each request")

@app.after_request
async def after_request(response):
    print("This runs after each request")
    return response

3-4、蓝图 (Blueprints)

Quart 支持蓝图,用于模块化应用程序的路由和视图。

from quart import Blueprint

bp = Blueprint('example', __name__)

@bp.route('/example')
async def example():
    return 'This is an example route'

app.register_blueprint(bp, url_prefix='/bp')

四、部署

4-1、使用uvicorn部署

安装:

pip install uvicorn

运行: 在项目根目录下运行以下命令,这里 app:app 表示在 app.py 文件中有一个名为 app 的 Quart 应用实例。

uvicorn app:app

4-2、使用hypercorn部署

安装:

pip install hypercorn

部署: 指定端口和启用自动重载

hypercorn app:app --bind 0.0.0.0:8000 --reload

五、案例分析

概述:这段代码创建了一个基于 Quart 框架的异步 Web 应用程序,暴露了一个 POST 接口 /aiops。该接口接收 JSON 请求,提取其中的 prompt 字段,并调用 run_query 函数处理这个 prompt。主要功能如下:

  • logger.add(‘app.log’) 记录日志到app.log
  • 禁用 Quart 和 werkzeug 的默认日志,以避免日志冗余。
  • 定义名为aiops的post路由并且构建异步处理函数
  • 异步获取请求中的json数据
from quart import Quart, request, jsonify
from querySLSLog import run_query
from loguru import logger
import logging
from querySLSLog import run_query

app = Quart(__name__)

logger.add('app.log')
app.logger.disabled = True
werkzeug_logger = logging.getLogger('werkzeug')
werkzeug_logger.disabled = True


@app.route('/aiops', methods=['POST'])
async def run_code():

    data = await request.json
    prompt = data.get('prompt')
    if not prompt:
        logger.error(f"提取prompt失败: {request.data.decode('utf-8')}")
        return jsonify({'error': 'No prompt provided'}), 400
    
    logger.info(f"prompt: {prompt}")

    try:
        result = await run_query(prompt)
        logger.info(f"result: {result}")
        result = result.content
        return jsonify(result)
    except Exception as e:
        error = f"调用run_query方法失败: {e}"
        logger.error(error)
        return jsonify(error)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=6789)

参考文章:

Quart

总结

Quart 是一个强大且灵活的异步 Web 框架,适用于需要高并发和异步 I/O 操作的应用程序。它结合了 Flask 的简单性和 Python 异步特性的优势,是开发现代 Web 应用和微服务的一个有力工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/796990.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

taocms 3.0.1 本地文件泄露漏洞(CVE-2021-44983)

前言 CVE-2021-44983 是一个影响 taoCMS 3.0.1 的远程代码执行(RCE)漏洞。该漏洞允许攻击者通过上传恶意文件并在服务器上执行任意代码来利用这一安全缺陷。 漏洞描述 taoCMS 是一个内容管理系统(CMS),用于创建和管…

用Qwt进行图表和数据可视化开发

目录 Qwt介绍 示例应用场景 典型QWT开发流程 举一些Qwt的例子,多绘制几种类型的图像 1. 绘制折线图 (Line Plot) 2. 绘制散点图 (Scatter Plot) 3. 绘制柱状图 (Bar Plot) 4. 绘制直方图 (Histogram) Qwt介绍 QWT开发主要涉及使用QWT库进行图表和数据可视化…

在若依框架基础上开发新功能

本文介绍如何在若依框架(不分离版本)的基础上开发新功能。 目录 运行若依框架 下载若依框架代码 IDEA打开若依框架代码 初始化数据库 修改数据库配置 运行项目 设计数据库 数据表命名规则 建表及初始化数据 开发新功能 后端CRUD功能 用户前端…

从零开始做题:神奇的棋盘

题目 打开得到一副adfgvx加密棋盘 观察txt数据只有1-5,猜测是数字字母坐标转换,用notepad批量操作一下 解题 AGAXXDAGGVGGVDVADAVXDGADVGDVAADDDDFXAFAFDGDVXXDGGDGGDXDDFDDXVGXADGVDFXVVAADDXDXXADDVGGGXGXXXXGXXGGXGDVVVGGGAGAAAAGAAGGAGDDDAGAGGG…

JS实现:统计字符出现频率/计算文字在文本中的出现次数

要实现这个功能,JavaScript 一个非常强大的方法,那就是reduce() reduce() 它用于将数组的所有元素减少到一个单一的值。这个值可以是任何类型,包括但不限于数字、字符串、对象或数组。 reduce() 方法接收一个回调函数作为参数,这个…

Java单边表的局部翻转

反转链表 II 这是上一个翻转全部链表的进阶版&#xff0c;大家可以先去看我的上一篇博客 Java算法之单链表的全部翻转-CSDN博客 题目描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节…

Spring Cloud Eureka

引入&#xff1a;远程调用时&#xff0c;url是写死的 String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 解决思路&#xff1a; 比如&#xff08;医院&#xff0c;学校等&#xff09;机构的电话号码发生变化&#xff0c;就需要通知各个使⽤…

mybatilsplaus 常用注解

官网地址 baomidou注解配置

vue3项目,表单增删改

效果图 ArticleChannel.vue页面代码 <script setup> import {artGetChannelsService ,artDelChannelService} from /api/article.js import { Edit, Delete } from element-plus/icons-vue //调用open方法&#xff0c;ChannelEdit去修改组件内部类容 import ChannelEdit…

【Linux】1w详解如何实现一个简单的shell

目录 实现思路 1. 交互 获取命令行 2. 子串分割 解析命令行 3. 指令的判断 内建命令 4. 普通命令的执行 补充&#xff1a;vim 文本替换 整体代码 重点思考 1.getenv和putenv是什么意思 2.代码extern char **environ; 3.内建命令是什么 4.lastcode WEXITSTATUS(sta…

linux nethogs网络监控程序(端口监控、流量监控、上传流量、下载流量、进程监控进程网络)

文章目录 Nethogs 网络监控程序详解1. 引言2. Nethogs 的安装与运行2.1 安装 Nethogs- **Debian/Ubuntu**- **Fedora**- **Arch Linux** 2.2 运行 Nethogs 3. Nethogs 的使用详解3.1 基本界面- **PID**&#xff1a;进程的 ID。- **用户**&#xff1a;运行该进程的用户。- **程序…

graphviz subgraph添加边界框

subgraph name 属性必须要以cluster开头。 A Quick Introduction to GraphvizAn awesome tool for software documentation and visualizing graphshttps://www.worthe-it.co.za/blog/2017-09-19-quick-introduction-to-graphviz.html digraph {rankdir"LR"// the n…

DEBUG:jeston卡 远程ssh编程

问题 jeston 打开网页 gpt都不方便 而且只需要敲命令就行 解决 下载MobaXterm(window执行) liunx需要虚拟机 软件 远程快速复制命令

7.13 专题训练DP

P1255 数楼梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ac代码 #include<bits/stdc.h> using namespace std; typedef long long ll; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) const ll mod 1e97;int main() {IOS;int n;cin>>n;int a[…

Unity Text Mesh Pro 中英文混编自动换行问题

问题描述 使用TextMeshPro 输入中英文时&#xff0c;在一行内 输入中英文&#xff0c;当英文部分超过第一行剩余位置时&#xff0c;整个英文部分都会自动换行 问题截图&#xff1a; 期待截图&#xff1a; 问题说明 因为 TextMeshPro识别中文后会带换行符。 解决方案 修改…

MICCAI 2024 每日一篇论文 纯纯直读 CUTS:用于多粒度无监督医学图像分割的深度学习和拓扑框架

MICCAI 2024 CUTS: A Deep Learning and Topological Framework for Multigranular Unsupervised Medical Image Segmentation CUTS: 用于多粒度无监督医学图像分割的深度学习和拓扑框架 作者 陈璐1*、Matthew Amodio1*、梁博伦.沈2、冯高3、阿曼阿维斯塔4、Sanjay Aneja3,5…

最火视频素材去哪里找?热门的视频素材网站库分享给你

寻找独特视频素材&#xff1f;这些网站助你成为创作之星&#xff01; 朋友们&#xff01;你是否还在为寻找那些能让你的视频内容焕发光彩的素材而四处奔波&#xff1f;内容为王&#xff0c;但没有独特而吸引人的素材&#xff0c;再好的内容也难以吸引观众的目光。别担心&#…

3分钟搞定Kali Linux安装,超详细教程(附安装包)

**今天写一写Kali渗透中的第一个知识点&#xff1a;Kali安装配置。 俗话说得好&#xff1a;kali学得好&#xff0c;牢饭吃到饱&#xff01;** 相信很多同学在刚接触网络安全的时候&#xff0c;都听过kali linux的大名&#xff0c;那到底什么是kali&#xff0c;初学者用kali能做…

操作系统智能助手OS Copilot评测报告

背景 如果不是朋友告知&#xff0c;我还不知道阿里云推出了【操作系统智能助手OS Copilot】这样一款产品。 我做系统运维的工作还是挺多的&#xff0c;知道系统运维工作的一些痛点&#xff1b;例如&#xff1a; Linux命令繁杂&#xff0c;想全部记住不太可能&#xff0c;多数…