Продвинутые концепции Flask

flask
image-888

Введение — приложение, которое можно масштабировать.

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

Существует два тесно связанных понятий связанных с масштабированием — как влияет на приложение увеличение числа пользователей и как влияет на разработку приложения увеличение числа программистов. Эти проблемы являются центральными в разработке программного обеспечения. Центральные вопросы: Как мы эффективно будем работать в командах 20 разработчиков, 40 разработчиков, или даже тысячи? И как нам справиться с максимальной нагрузки на нашей системе?

Эти вопросы могут показаться простыми, но всегда есть подводные камни. В плохо разработанное приложение, миллионы строк в итоге могут быть выброшены. С другой стороны, есть некоторые системы, которые были разработаны еще в 70-х годах и до сих пор используется.

Масштабирование кодовой базы

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

Есть некоторые идеи которые можно использовать при проектировании  кода:

  1. Модульность
  2. Слабосвязанный код лучше, чем тесно связанный (обычно)
  3. Используйте комментарии
  4. Повторно используйте код, как можно чаще
  5. Пишете код, который является как можно более общим
  6. Тестируйте так часто, как это возможно, и на уровне модуля и на уровень системы
  7. Дайте себе достаточно времени, чтобы добиться своей цели, и затем останьтесь в рамках бюджета
  8. Сотрудничество является крайне важным

Следует отметить, что все из перечисленных выше пунктов, не будут рассмотрены в этой статье; Пункты 6 — 8 будет в значительной степени игнорироваться.

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

  1. Сервер для обслуживания страниц. — конкретно
  2. База данных для хранения данных пользователей. — конкретно
  3. Способ входа активных пользователей, и взаимодействия с ними. — расплывчато
  4. Система управления контентом для администратора сайта, для обновления сайта. — конкретно
  5. Способ взаимодействовать с сообществом которое мы разрабатываем. — расплывчато
  6. RSS фиды — конкретно
  7. Способ централизованного управления нашей социальной наличием. — конкретно
  8. Поддержка видео контента. — конкретно

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

Итак, давайте разобьем расплывчатые понятия:

Способ войти активности пользователей, поэтому мы можем говорить о всех осознания мы поднимаем. Можно разделить на:

  1. Таблица базы данных регистрации пользователей в нашей системе.
  2. Функция или набор функций, которые необходимо работы с пользователями.

Способ взаимодействовать с сообществом которое мы разрабатываем. Можно разделить на:

  1. Форум для обсуждения тем
  2. Раздел комментарий после каждого поста в блоге.
  3. Обратная связь и контакты для связи с администрацией сайта

Теперь, когда у нас есть план для нашего приложения, давайте посмотрим, что уже есть у Flask и что мы должны написать сами.

Что мы получаем с Flask

Сервер — Flask поставляется с разработанным сервером, и есть много уже готовых модулей Flask, которые легко установить.

База данных — Flask поставляется с SQLite, но есть и много других вариантов.

Вход пользователей? Мы должны создать эту функциональность в нашем приложении.

То, что мы должны написать:

Систему управления контентом — это основная часть приложения. Обратите внимание, что мы должны управлять комментариями и видео, поэтому мы не должны создать отдельный функциональность для них.

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

RSS — мы создадим это в его собственном разделе приложения.

Почтовый клиент — мы должны создать тоже с нуля.

Имея свой дизайн настроен, как правило, сэкономить время. В этом примере, зная доска объявлений и CMS потребуется некоторое повторное использование кода, необходимо сохранить какое-то время.

Blue prints (эскизы)

Так что мы идем вперед и создаем пять раздельных приложений, и код будет повторятся в каких то местах? Конечно нет! Эскизы позволяют создать одно большое приложение, работающее с несколькими приложениями одновременно. Благодаря этому увеличивается модульность приложения и в целом облегчит разработку. Это также делают ваш код более отказоустойчивым. Это означает, что когда часть вашего кода не работает, будет легче найти причину, и у вас будете меньше ошибок (потому что у вас есть куча небольших приложений вместо одного очень большого).

Настройка нашего проекта

Если вы уже работали с Flask, создание  настройка эскизов будет вам знакома.

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

Структура каталога:

run.py
/slavery_website/
    __init__.py
    blog/
        __init__.py
        static/
        templates/
        views.py
        models.py
    cms/
        __init__.py
        static/
        templates/
        views.py
        models.py
    email_client/
        __init__.py
        static/
        templates/
        views.py
        models.py
    feeder/
        __init__.py
        static/
        templates/
        views.py
        models.py
    logger/
        __init__.py
        static/
        templates/
        views.py
        models.py
    message_board/
        __init__.py
        static/
        templates/
        views.py
        models.py

Некоторые из views.py файлов

cms/views.py

from flask import Blueprint, render_template
from models import *
cms = Blueprint("cms",__name__,template_folder='templates')
@cms.route("/add",methods=["GET","POST"])
def add():
    return render_template("admin.html")
@cms.route("/remove",methods=["GET","POST"])
def remove():
    return render_template("admin.html")
@cms.route("/view_entries",methods=["GET","POST"])
def view_entries():
    entries = get_entries()
    return render_template("entries.html",entries=entries)

logger/views.py

from flask import Blueprint, render_template
from models import *
logger = Blueprint('logger',__name__,template_folder="templates")
@logger.route("/analytics/page_views",methods=["GET","POST"])
def page_views():
    pages = get_page_views()
    return render_template("viewer.html",pages=pages)
@logger.route("/analytics/button_press", methods=["GET","POST"])
def button_press():
    buttons = get_button_press()
    return render_template("viewer.html",buttons=buttons)
**Some functions snipped**

slavery_website/init.py:

from flask import Flask
from cms.views import cms
from logger.views import logger
app = Flask(__name__)
app.register_blueprint(cms, url_prefix='/admin')
app.register_blueprint(logger,url_prefix='/analytics')