flask框架的post命令处理库

command-handler的Python项目详细描述


命令处理程序

pypi version构建状态

命令处理程序是flask框架的库 它提供:

  • 用于发布新命令的api方法,
  • 易于管理命令处理程序的工具。

安装

pip install command_handler

用法

使用命令处理程序导入命令处理程序对象,并在传递烧瓶应用程序时调用它。

fromcommand_handlerimportCommandHandlerfromflaskimportFlaskapp=Flask(__name__)ch=CommandHandler(app)

这将为您的api添加一个新的端点:/command,该端点在命令输入部分中指定。

可以通过返回对象的addhandler方法添加处理程序,如定义处理程序节中所述

配置

commandhandler的设计方式允许将配置参数传递给初始值设定项。

命令输入端点url

可以在default/commandroute前面加上flask路由接受的任何字符串 通过定义ruleprefix参数。

以下代码将url设置为/foo/bar/command

ch=CommandHandler(app,rulePrefix="/foo/bar")

还可以通过定义rulesuffix,更改默认的/command路由后缀。

以下代码将url设置为/baz

ch=CommandHandler(app,ruleSuffix="baz")

请求验证程序

可以定义命令请求验证器。 commandhandler默认设置commandjson验证器,无法删除它们。

可以通过设置接受字符串列表的验证器参数来定义验证器。

ch=CommandHandler(app,validators=["command","json"])

可能的验证器列表可以在验证器部分找到

自定义验证器

要注册自定义验证器,请将其传递到command\u handler.request.validator.validatorfactory.addassert方法。 它必须接受一个位置参数,该参数包含传递给commandhandler定义的视图的请求。

如果请求无效,则需要引发command\u handler.request.validator.exceptions.assertionFailedException。 其构造函数的第一个参数将发送到响应的主体,第二个参数将作为响应代码发送。

fromcommand_handler.request.validator.ValidatorFactoryfromcommand_handler.request.validator.exceptionsimportAssertionFailedExceptiondeffooValidator(request):raiseAssertionFailedException("Something went wrong",418)ValidatorFactory.addAssert("foo",fooValidator)

命令输入

默认情况下,到命令输入端点的路由是/command。 它可以按照配置部分中的说明进行配置

命令输入端点仅接受post请求 内容匹配如下:json模式

{"type":"object","properties":{"command":{"type":"string","description":"Name of the sent command","examples":["foo","foo.bar","foo.bar.baz"]},"payload":{"type":"object","description":"Payload of the sent command",}},"required":["command","payload"]}

还需要发送与正则表达式匹配的^application/*json$头的内容类型。

附加的验证器可以定义为在验证器部分中指定的验证器。

定义处理程序

可以通过调用commandhandler实例的addhandler方法来定义命令处理程序。

ch=CommandHandler(app)ch.addHandler(lambdapayload,command:None,"foo.*",{})

以下参数由addhandler方法接受:

处理程序

可调用对象,它是ca当匹配命令已发布时填充。

处理程序函数必须接受两个参数:

  1. 命令的有效载荷,
  2. 命令名。
命令

与命令名匹配的字符串。

命令匹配在"命令匹配"部分中进行了说明。

模式

json模式用于验证命令有效负载的对象。

变压器=无

transformer参数可用于在将命令传递给处理程序之前转换命令的负载。

它只获取命令的有效负载作为参数,并返回作为有效负载传递给处理程序的对象。

后处理器=无

处理程序处理完成时调用的可调用对象。

它必须接受与处理程序相同的参数。 如果transformer被传递到addhandler调用,则它具有附加的命名参数origpayload 它包含传递给调用程序的原始有效负载。

如果内部处理程序返回任何值,则将其作为innerResult命名参数传递。

引发异常

不可能更改命令输入端点的响应 除了提出一个例外。

当引发 命令输入端点返回带有http代码的响应 在创建过程中指定(默认为400:错误请求) 与以下json模式匹配的消息::

{"type":"object","properties":{"type":"string","description":"Message passed to the `InvalidRequestException` during creation","default":""},"required":["error"]}

最好将4xx代码与invalidrequestexception

下面的代码片段将用418响应:我是一个茶壶 {"error":"我是茶壶处理程序"}发送foo.bar命令时:

pip install command_handler
0

当引发任何其他异常时,命令输入端点 返回带有http code500的响应:内部服务器错误

命令匹配

发送到命令输入端点的每个命令名 必须是由点分隔的单词列表。

传递给方法的命令名也必须是 以同样的形式。对于分配给处理程序的命令名,有两个特殊的词:

  • *只能替换一个单词,
  • 可以替换零个或多个单词。

命令处理程序调用程序将调用与处理程序的命令名匹配的处理程序 传递给方法。如果没有匹配 处理程序将用500:内部服务器错误

响应命令输入端点

如果有多个匹配项,则首先添加的处理程序将被调用。 但是,处理程序的注册表不允许添加分配给已覆盖名称的处理程序。 这意味着添加处理程序的顺序很重要。

例如,下面的代码片段可以正常工作,但是以相反的顺序添加这些处理程序将导致 提出一个例外。

pip install command_handler
1

验证器

命令处理程序包含以下预定义的请求验证程序:

命令

验证是否:

  • 请求包含有效载荷命令字段,
  • 命令字段值是字符串,
  • 有效载荷字段值是字典,
  • 命令字段的值与定义的ha匹配NDLLS,
  • payload字段的值与分配给处理程序的架构匹配,
json

验证是否:

  • 请求包含内容类型的头,其值与^application/*json$regex匹配,
  • 请求内容可以JSON解析。
私人领地

验证请求的远程IP地址的验证器 是私有的

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaI编写了一个通用的有序数组类,在比较元素时,insert方法出现空指针错误   StackPane中另一个窗格下方窗格上的java JavaFX鼠标事件   java isReady()在关闭状态下返回true为什么?   Java:带循环的数组(匹配项)   java ResponseEntity如何处理不同于200 ok的状态代码?   java while循环jtextfield只接受字母   java为什么gluProject不使用LWJGL提供正确的屏幕空间坐标   java在AspectJ中禁用/避免执行通知   JAVAlang.SecurityException:权限拒绝:启动意图{act=安卓.settings.USAGE_ACCESS_settings}   java可流动多实例调用活动输出参数   java您能自动将Eclipse的调试器附加到子流程吗?   在Java中分叉进程有效地重定向输入/输出/错误流   itext使用现有证书、中间文件和远程创建的签名,使用itextpdf for Java对PDF进行两步签名   爪哇苹果。应用程序(使用Ant的JarBundler构建)将无法运行