使用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
外部将对象返回给客户端?
答案 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