Становление крупным проектом
Вот ваши варианты при расширении базы кода или масштабировании приложения.
Прочитайте исходный код.
Flask был, частично, создан для демонстрации того, как создать собственную структуру на основе хорошо зарекомендовавших себя инструментов Werkzeug (WSGI) и Jinja (шаблоны), и по мере развития он стал полезным для широкой аудитории. По мере роста вашей базы кода, не просто используйте Flask — поймите его. Прочитайте исходный код. Код Flask написан так, чтобы его можно было прочитать; его документация опубликована, чтобы вы могли использовать его внутренние API. Flask придерживается документированных API в библиотеках-предка и документирует свои внутренние утилиты, чтобы вы могли найти точки подключения, необходимые для вашего проекта.
Присоединиться. Расширить.
Документация API полна доступных переопределений, точек входа и Сигналов. Вы можете предоставить пользовательские классы для таких вещей, как объекты запроса и ответа. Более глубоко изучите используемые API и ищите настройки, которые изначально доступны в релизе Flask. Найдите способы рефакторинга вашего проекта в набор утилит и расширений Flask. Изучите множество Расширений в сообществе и ищите шаблоны для создания собственных расширений, если не найдете нужных инструментов.
Наследовать.
Класс Flask имеет много методов, предназначенных для наследования. Вы можете быстро добавить или настроить поведение, наследуя Flask (см. документацию связанных методов) и использовать этот подкласс всякий раз, когда вы инициализируете класс приложения. Это хорошо работает с Фабриками приложений. См. Наследование Flask для примера.
Оборачивание с помощью middleware.
Шаблон Перенаправление приложений подробно показывает, как применять middleware. Вы можете ввести WSGI-middleware, чтобы обернуть ваши экземпляры Flask и внести исправления и изменения на уровне между вашим приложением Flask и вашим HTTP-сервером. Werkzeug включает несколько middleware.
Разветвить.
Если ни один из вышеперечисленных вариантов не работает, разветвите Flask. Большая часть кода Flask находится в Werkzeug и Jinja2. Эти библиотеки выполняют основную работу. Flask — это просто клей, который их связывает. Для каждого проекта существует момент, когда базовая структура становится препятствием (из-за предположений первоначальных разработчиков). Это естественно, потому что если бы этого не было, структура была бы очень сложной системой, что приводит к крутому порогу обучения и большому разочарованию пользователей.
Это не уникально для Flask. Многие люди используют откорректированные и измененные версии своего фреймворка, чтобы преодолеть недостатки. Эта идея также отражена в лицензии Flask. Вам не нужно возвращать какие-либо изменения, если вы решите изменить структуру.
Недостаток разветвления, конечно, в том, что расширения Flask, скорее всего, сломаются, потому что в новой структуре другое имя импорта. Кроме того, интеграция изменений из основной ветки может быть сложным процессом, в зависимости от количества изменений. По этой причине разветвление должно быть последним средством.
Масштабирование как профессионал.
Для многих веб-приложений сложность кода — это меньше проблема, чем масштабирование для ожидаемого количества пользователей или записей данных. Сам Flask ограничен только масштабированием кодом вашего приложения, хранилищем данных, которое вы хотите использовать, и реализацией Python и веб-сервером, на которых вы работаете.
Хорошее масштабирование означает, что если вы удвоите количество серверов, вы получите примерно вдвое больше производительности. Плохое масштабирование означает, что если вы добавите новый сервер, приложение не будет работать лучше или не будет поддерживать второй сервер.
Существует только один ограничивающий фактор в отношении масштабирования в Flask — это контекстно-локальные прокси. Они зависят от контекста, который в Flask определяется как поток, процесс или зелёная нить. Если ваш сервер использует какой-либо вид конкурентности, который не основан на потоках или зелёных нитях, Flask больше не сможет поддерживать эти глобальные прокси. Однако большинство серверов используют либо потоки, зелёные нити, либо отдельные процессы для достижения конкурентности, что все методы хорошо поддерживаются базовой библиотекой Werkzeug.
Обсудите с сообществом.
Разработчики Flask поддерживают доступность структуры пользователям с большими и небольшими базами кода. Если вы столкнетесь с препятствием, вызванным Flask, не стесняйтесь обращаться к разработчикам на списке рассылки или сервере Discord. Лучший способ для разработчиков Flask и расширений Flask улучшить инструменты для крупных приложений — получить отзывы от пользователей.
© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/2.1.x/becomingbig/