0

我正在启动 AWS Lambda,我爱上了 Chalice。据我了解,它与 Flask 具有相同的想法,但使用所有请求“无服务器”。我想用几个 lambda 脚本文件组合一个复杂的结构。我找不到这样的例子。

在这里的更新说明中,它说从 0.4 版开始添加了似乎正是我正在寻找的东西。在这个例子中,它展示了如何从“chalicelib”文件夹中的文件中提取数据。

遵循这个逻辑可以在“chalicelib”中创建几个文件夹,就好像每个文件夹都代表我的应用程序的一个模块,并且在文件夹中每个文件都是带有一段源代码的路由?


我想知道这是否是一个可行的解决方案:

app/
├── requirements.txt
├── app.py
└── chalicelib
    ├── __init__.py
    ├── users
    │   ├── __init__.py
    │   ├── route.py
    │   └── controller.py
    └── teams
        ├── __init__.py
        ├── parameters.py
        └── controller.py

应用程序.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()
4

3 回答 3

3

Chalice 有一个称为蓝图的功能。Chalice 蓝图在概念上类似于 Flask 中的蓝图。蓝图用于将您的应用程序组织成逻辑组件。使用蓝图,您可以在 app.py 之外的模块中定义资源和装饰器。然后,您在主 app.py 文件中注册一个蓝图。蓝图支持应用程序对象上可用的任何装饰器。使用蓝图,您可以在多个文件中定义您的路线。

于 2019-11-21T06:08:53.557 回答
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
于 2020-01-28T20:56:06.800 回答
-4

您需要将变量导入每个初始化文件,直到您到达所需的文件。例如:

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)
于 2018-06-26T01:03:00.830 回答