AWS Chalice: маршруты в нескольких файлах Python
Я запускаю AWS Lambda и влюбился в Чашу. Из того, что я понимаю, он имеет ту же идею Flask, но использует все запросы "без сервера". Я хотел бы собрать сложную структуру с несколькими файлами лямбда-скриптов. Я не нахожу такого примера.
В заметке об обновлении здесь говорится, что с версии 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
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()
1 ответ
У Чаши есть особенность, называемая чертежами. Эти чертежи Чаши концептуально похожи на чертежи в термосе. Схемы используются для организации вашего приложения в логические компоненты. Используя схему, вы определяете свои ресурсы и декораторы в модулях за пределами вашего app.py. Затем вы регистрируете план в своем основном файле app.py. Чертежи поддерживают любой декоратор, доступный для объекта приложения. Используя чертежи, вы можете определять свои маршруты в нескольких файлах.
Из 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
Вам нужно импортировать переменные в каждый файл инициализации, пока не дойдете до нужного файла. Например:
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)