Как организовать относительно большое приложение Flask? - PullRequest
74 голосов
/ 22 февраля 2012

Я создаю свое первое приложение Flask, и я не могу найти хороший, чистый Pythonic способ организации моего приложения.Я не хочу, чтобы все было в одном .py файле, как в их примере.Я хотел бы, чтобы каждая часть моего приложения была в отдельном модуле.Что было бы хорошим способом организовать вещи?

Ответы [ 6 ]

82 голосов
/ 22 февраля 2012

Я создал шаблонный проект Flask под названием " Fbone ", пожалуйста, не стесняйтесь проверить его и раскошелиться:)

Fbone (костяная фляга) - это шаблон / бутстрап / шаблонная колба для флаконов (Python microramework).

Обзор

  • Хорошо спроектирован для большого проекта с использованием светокопии.
  • Интеграция с самой популярной оболочкой внешнего интерфейса: jQuery / html5boilerplate / bootstrap.
  • При поддержке знаменитой SQLalchemy.
  • Реализация хитрого "запомни меня" с помощью flask-login.
  • Работа с веб-формами при помощи склянки-wtform.
  • Юнит-тестирование с колбой и носом.
  • Простота развертывания через фабрику и mod_wsgi (пример включен).
  • i18n by flask-babel

Кстати, я только что нашел эту вики при создании большого проекта с использованием Flask, пожалуйста, проверьте это!

20 голосов
/ 22 февраля 2012

Фляга 0,7 * Чертежи . Они отлично подходят для использования декоратора route без импорта основного объекта приложения.

17 голосов
/ 26 августа 2013

Обязательно прочитайте Мэтта Райта замечательно пост по теме.

Особенности поста:

  1. Описание конструкции для проектов с большими колбами

  2. Пример приложения на Github

  3. Описание лучших практик проектирования в целом , когда речь идет о крупных веб-приложениях, таких как шаблон MVC, фабрики приложений, службы и миграция данных и многие другие (наиболее интересная особенность IMHO) .

12 голосов
/ 27 июня 2013

Я работаю над (по моим стандартам) большим проектом 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'])

Надеюсь, это может послужить вам источником вдохновения:)

3 голосов
/ 23 июня 2016

Я работал в социальной сети, созданной поверх Flask. Особенностью моего проекта было то, что сервер обслуживает только конечные точки API, а внешний интерфейс представляет собой одностраничное приложение Backbone. Я взял следующую структуру фляги:

├── app │ ├── api<br> │ │ ├── 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 .

2 голосов
/ 20 февраля 2015

Я создал приложение Flask yapper с нуля и интегрировал его с gulp для разработки как внешнего интерфейса, так и внутреннего интерфейса. Это простой движок блога, но его можно легко модифицировать для разработки в соответствии с требованиями. Он хорошо структурирован с использованием чертежей.

Оформить заказ на странице проекта Яппер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...