Рубрики
Без рубрики

Колба Boaterplate – Структурирующая колбвое приложение

Представляя колбу Boaterplate для быстрого начнца с приложениями в колбе из производства. Он имеет несколько дополнительных пакетов, предварительно сконфигурированных для простоты развития. Теги с Showdev, Python, WebDev, Opensource.

Флэк – это легкий 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”