AWS Chalice:多个python文件中的路由

时间:2018-06-25 19:59:16

标签: aws-lambda chalice

我开始使用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()

3 个答案:

答案 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)