В этой статье я покажу вам, как загружать данные приложения Flask из автономной CMS и обсудить объединение результатов в гибкую архитектуру веб-сайта. Если вы новичок во Flask, ознакомьтесь с руководством пользователя в официальной документации Flask. В нем есть прекрасное предисловие, краткое введение и полное руководство.

Расти как змея

Я знаю, что это немного странное начало, но потерпите меня. Змеи растут, пока не умрут. По мере взросления их рост сильно замедляется, но не останавливается, если их кормить. Мне хотелось бы думать, что я могу применить это к своей жизни и навыкам. Узнавайте что-то каждый день, часто практикуйте свои навыки, продолжайте совершенствовать и совершенствовать то, над чем вы работаете, питайтесь новой информацией.

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

Использование Python стало для меня «делом любви», и я хотел передать то же радушное чувство и на проекты веб-разработки, над которыми я регулярно работаю. Мне нужен был веб-фреймворк, который начинался с малого, но мог масштабироваться по мере развития проекта. Flask отвечает всем требованиям идеально.

Что такое Flask?

Flask - это минимальная среда веб-разработки на Python, которая связывает код вашего приложения с интерфейсом шлюза веб-сервера (WSGI) и шаблонами. В нем нет уровня базы данных, слоя формы или каких-либо других функций. Лучше всего об этом говорится в официальной документации:

«Flask может быть всем, что вам нужно, и ничем лишним ... По мере роста вашей кодовой базы вы можете свободно принимать дизайнерские решения, подходящие для вашего проекта. Flask продолжит предоставлять очень простой слой клея для лучшего, что может предложить Python ».

Если ваше приложение было едой, Flask - это даже не «мясо и картошка», а тарелка и вилка.

Гибкость Flask сложно кратко описать из-за всех имеющихся у него возможностей расширяемости, но в интересах краткости я сосредоточился на масштабируемости и простоте разработки:

Масштабируемость

  • Flask не диктует архитектурных дизайнерских решений и действует скорее как канал, связывающий ваши сервисы вместе. По сути, он поставляется с готовыми шаблонами через Jinja и интерфейсом шлюза веб-сервера через Werkzeug (для маршрутизации и подключения приложений). Таким образом, вы можете начать с самого минимума и постепенно увеличивать сложность.
  • Расширения, API-перехватчики, промежуточное ПО и подклассы могут использоваться по мере возникновения требований или когда проект готов стать большим согласно документации Flask ».
  • Чертежи и запуск сайтов как пакетов доступны для более крупных приложений.

Например, на диаграмме ниже вы можете увидеть три различных типа клиентских запросов, которые ваш сайт может обслуживать в будущем:

Если вам нужно обслуживать только простые страницы, вам может понадобиться только ваше приложение Flask на сервере. Однако со временем вы можете обнаружить, что вам нужно добавить поддержку «входа в систему» ​​с расширениями, медиа-сервер с промежуточным программным обеспечением, систему управления контентом и схемы для динамической маршрутизации. Flask можно масштабировать в соответствии с этими требованиями.

Легкость развития

  • Маршрутизация во Flask чрезвычайно проста - в одной строке вы привязываете декоратор к функции. При каждом попадании в этот маршрут функция выполняется.
@app.route(‘/’) 
def index(): 
   return ‘Index Page Text’
@app.route(‘/hello’) 
def hello(): 
   return ‘Hello, World!’
  • Для использования переменных в шаблонах не требуется шаблон или настройка - передайте переменную в функцию render_template в представлении, и вы сможете получить к ней доступ в шаблоне:
# in file: home/view.py: 
return render_template(“home/index.html”, hero=hero, articles=articles)

# in file: templates/home/index.html 
<h2>{{ hero.elements.title.value }}</h2>

Headless и Flask: почему они идеально подходят

Когда дело доходит до выбора фреймворка и CMS, нужно о многом подумать, но стоимость, сложность и перспективный дизайн всегда зависят от гибкости проекта. Вот почему использование автономной CMS и Flask полностью отвечает этим требованиям:

Оба используют модель микросервисов

Разработка проекта с использованием архитектуры микросервисов приводит к меньшему объему кода. Использование микрофреймворка означает, что здесь нет «раздутого решения» с функциями. Вы будете использовать только лучшие в своем классе интеграции, и вы можете постепенно добавлять эти инструменты по мере развития вашего проекта.

Подобно диаграмме масштабируемости ранее, вот как может выглядеть интеграция с внешними службами для обработки различных клиентских сценариев:

Использование автономной CMS SaaS означает, что код вашей системы управления размещен на сервере поставщика, что приводит к нулевым дополнительным накладным расходам для вас. Кроме того, контент остается изолированным от кода проекта, и вам обычно не нужно вносить изменения в код при выпуске новых функций CMS.

Вы не привязаны к определенному каналу

Безголовые CMS предоставляют контент в многоканальном формате, что означает, что контент можно повторно использовать в различных типах приложений в вашей организации. Поскольку Python является основным языком для машинного обучения, искусственного интеллекта и инженерии данных, это может оказаться чрезвычайно полезным для будущего вашего контента!

Даже бюджетирование стало более гибким

С моделью оплаты подписки CMS без управления вы платите только за то, что вам нужно, и обычно можете изменить план подписки в соответствии со своим бюджетом и требованиями.

Flask имеет открытый исходный код и бесплатен. Я бы сказал, что это самый гибкий способ списания средств с кредитной карты вашей компании.

Как подключить Flask к безголовой CMS

Разминки и упражнения - лучший способ сохранить гибкость, поэтому в этом разделе давайте рассмотрим пример настройки сайта, чтобы увидеть Flask и автономную CMS в действии.

Мы будем использовать Kentico Kontent в качестве нашей автономной CMS, Kontent Python SDK, большую структуру приложения, рекомендованную Flask, и общий проект Kentico Kontent.

Полное раскрытие информации: я создал этот «неофициальный SDK для Kontent Python», и подключение Flask к Kontent можно выполнить с помощью только библиотеки HTTP-запросов. Однако это сэкономило мне много кода в моих представлениях:

Мы создадим сайт за пять шагов:

  1. Выполнить установку
  2. Создайте структуру проекта
  3. Добавьте логику приложения
  4. Добавьте логику шаблона
  5. Запустить сайт

Шаг: первый: выполните установку

  • Настройте виртуальную среду, например virtualenv: py -m venv env
  • Установить Flask: pip install flask
  • Установите Python SDK: pip install kontent_delivery

Шаг 2. Создайте структуру проекта

  • А пока создайте пустые файлы Python и HTML в структуре ниже. На следующем шаге вы добавите соответствующий код в каждый файл. Примечание. Жирные имена с обратной косой чертой («/») обозначают каталоги.
sample/ 
  __init__.py 
  home/ 
    views.py 
  templates/ 
    base.html 
    home/ 
      index.html 
config.py 
setup.py

Шаг 3. Добавьте логику приложения

from setuptools import setup 
setup(
    name=’kontent_flask’, 
    packages=[‘sample’], 
    include_package_data=True, 
    install_requires=[ 
        ‘flask’, 
    ], 
)
  • config.py в корне проекта - config.py рекомендуется для Python SDK, чтобы настроить таргетинг на правильный проект Kontent. Примечание. идентификатор проекта в показанном config.py - это общий образец сайта.
project_id =”975bf280-fd91–488c-994c-2f04416e5ee3" 
delivery_options = { 
    “preview”: False, 
    “preview_api_key”: “enter_key_here”, 
    “secured”: False, “secured_api_key”: 
    “enter_key_here”, 
    “timeout”: (4,7) 
}
  • __init__.py - создает объект приложения Flask, инициализирует клиента доставки контента и импортирует представления.
from flask import Flask 
import config 
from kontent_delivery.client import DeliveryClient 
app = Flask(__name__) 
client = DeliveryClient(config.project_id, options=config.delivery_options) 
import sample.home.views
  • home / views.py - захватывает контент из CMS, а затем передает его как переменные в домашний шаблон при достижении маршрута «/».
from flask.templating import render_template 
from sample import app, client 
@app.route(“/”) 
def index(): 
    resp = client.get_content_item(“home”) 
    if resp: 
        hero_units = resp.get_linked_items(“hero_unit”) 
        hero = hero_units[0]
        articles = resp.get_linked_items(“articles”) 
        return render_template(“home/index.html”, hero=hero,   articles=articles) 
# custom 404 page information available at: # https://flask.palletsprojects.com/en/2.0.x/errorhandling/?highlight=404#custom-error-pages 
    return render_template(“error_pages/404.html”), 404

Шаг четвертый: добавьте логику шаблона

  • templates / base.html - оболочка шаблона, содержащая HTML макета для сайта.
<html> 
    <head id=”head”> 
        {% block head %} 
        <meta name=”viewport” content=”width=device-width, initial-scale=1" /> 
        <meta charset=”UTF-8" /> 
        <title>Flask Sample</title> 
        {% endblock %} 
    </head> 
    <body> 
        <div class=”container”> 
            {% block content %} 
            {% endblock %} 
        </div> 
    </body> 
</html>
  • templates / home / index.html - шаблон на маршруте «/», который использует переменные, переданные из home / views.py.
{% extends “base.html” %}
{% block content %} 
<h1>Flask Simple Example</h1> 
<h2>{{ hero.elements.title.value }}</h2> 
<div> 
{% for article in articles %} 
    <div> 
        <div> 
            <h2> 
             <a href=”/articles/{{article.elements.url_pattern.value}}”> 
                {{ article.elements.title.value }} 
             </a> 
             </h2> 
             <p> 
                 {{ article.elements.summary.value }} 
             </p> 
             <div> 
                 {{ article.elements.post_date.value }} 
             </div> 
        </div> 
    </div> 
{% endfor %} 
</div> 
{% endblock %}

Шаг пятый: запустите сайт

  • В вашем терминале установите переменную среды FLASK_APP: set FLASK_APP=sample
  • Установите пакет приложения, используя pip install -e . (включая точку)
  • Запустить приложение: flask run

Переход по ссылке на приложение Flask из терминала (по умолчанию http://127.0.0.1:5000) приведет вас на сайт Kontent + Flask. Если у вас есть учетная запись Kontent и вы хотите протестировать ее на собственном образце проекта Kontent, следуйте этим инструкциям.

Полный код этого образца можно увидеть в этом репозитории GitHub.

Заключение

В этой статье мы обсудили преимущества использования Flask с автономной CMS и то, как создать образец проекта Flask + Kentico Kontent. Теперь я уверен, что вы согласитесь с тем, что использование микрофреймворка с автономной CMS дает большую гибкость!

Если эта статья заинтересовала вас возможностями использования Flask и Kentico Kontent, более надежный образец сайта Flask + Kontent можно увидеть здесь.

У вас возникли проблемы с образцами Flask из статьи? Свяжитесь с нами в нашем Discord.

Первоначально опубликовано на https://kontent.ai.

Больше контента на plainenglish.io