Python Falcon App类

Python Falcon App类

这个类是进入基于Falcon的WSGI应用的主要入口。该类的一个实例提供了一个可调用的WSGI接口和一个路由引擎。

import falcon
app = falcon.App()

这个类的 __init__() 构造函数需要以下的关键字参数 –

  • media_type – 在初始化RequestOptions和ResponseOptions时要使用的媒体类型。Falcon允许简单和可定制的互联网媒体类型处理。默认情况下,Falcon只启用JSON和HTML(URL-encoded和multipart)形式的处理程序。 Falcon支持的其他媒体类型由以下常量表示
    • 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 类。

为了使App对象可被调用,其类有一个 __call__() 方法。

__call__(self, env, start_response)

这是一个WSGI应用方法。WSGI开发服务器或其他生产服务器(Waitress/Uvicorn)使用这个对象来启动服务器实例并监听来自客户端的请求。

App类还定义了add_route()方法。

add_route(self, uri_template, resource)

该方法有助于将URI路径与资源类的对象联系起来。传入的请求根据一组URI模板被路由到资源。如果路径与给定路由的模板相匹配,请求就会被传递给相关的资源进行处理。根据请求方法的不同,会调用相应的响应者方法。

例子

让我们给 HelloResource 类添加 on_post() 响应器方法,并测试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"""}" http://localhost: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应用程序中,资源类的响应者必须是 coroutines (用 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'
      )

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程