0

使用 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'})

如果写成如图所示,return 语句 fromsome_class.some_def不会返回给客户端。但如果我some_def从里面跑,app.py它就会被退回。为什么?

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

4

3 回答 3

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()
于 2018-04-19T05:35:57.267 回答
0

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

some_class.some_def()
于 2018-04-19T05:36:47.033 回答
0

答案非常简单(来自同事的提示)。some_def您在调用者函数 ( myRoute)中评估返回的值。如果它不是空的,则返回那个。使用问题中的示例,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()
    r = some_class_instance.some_def()
    if r:
        return r
    else:
        return Response(
               body={'hello': 'world'},
               headers={'Content-Type': 'application/json'})
于 2018-04-19T17:02:21.557 回答