Как организовать применение относительно большой колбы?


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

6 72

6 ответов:

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

Fbone (Flask bone) - это шаблон колбы (Python microframework)/приложение bootstrap/boilerplate.

обзор

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

кстати, я только что нашел этот wiki На строить большой проект с склянкой полезной, pls проверяет его!

фляга 0.7 реализует проектов. Они отлично подходят для использования route декоратор без импорта основного объекта приложения.

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

почтовое характеристики:

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

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

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

я работаю над (По моим стандартам) большим проектом колбы (5000 строк кода Python, и это только наполовину закончено). Заказчик хочет, чтобы проект был модульным, поэтому я взял этот apporach:

моя структура папок выглядит так:

├── __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'])

я надеюсь, что это может быть некоторое вдохновение для вас:)

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

├── 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 │ └── ...

вы можете прочитать более глубокий пост, который я написал по теме здесь. Я обнаружил, что гораздо более интуитивно понятно отделять различные функциональные области в свою собственную папку.

Я работал над кодом a в то время как назад и с открытым исходным кодом он полностью! Вы можете проверить это на github.

Я создал колбу приложение разговорчив как С нуля и интегрировал его с gulp для разработки как frontend, так и backend. Это простой движок блога, но может быть легко изменен для разработки в соответствии с требованиями. Он хорошо структурирован с использованием чертежей.

проверка страницы проекта разговорчив как