flask框架的post命令处理库
command-handler的Python项目详细描述
命令处理程序
命令处理程序是flask框架的库 它提供:
- 用于发布新命令的api方法,
- 易于管理命令处理程序的工具。
安装
pip install command_handler
用法
使用命令处理程序
导入命令处理程序
对象,并在传递烧瓶
应用程序时调用它。
fromcommand_handlerimportCommandHandlerfromflaskimportFlaskapp=Flask(__name__)ch=CommandHandler(app)
这将为您的api添加一个新的端点: 可以通过返回对象的 commandhandler的设计方式允许将配置参数传递给初始值设定项。 可以在default 以下代码将url设置为 还可以通过定义 以下代码将url设置为 可以定义命令请求验证器。
可以通过设置接受字符串列表的 可能的验证器列表可以在验证器部分找到
要注册自定义验证器,请将其传递到 如果请求无效,则需要引发 默认情况下,到命令输入端点的路由是 命令输入端点仅接受 还需要发送与正则表达式匹配的 附加的验证器可以定义为在验证器部分中指定的验证器。
可以通过调用 以下参数由 可调用对象,它是ca当匹配命令已发布时填充。 与命令名匹配的字符串。 命令匹配在"命令匹配"部分中进行了说明。
json模式用于验证命令有效负载的对象。 它只获取命令的有效负载作为参数,并返回作为有效负载传递给处理程序的对象。 处理程序处理完成时调用的可调用对象。 它必须接受与处理程序相同的参数。
如果 如果内部处理程序返回任何值,则将其作为 不可能更改命令输入端点的响应
除了提出一个例外。 当引发
命令输入端点返回带有http代码的响应
在创建过程中指定(默认为 最好将 下面的代码片段将用 当引发任何其他异常时,命令输入端点
返回带有http code 发送到命令输入端点的每个命令名
必须是由点分隔的单词列表。 传递给方法的命令名也必须是
以同样的形式。对于分配给处理程序的命令名,有两个特殊的词: 命令处理程序调用程序将调用与处理程序的命令名匹配的处理程序
传递给方法。如果没有匹配
处理程序将用 如果有多个匹配项,则首先添加的处理程序将被调用。
但是,处理程序的注册表不允许添加分配给已覆盖名称的处理程序。
这意味着添加处理程序的顺序很重要。 例如,下面的代码片段可以正常工作,但是以相反的顺序添加这些处理程序将导致
提出一个例外。 命令处理程序包含以下预定义的请求验证程序: 验证是否: 验证是否: 验证请求的远程IP地址的验证器
是私有的/command
,该端点在命令输入部分中指定。
addhandler
方法添加处理程序,如定义处理程序节中所述配置
命令输入端点url
/command
route前面加上flask路由接受的任何字符串
通过定义ruleprefix
参数。/foo/bar/command
:ch=CommandHandler(app,rulePrefix="/foo/bar")
rulesuffix
,更改默认的/command
路由后缀。
/baz
:ch=CommandHandler(app,ruleSuffix="baz")
请求验证程序
commandhandler
默认设置command
和json
验证器,无法删除它们。验证器
参数来定义验证器。
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
方法接受:处理程序
处理程序
函数必须接受两个参数:
:命令
模式
变压器=无
transformer
参数可用于在将命令传递给处理程序之前转换命令的负载。后处理器=无
transformer
被传递到addhandler
调用,则它具有附加的命名参数origpayload
它包含传递给调用程序的原始有效负载。innerResult
命名参数传递。引发异常
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
500的响应:内部服务器错误
命令匹配
*
只能替换一个单词,可以替换零个或多个单词。
500:内部服务器错误
pip install command_handler
1
验证器
命令
有效载荷
和命令
字段,命令
字段值是字符串,有效载荷
字段值是字典,命令
字段的值与定义的ha匹配NDLLS,payload
字段的值与分配给处理程序的架构匹配,json
内容类型的头,其值与
^application/*json$
regex匹配,私人领地