Я создаю свое первое приложение Flask, и я не могу понять хороший, чистый Pythonic способ организации моего приложения. Я не хочу иметь все в одном файле .py, как в их примере. Я хотел бы иметь каждую часть моего приложения в отдельном модуле. Что было бы хорошим способом организовать вещи?
Как организовать относительно большое приложение Flask?
Ответ 1
Я создал проект шаблона Flask под названием " Fbone", пожалуйста, не забудьте проверить его и вилку:)
Fbone (фляжная кость) - это шаблон флекса (микрофонная диаграмма Python)/загрузочное/шаблонное приложение.
Обзор
- Хорошо разработан для большого проекта с использованием плана.
- Интеграция с самой горячей инфраструктурой frontend: jQuery/html5boilerplate/bootstrap.
- Опираясь на знаменитую SQLalchemy.
- Реализуйте сложную "помните меня" с помощью флажка-входа.
- Обрабатывать веб-формы с помощью flask-wtform.
- Тестирование с помощью фляжки и носа.
- Простое развертывание через ткань и mod_wsgi (пример включен).
- i18n by flask-babel
btw, я просто нашел этот wiki для создания большого проекта с помощью Flask, PLS, проверьте его!
Ответ 2
Flask 0.7 реализует Blueprints. Они отлично подходят для использования декоратора route
без импорта основного объекта приложения.
Ответ 3
Обязательно прочитайте Мэтт Райт замечательный пост по этому вопросу. p >
Особенности сообщения:
-
Описание структуры для проектов с большими колбами
-
Описание лучших методов проектирования в целом, когда речь идет о крупных веб-приложениях, таких как шаблон MVC, фабрики приложений, службы и миграция данных, чтобы назвать несколько (наиболее интересная функция IMHO).
Ответ 4
Я работаю над (по моим меркам) большим проектом Flask (5000 строк кода Python и он только наполовину готов). Заказчик хочет, чтобы проект был модульным, поэтому я принял это выражение:
Моя структура папок выглядит следующим образом:
├── __init__.py
├── modules.yml
├── config
├── controllers
│ └── ...
├── lib: Common functions I use often
│ └── ...
├── models
│ └── ...
├── static: All static files
│ ├── css
│ ├── img
│ └── js
└── templates: Jinja2 templates
└── ...
В modules.yml
я определяю свои модули, включая имя и URL. Таким образом, клиент может включать/отключать модули, не касаясь одного файла Python. Кроме того, я создаю меню на основе списка модулей. По соглашению каждый модуль имеет свой собственный Python-модуль в controllers/
, который загрузит его model
из models/
. Каждый контроллер определяет Blueprint
, сохраненный как имя контроллера. Например. для модуля user
у меня есть controllers/user.py
:
# Module name is 'user', thus save Blueprint as 'user' variable
user = Blueprint('user', __name__)
@user.route('/user/')
def index():
pass
Таким образом, я могу читать modules.yml
в моем __init__.py
и загружать и регистрировать все включенные модули динамически:
# Import modules
for module in modules:
# Get module name from 'url' setting, exculde leading slash
modname = module['url'][1:]
try:
# from project.controllers.<modname> import <modname>
mod = __import__(
'project.controllers.' + modname, None, None, modname
)
except Exception as e:
# Log exceptions here
# [...]
mod = getattr(mod, modname) # Get blueprint from module
app.register_blueprint(mod, url_prefix=module['url'])
Надеюсь, это может быть для вас источником вдохновения:)
Ответ 5
Я работал в социальной сети, построенной поверх Flask. Особенность моего проекта заключалась в том, что сервер исключительно обслуживает конечные точки API, а frontend - одностраничное приложение Backbone. Конструкция фляги, которую я взял, такова:
├── app
│ ├── api
│ │ ├── auth.py
│ │ └── ...
│ ├── app.py
│ ├── common
│ │ ├── constants.py
│ │ ├── helpers.py
│ │ ├── response.py
│ │ └── ...
│ ├── config.py
│ ├── extensions.py
│ ├── frontend
│ │ └── controllers.py
│ ├── static
│ │ └── ...
│ ├── templates
│ │ ├── app.html
│ │ └── ...
│ └── users
│ ├── UserConstants.py
│ ├── UserForms.py
│ ├── UserHelpers.py
│ ├── UserModels.py
│ └── __init__.py
├── alembic
| ├── version
│ └── ...
├── tests
│ └── ...
Вы можете прочитать более подробное сообщение, которое я написал на тему здесь. Я обнаружил, что гораздо более интуитивно понятно разделить разные функциональные области на свою собственную папку.
Я работал над кодом некоторое время назад и открыл его полностью! Вы можете проверить это на github.
Ответ 6
Я создал приложение Flask yapper с нуля и интегрировал его с gulp для разработки интерфейса и бэкэнд. Это простой блог-движок, но его можно легко модифицировать для разработки в соответствии с требованиями. Он хорошо структурирован с использованием чертежей.
Оформить страницу проекта yapper