return chalice来自chalicelib / utils.py的响应对象

时间:2018-04-19 05:18:55

标签: python return aws-lambda serverless-framework chalice

使用AWS Chalice,假设app.py如下所示:

from chalice import Chalice, Response
from chalicelib.utils import some_class

app = Chalice(app_name='myApp')
app.debug = True

@app.route('/myRoute',
       methods=['POST'],
       content_types=['application/octet-stream'])
def myRoute():
   some_class_instance = some_class()
   some_class_instance.some_def()

   return Response(
      body={'hello': 'world'},
      headers={'Content-Type': 'application/json'})

utils.py

import requests
from chalice import Response

class some_class:
    def some_def():
        return Response(
             body={'key1': 'val1'},
             headers={'Content-Type': 'application/json'})

如果按照图示编写,则some_class.some_def的返回语句不会返回给客户端。但如果我从some_def内部运行app.py,则会返回。为什么呢?

如何从app.py外部将对象返回给客户端?

3 个答案:

答案 0 :(得分:1)

如果您不想在app.py中保留应用程序代码,则此解决方案适用于multifile支持。

您可以创建一个chalicelib /目录,该目录中的任何内容都以递归方式包含在部署包中

├── app.py
├── chalicelib
│   └── __init__.py
|   └── utils.py
└── requirements.txt

然后在你的app.py导入中

from chalicelib.utils import SomeClass

some_class = SomeClass()
some_class.some_def()

答案 1 :(得分:0)

我看不到你在utils.py中调用some_class.some_def。你需要像在app.py中那样调用函数:

some_class.some_def()

答案 2 :(得分:0)

答案很简单(来自同事的提示)。您可以在调用函数(NSObject)中评估some_def的返回值。如果它是非空的,你将返回那个。使用问题中的示例,myRoute看起来像这样:

app.py