- Python Falcon 教程
- Python Falcon - 首頁
- Python Falcon - 簡介
- Python Falcon - 環境搭建
- Python Falcon - WSGI vs ASGI
- Python Falcon - Hello World(WSGI)
- Python Falcon - Waitress
- Python Falcon - ASGI
- Python Falcon - Uvicorn
- Python Falcon - API 測試工具
- 請求 & 響應
- Python Falcon - 資源類
- Python Falcon - 應用類
- Python Falcon - 路由
- Falcon - 字尾響應器
- Python Falcon - Inspect 模組
- Python Falcon - Jinja2 模板
- Python Falcon - Cookies
- Python Falcon - 狀態碼
- Python Falcon - 錯誤處理
- Python Falcon - Hooks
- Python Falcon - 中介軟體
- Python Falcon - CORS
- Python Falcon - WebSocket
- Python Falcon - SQLAlchemy 模型
- Python Falcon - 測試
- Python Falcon - 部署
- Python Falcon 有用資源
- Python Falcon - 快速指南
- Python Falcon - 有用資源
- Python Falcon - 討論
Python Falcon - 應用類
此類是基於 Falcon 的 WSGI 應用的主要入口點。此類的例項提供了可呼叫的 WSGI 介面和路由引擎。
import falcon app = falcon.App()
此類的 __init__() 建構函式接受以下關鍵字引數 -
media_type - 初始化 RequestOptions 和 ResponseOptions 時使用的媒體型別。Falcon 允許輕鬆自定義網際網路媒體型別處理。預設情況下,Falcon 僅啟用 JSON 和 HTML(URL 編碼和多部分)表單的處理程式。
falcon.MEDIA_JSON
falcon.MEDIA_MSGPACK
falcon.MEDIA_MULTIPART
falcon.MEDIA_URLENCODED
falcon.MEDIA_YAML
falcon.MEDIA_XML
falcon.MEDIA_HTML
falcon.MEDIA_JS
falcon.MEDIA_TEXT
falcon.MEDIA_JPEG
falcon.MEDIA_PNG
falcon.MEDIA_GIF
request_type - 此引數的預設值為 falcon.Request 類。
response_type - 此引數的預設值為 falcon.Response 類。
Falcon 支援的其他媒體型別由以下常量表示 -
為了使 App 物件可呼叫,其類具有 __call__() 方法。
__call__(self, env, start_response)
這是一個 WSGI 應用方法。WSGI 開發伺服器或其他生產伺服器(Waitress/Uvicorn)使用此物件啟動伺服器例項並偵聽來自客戶端的請求。
App 類還定義了 add_route() 方法。
add_route(self, uri_template, resource)
此方法有助於將 URI 路徑與資源類的物件關聯。傳入請求根據一組 URI 模板路由到資源。如果路徑與給定路由的模板匹配,則請求將傳遞給關聯的資源以進行處理。根據請求方法,將呼叫相應的響應器方法。
示例
讓我們將 on_post() 響應器方法新增到 HelloResource 類並測試 GET 和 POST 請求的端點。
from waitress import serve
import falcon
import json
class HelloResource:
def on_get(self, req, resp):
resp.status = falcon.HTTP_200
resp.content_type = falcon.MEDIA_TEXT
resp.text = (
'Hello World'
)
def on_post(self, req, resp):
data=req.media
nm=data['name']
resp.status = falcon.HTTP_200
resp.content_type = falcon.MEDIA_TEXT
resp.text = (
'Hello '+nm
)
app = falcon.App()
hello = HelloResource()
app.add_route('/hello', hello)
if __name__ == '__main__':
serve(app, host='0.0.0.0', port=8000)
輸出
使用 Waitress 伺服器執行應用程式,並使用 Curl 檢查響應。對於 GET 請求的響應,使用以下命令 -
C:\Users\User>curl localhost:8000/hello Hello World
我們透過 POST 方法向 /hello URL 傳送一些資料,如下所示 -
C:\Users\User>curl -i -H "Content-Type:application/json" -X
POST -d "{"""name""":"""John"""}" https://:8000/hello
HTTP/1.1 200 OK
Content-Length: 10
Content-Type: text/plain; charset=utf-8
Date: Sun, 17 Apr 2022 07:06:20 GMT
Server: waitress
Hello John
要將路由新增到靜態檔案的目錄,Falcon 具有 add_static_route() 方法。
add_static_route(self, prefix, directory, downloadable=False, fallback_filename=None)
prefix 引數是要與此路由匹配的路徑字首。directory 引數是要從中提供檔案的源目錄。如果要包含 ContentDisposition 標頭在響應中,則 downloadable 引數設定為 True。fallback_filename 預設情況下為 None,但可以在找不到請求的檔案時指定。
add_error_handler() 方法用於為一個或多個異常型別註冊處理程式。
add_error_handler(self, exception, handler=None)
ASGI 可呼叫 App 類擁有相同的方法。它在 falcon.asgi 模組中定義。
import falcon.asgi app=falcon.asgi.App()
請注意,ASGI 應用程式中資源類的響應器必須是 協程(用 async 關鍵字定義),而不是普通方法。
class HelloResource:
async def on_get(self, req, resp):
"""Handles GET requests"""
resp.status = falcon.HTTP_200
resp.content_type = falcon.MEDIA_TEXT
resp.text = (
'Hello World'
)