Флэк – это легкий WSGI Веб приложение Framework. Он является частью категорий микро-каркаса с небольшим количеством зависимостей по внешним библиотекам. Это не обеспечивает никаких зависимостей или планировку проекта. Из-за чего вы найдете множество различных макетов проекта.
Пока я начал работать на колбе, я запутался выбрать правильный макет для моих приложений. В этом посте мы обсудим некоторые важные моменты, которые нужно помнить при структурировании приложения колбы с помощью моего Колбу ботина
проект.
Idris-Rampurawala/Flask-Bot
Колбовая котельная, чтобы быстро начнуться с приложениями в колбе из производства. Он имеет несколько дополнительных пакетов, предварительно сконфигурированных для простоты развития.
📝 Примечание
- Эта котельная была создана на основе моих совокупных знаний, полученных, написав несколько проектов в колбе
- Это может не быть выбором макета для вашего приложения, так как у вас могут быть разные требования, но отличный способ запускаться приложение для флэкса и добавить пакеты в соответствии с необходимостью
- Легкий вес в том, что он имеет только минимальные пакеты для достижения потребностей приложения. Но вы, безусловно, можете настроить его на основе вашей необходимости 😉
Почему ботистота? 🤔
Когда я впервые начал работать на флясной приложении, мне было трудное время выяснить правильную структуру и пакеты для достижения потребностей моего приложения Flask. Следовательно, я решил сделать эту очень базовую легкую ботинку для сообщества, в то время как я выяснил структуру, работающую на нескольких живых проектах в прошлом.
Когда мы начнем проект с нуля, особенно в Backend Services, существуют некоторые основные функциональные возможности, которые она должна обладать. Ниже приведены некоторые из точек для создания эффективного приложения, объясненного в отношении этой колбе Boeterplate.
Структура папок |
Управление внешними пакетами |
Настройка рабочей области |
Конфигурация |
логирование |
Аутентификация |
Настройка базы данных |
Очески задач (сельдерей) Настройка |
Развертывание |
Кэширование и валидация API |
1. Структура папок
Приложения для колба обычно имеют много вариаций в структуре их папки. Выбор хранения файлов в разных папках зависит от индивидуального/команды/типа проекта. На высоком уровне приложение для колба может быть создано даже с одной страницей или через метод заводской структуры. Давайте поговорим немного больше о концепциях здесь:
Фабрика шаблон Хорошо структурированные веб-приложения отдельная логика между файлами и модулями, как правило, с учетом разделяющих проблем. Это кажется сложным с колбой на первый взгляд, потому что наше приложение зависит от
Объект приложения
что мы создаем черезПриложение (__ имя__)
Отказ Разделение логики между модулями означает, что мы бы импортировали этот объект приложения по всему месту, в конечном итоге, приводящие к проблемам, таким как круговой импорт.Флэк приложение завод
относится к общемуузор
Для решения этой дилеммы. Причина, по которойЗавод приложений
так важно сделать с чем-то под названиемКонтекст приложения колбы
Отказ Следовательно, мы используем заводские шаблон внутри этого проекта котельной, чтобы наша жизнь немного легче.Чертежи В нормальном проекте число просмотров и шаблонов и моделей и форм и т. Д. будет расти. Вы можете (халично) отделить их, но не было бы неплохо иметь что-то, что группы, связанные с этим взгляды, шаблоны, модели и формы? Чертежи Действительно Это отличный способ модулярно сочинить колбные приложения, которые помогут масштабировать проекты.
Ну, в этой котельной, есть один план Core
Служа в качестве основы и больше можно добавить позже, как показано ниже:
# app/__init__.py def create_app(): ... app = Flask(APP_NAME) ... from .core.views import core as core_blueprint app.register_blueprint( core_blueprint, url_prefix='/api/v1/core' )
Итак, структура папки выглядит как 👇
├── app │ ├── core # blueprint │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── enums.py │ │ ├── tasks.py # celery tasks specific to this blueprint │ │ └── views.py │ ├── config.py │ └── __init__.py # app initialization logic ├── .env ├── .gitignore ├── Pipfile ├── Pipfile.lock ├── README.md ├── authentication.py ├── celery_worker.py └── run.py
2. Управление внешними пакетами
Одним из важнейших шагов является создание виртуальной среды для проектов Python для управления зависимостями. Для этой цели есть различные пакеты Python, такие как Виртуальский
, Пьенв
, так далее. Эта котельная использует Пипнв Для решения всех проблемы Что я столкнулся с другими пакетами для управления зависимостями. Пипнв
Автоматически создает и управляет виртуальной средой для ваших проектов, а также добавляет или удаляет пакеты из вашего Pipfile
Как вы устанавливаете/удалите пакеты.
Эта котельная имеет те пакеты, которые необходимы для создания приложения, и, следовательно, вы всегда можете настроить на основе вашей необходимости 😉
3. Настройка рабочей области
Хотя не напрямую связано с приложением, настройка вашего рабочего пространства влияет на ваш процесс создания приложений. Следовательно, настройка рабочей области является основным шагом для ускорения вашей рабочей среды. Я написал сообщение, которое конкретно говорит о настройке рабочей области Python в редакторе кода Visual Studio, который вы можете обратиться и быстро начать работу ✌️
Настройка рабочей области Python в Visual Studio Code (VSCode)
Idris Rampurawala · Март 10 · 4 мин читать
4. Конфигурация
Настройка приложения Flask (или, может быть, любое приложение), как правило, требует много усилий (если мы не опытным). В целом, к нему можно 2 аспекта –
Хранение секретов надежно Обычно много секретов составляют проект, такой как учетные данные DB, API ключей и т. Д. Рекомендуется держать эти секреты в обеспеченном месте, не отслеженным в
Гит
Отказ Вот почему у нас есть.env
(Git без упущенных, для создания из.env.example
) Файл в корневом местоположении этой котельной, который делает все секреты, присутствующие в нем доступны в нашем проекте, используя Python-Dotenv упаковка. Следовательно, это супер легко начать с только что создавая.env.env.
от.env.example.
Установка правильных значений 😁Создание нескольких конфигураций (DEV, постановка, продувка) Еще один важный момент состоит в том, чтобы отделить глобальные конфигурации на основе окружающей среды, такой как Dev, Постановка, Prod. Вот почему у нас есть
config.py.
, файл, содержащий классы конфигурации на основе среды, которые загружаются в приложение Flask на основе текущей рабочей среды (которые могут быть установлены в.env
).
# configuration classes (app/config.py) class BaseConfig(object): ''' Base config class. ''' ... class Development(BaseConfig): ''' Development config. ''' ... class Staging(BaseConfig): ''' Staging config. ''' ... class Production(BaseConfig): ''' Production config ''' ... config = { 'development': Development, 'staging': Staging, 'production': Production, }
# app/__init__.py from config import config ... def create_app(): # loading env vars from .env file load_dotenv() APPLICATION_ENV = get_environment() app = Flask(APP_NAME) # loading config based on current environment app.config.from_object(config[APPLICATION_ENV]) # APPLICATION_ENV is set in .env to set current environment
5. логирование
Регистрация – это средство отслеживания событий, которые происходят, когда некоторые программы выполняются. Мы добавляем регистрацию вызовов на наш код, чтобы указать, что определенные события произошли.
Поскольку у нас уже есть конфигурации на основе окружающей среды в нашем приложении, все другие конфигурации могут быть изменены в соответствии с текущей средой приложения (DEV, постановки, PROD). Логгеры настроены в config.py
и может быть переопределен в соответствующих приложенных средах (разработках, постановках, прод), как показано ниже 👇
# config.py class BaseConfig(object): ''' Base config class. ''' ... LOG_INFO_FILE = path.join(basedir, 'log', 'info.log') LOG_CELERY_FILE = path.join(basedir, 'log', 'celery.log') LOGGING = { 'version': 1, ...
6. Аутентификация
Аутентификация может быть добавлена аутентификация в соответствии с необходимостью приложения. Для начала эта котельная имеет API-ключ
На основании аутентификации, тогда как API-ключ
объявлен в .env
файл. В файл, аутентификация .py
Декоратор ищет X-API-ключ
Заголовок по запросу и возвращает 401
В случае несоответствия. После того, как вы настроили приложение, вы можете проверить тестовый маршрут ( /Core/Restricted
) для того же с помощью Curl с вашим набором ключа API в .env.env.
.
$ curl --location --request GET 'http://localhost:5000/api/v1/core/restricted' --header 'x-api-key:'
Для более сложной логики аутентификации, пожалуйста, напишите на заказ промежуточное программное обеспечение.
7. Настройка базы данных
Чтобы сохранить бойную табличку как можно более светом, у него нет добавленного пакета базы данных. Но беспокойтесь, если вы хотите добавить один. 😌 Довольно легко настроить базу данных, так как эта котельная создана через метод заводской структуры, а также конфигурацией на основе среды, как обсуждается в вышеуказанных точках. Давайте возьмем пример одной из популярных библиотеки – SQLalchemy Отказ
# app/__init__.py from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() def create_app(config_filename): ... app = Flask(__name__) app.config.from_object(config[APPLICATION_ENV]) ... db.init_app(app)
Конфигурация будет читаться напрямую от app.config
Что мы загрузили из config.py
Отказ
8. Очески задач (сельдерей) Настройка
Очески задач используются в качестве механизма для распределения работы по никам или машинам. Обычно даже небольшое микровиссу потребуется для запуска задач на заднем плане (Async). Следовательно, эта котельная поставляется с предварительно загруженной популярной очередью задач Сельдерей Отказ
Конфигурация довольно проста, поскольку мы используем фабрику колбы. Мы также добавили отдельный индивидуальный регистратор для журналов сельдерея, который пишет в отдельный настраиваемый файл Celery.log
Отказ Бег сельдерея так же просто, как только для работы команды Рабочий сельдерей - CELERY_WORKER.CELERY
(Из корня нашего проекта).
9. Развертывание
Колбовая документация Обеспечивает очень хороший список вариантов развертывания и необходимые шаги. Кроме того, вы можете обратиться к моему предыдущему посту на Развертывание приложения Django
который также похож на приложение Flask (с некоторыми изменениями минуты). 😄
Развертывание Джанго с сельдереем и Redis на Ubuntu
Idris Rampurawala · 5 ноября 1919 · 7 мин читать
10. Кэширование и валидация API
Мы уже охватываем множество очков, но два основных аспекта наличия прочного микрометика должны иметь эффективную проверку и возможность кэширования. Эта котельная поставляется со следующими двумя пакетами для достижения того же:
Редис | Клиент Python Redis для кэширования |
Webargs. | Библиотека Python для анализа и проверки объектов HTTP-запроса |
🤓 Начало работы с колбу котельной
До сих пор мы говорили о большинстве точек, который требуется идеальный проект, который приходит предварительно загруженным этой котельной. Все, что может быть вашим применением для создания приложения, такого как электронная почта
, Служба связи
, Обслуживание отчетности
или даже микросервис
, вы можете использовать эту бойную табличку с минимальной настройкой.
Вы можете начать использовать колбу ботина Использование следующих шагов установки и начните ваш проект!
# clone the repo $ git clone https://github.com/idris-rampurawala/flask-boilerplate.git # move to the project folder $ cd flask-boilerplate # create pipenv environment for python 3 $ pipenv --three # activate the pipenv environment $ pipenv shell # install all dependencies (include -d for installing dev dependencies) $ pipenv install -d # create `.env` from `.env.example` and set appropriate environment variables # run the project $ python run.py # optionally check if everything is working correctly by calling status apps (check Test section of readme)
Все готово! Колба ботина вверх и бежит и ждет вас, чтобы написать несколько прохладных вещей от него 🥳
⭐ Полезные ссылки
Если вы найдете это полезным или иметь какие-либо предложения, не стесняйтесь комментировать. Кроме того, не забудьте ударить ❤️ или 🦄, если вам нравится мой пост.
Увидимся! до моего следующего поста 😋
Оригинал: “https://dev.to/idrisrampurawala/flask-boilerplate-structuring-flask-app-3kcd”