我有一个简单的端点用于发布请求。
一旦用户创建如下所示的发布请求,我想执行一个python脚本(例如test.py)。
[
{
"sign": "53535",
},
{
"sign": "42122",
}
]
发布请求后,自行执行脚本的最佳方法是什么?然后,当新的发布请求进入,如下所示的12323时,我想再次自行运行python脚本。
response = requests.get('url')
[
{
"sign": "53535",
},
{
"sign": "42122",
},
{
"sign": "12323",
},
]
答案 0 :(得分:0)
可能是骇客的解决方案:
定义一些自定义Middleware,它将使用stdlib中的子进程来触发脚本。
使用decorator_from_middleware创建一个装饰器以允许分配给各个端点
将装饰器分配给接收更新的API端点。
每次点击端点时,中间件都会运行,并触发子流程,该子流程将调用您的.py文件。
答案 1 :(得分:0)
您可以尝试通过应用Middleware
例如,您可以将Middleware
与JSON Schema
结合使用来拦截特定请求并触发所需的脚本。
from jsonschema import validate
class CustomMiddleware(object):
JSON_SCHEMA={
"type": "array",
"items": {
"type" : "object",
"properties" : {
"sign" : {
"type" : "number"
}
}
}
def process_request(self, request):
if 'application/json' in request.META['CONTENT_TYPE'] and request.method == 'POST':
data = request.body
try:
validate(data, self.JSON_SCHEMA)
# Schema is valid invoke your hooks
except jsonschema.exceptions.ValidationError as ve:
# proceed request further
但是,如果您需要在请求之间保存状态,最好使用session
处理这种情况,
也不要忘记像下面这样在settings.py
中添加此中间件
MIDDLEWARE = [
'your.package.CustomMiddleware',
'django.middleware.security.SecurityMiddleware',
...
]
默认情况下,中间件会捕获所有请求,然后才需要在process_request
函数中过滤请求。
JSONSchema
用于减少用于验证请求的if-else
语句的数量,您可以根据需要以声明方式(而不是命令性方式)定义不同的规则。这确实使您的代码更具可读性和灵活性。您不应该使用JSONSchema
,这只是验证请求的一种可能方式。