我正在创建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()
发布于 2019-11-21 14:08:54
Chalice有一个叫做blueprints的功能。Chalice blueprints在概念上类似于Flask中的蓝图。蓝图用于将应用程序组织到逻辑组件中。使用蓝图,您可以在app.py外部的模块中定义资源和装饰器。然后在主app.py文件中注册一个蓝图。Blueprints支持应用程序对象上可用的任何装饰器。使用蓝图,您可以在多个文件中定义路线。
发布于 2020-01-29 04:56:07
从Chalice 1.12.0开始,您需要在app.py中调用imports,如下所示:
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/Controler.py中的另一个文件中:
def createUser(userData):
...{logic here}...
return response
发布于 2018-06-26 09:03:01
您需要将变量导入到每个init文件中,直到到达所需的文件。例如:
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)
https://stackoverflow.com/questions/51031020
复制相似问题