欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用Quart作為web服務(wù)器的代碼實現(xiàn)

 更新時間:2024年06月07日 09:36:11   作者:頑石九變  
Quart 是一個異步的 Web 框架,它使用 ASGI 接口(Asynchronous Server Gateway Interface)而不是傳統(tǒng)的 WSGI,這使得 Quart 特別適合用于構(gòu)建需要處理大量并發(fā)連接的高性能 Web 應(yīng)用程序,本文給大家介紹了Python使用Quart作為web服務(wù)器的代碼實現(xiàn)

一、Quart 輕量級web框架介紹

Quart 是一個異步的 Web 框架,它使用 ASGI 接口(Asynchronous Server Gateway Interface)而不是傳統(tǒng)的 WSGI(Web Server Gateway Interface)。這使得 Quart 特別適合用于構(gòu)建需要處理大量并發(fā)連接的高性能 Web 應(yīng)用程序。與 Flask 類似,Quart 也非常靈活,可以輕松地構(gòu)建 RESTful API、WebSockets、HTTP/2 服務(wù)器推送等。

1、異步支持

由于 Quart 是基于異步 IO 設(shè)計的,因此你可以在處理請求時使用 async 和 await 關(guān)鍵字來執(zhí)行異步操作,例如訪問數(shù)據(jù)庫或調(diào)用其他異步服務(wù)。這使得 Quart 非常適合用于構(gòu)建需要高并發(fā)處理的應(yīng)用程序。

2、WebSocket支持

Quart提供了對WebSocket協(xié)議的原生支持,使得實時通信和推送功能更加簡單可行。這對于需要實時交互的應(yīng)用,如聊天室、在線游戲等,具有極大的便利性。

3、與 Flask 的比較

Quart框架與廣受歡迎的Flask框架具有API兼容性,這意味著開發(fā)者可以輕松地將現(xiàn)有的Flask應(yīng)用遷移到Quart上,并享受異步編程帶來的好處。這一特性降低了學(xué)習(xí)成本,并使得開發(fā)者能夠更快速地適應(yīng)Quart。

它們之間有一些關(guān)鍵的區(qū)別:

  1. 異步支持:Quart 是基于異步 IO 設(shè)計的,而 Flask 是基于同步 IO。這使得 Quart 在處理大量并發(fā)連接時性能更好。
  2. ASGI 與 WSGI:Quart 使用 ASGI 接口,而 Flask 使用 WSGI 接口。ASGI 提供了對 HTTP/2、WebSockets 和其他協(xié)議的原生支持。
  3. 性能:由于 Quart 的異步特性,它在處理大量并發(fā)連接時通常比 Flask 更快。
  4. 生態(tài):Flask 有一個龐大的社區(qū)和豐富的擴(kuò)展庫,而 Quart 作為較新的框架,其生態(tài)還在不斷發(fā)展中。

二、使用示例

安裝 quart

示例1:返回json數(shù)據(jù)

import logging
from quart import Quart, render_template, request, jsonify

app = Quart(__name__)
app.logger.setLevel(logging.INFO)  # 設(shè)置 Quart 日志記錄器的級別為 INFO

# 返回 html 模板
@app.route('/')
async def index():
    app.logger.info('Quart index load success ')
    return 'Hello, Quart!'


# GET請求,返回json數(shù)據(jù)
@app.route('/get', methods=['GET'])
async def handle_get():
    data = {'name': 'Jacky', 'sex': 'Male'}
    return jsonify(data), 200  


# 定義一個處理POST請求的路由
@app.route('/post', methods=['POST'])
async def handle_post():
    data = await request.get_json()  # 異步獲取POST請求的JSON數(shù)據(jù)
    # 假設(shè)我們只是將接收到的數(shù)據(jù)返回給客戶端
    return jsonify(data), 201  # 返回狀態(tài)碼201表示成功創(chuàng)建了資源


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

示例2:返回html模板

以下是一個使用Quart和Jinja2模板引擎的簡單代碼示例:

首先,確保你已經(jīng)安裝了quartjinja2。你可以使用pip來安裝它們(如果尚未安裝):

pip install quart jinja2

然后,創(chuàng)建一個簡單的Quart應(yīng)用,該應(yīng)用使用Jinja2模板來渲染一個HTML頁面。

from quart import Quart, render_template, request

app = Quart(__name__)

@app.route('/')
async def index():
    # 渲染index.html模板,并傳遞一些變量給模板
    return await render_template('index.html', name='Quart User', framework='Quart')

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

在這個例子中,我們創(chuàng)建了一個Quart應(yīng)用,Quart默認(rèn)會加加載名為 templates 的文件夾中的模板。

接下來,我們定義了一個路由處理函數(shù)index,它使用render_template函數(shù)來渲染名為index.html的模板。我們還傳遞了兩個變量name和framework給模板,這些變量將在模板中被替換。

你需要在項目的根目錄下創(chuàng)建一個名為templates的文件夾,并在其中創(chuàng)建一個index.html文件,例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ framework }} Welcome</title>
</head>
<body>
    <h1>Welcome, {{ name }}!</h1>
    <p>You are using the {{ framework }} framework.</p>
</body>
</html>

在這個HTML模板中,{{ name }}和{{ framework }}是變量占位符,它們將被render_template函數(shù)調(diào)用時傳遞的實際變量值替換。

當(dāng)你運行上面的Quart應(yīng)用并訪問http://localhost:5000/時,你應(yīng)該會看到一個歡迎頁面,其中包含了通過Jinja2模板引擎動態(tài)插入的name和framework變量的值。

示例3:websocket使用

1)創(chuàng)建websocket服務(wù)

from quart import Quart, websocket, request

app = Quart(__name__)


@app.websocket('/ws')
async def ws():
    await websocket.accept()
    while True:
        data = await websocket.receive()
        print(f"Received from client: {data}")
        if data is None:  # 客戶端斷開連接
            break
            # 處理接收到的數(shù)據(jù),這里我們只是簡單地將數(shù)據(jù)回顯給客戶端
        await websocket.send(data)


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

2)使用Python websocket創(chuàng)建client端,發(fā)送和接收websocket消息

首先,確保你已經(jīng)安裝了websockets庫。如果沒有安裝,你可以通過pip來安裝它:

pip install websockets
import asyncio  
import websockets  
  
async def websocket_client():  
    uri = "ws://localhost:5000/ws"  
    async with websockets.connect(uri) as websocket:  
        # 發(fā)送一條消息到服務(wù)器  
        await websocket.send("Hello, Server!")  
          
        # 接收服務(wù)器的響應(yīng)  
        response = await websocket.recv()  
        print(f"Received from server: {response}")  
  
        # 可以繼續(xù)發(fā)送和接收更多的消息  
        # ...  
  
# 運行客戶端  
asyncio.run(websocket_client())

上面代碼,首先導(dǎo)入了asyncio和websockets庫。然后,定義了一個異步函數(shù)websocket_client,使用websockets.connect函數(shù)連接到WebSocket服務(wù)器。連接建立后,通過websocket.send方法發(fā)送一條消息給服務(wù)器,并通過websocket.recv方法等待并接收服務(wù)器的響應(yīng)。最后,使用asyncio.run函數(shù)來運行這個異步客戶端。

3)運行代碼,得到如下輸出

服務(wù)端

 * Serving Quart app 'quart_ws'
 * Debug mode: False
 * Please use an ASGI server (e.g. Hypercorn) directly in production
 * Running on http://0.0.0.0:5000 (CTRL + C to quit)
[2024-06-06 18:34:20 +0800] [41216] [INFO] Running on http://0.0.0.0:5000 (CTRL + C to quit)
[2024-06-06 18:34:25 +0800] [41216] [INFO] 127.0.0.1:52680 GET /ws 1.1 101 - 2000
Received from client: Hello, Server!

客戶端

Received from server: Hello, Server!

到此這篇關(guān)于Python使用Quart作為web服務(wù)器的代碼實現(xiàn)的文章就介紹到這了,更多相關(guān)Python Quart作web服務(wù)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論