我开始使用AWS Lambda,并且爱上了Chalice。据我了解,它与Flask具有相同的想法,但是使用所有请求都是“无服务器的”。我想将一个复杂的结构与几个lambda脚本文件放在一起。我找不到这样的例子。
In an update note here,它表示从0.4版本开始添加的内容似乎正是我想要的。在此示例中,它仅显示了如何拉data from files inside“ chalicelib”文件夹。
遵循此逻辑可以在“ chalicelib”中创建几个文件夹,就像每个文件夹代表我的应用程序模块一样,并且在这些文件夹中,每个文件都是一条带有源代码的路由吗?
我想知道这是否是可行的解决方案:
app/
├── requirements.txt
├── app.py
└── chalicelib
├── __init__.py
├── users
│ ├── __init__.py
│ ├── route.py
│ └── controller.py
└── teams
├── __init__.py
├── parameters.py
└── controller.py
app.py:
import chalicelib
chalicelib> __init __。py:
from . import users, teams
chalicelib>用户> __init __。py:
from . import route
chalicelib>用户> route.py:
from app import app
from . import controller
@app.route("/users/test")
def test():
return controller.test()
答案 0 :(得分:0)
圣杯具有称为blueprints的功能。 Chalice blueprints在概念上类似于Flask中的蓝图。蓝图用于将您的应用程序组织为逻辑组件。使用蓝图,您可以在app.py之外的模块中定义资源和装饰器。然后,您在主app.py文件中注册一个蓝图。蓝图支持应用程序对象上可用的任何装饰器。使用蓝图,您可以在多个文件中定义路线。
答案 1 :(得分:0)
从Chalice 1.12.0开始,您需要像这样在app.py中调用导入:
from chalice import Chalice
from chalicelib.users.controller import createUser
app = Chalice(app_name='MyApp')
@app.route('/users', content_types=['application/json'], methods=['POST'], api_key_required=True, cors=True)
def userPost():
data = app.current_request.json_body
response = createUser(data)
return response
在chalicelib / users / controller.py中的其他文件中:
def createUser(userData):
...{logic here}...
return response
答案 2 :(得分:-1)
您需要将变量导入每个初始化文件,直到到达所需文件为止。 例如:
app/
|__ app.py
|__ config.py
|__ app
|__ mod_cad
|__ controllers.py
|__ models.py
|__ mod_home
|__ controllers.py
|__ static
|__ ...
|__ templates
|__ ...
|__ __init__.py
然后:
__init__.py:
def index():
return render_template("home.html")
@app.errorhandler(404)
def not_found(error):
return render_template('404.html'), 404
from app.mod_cad.controllers import mod_cad as cad_module
from app.mod_home.controllers import mod_home as home_module
app.register_blueprint(cad_module)
app.register_blueprint(home_module)
db.create_all()
并且:
app.py:
# Run a test server.
from app import app
app.run(host='localhost', port=8080, debug=True)