Что такое Flask Blueprints?

180

Я уже прочитал официальную документацию КОЛБУ на Blueprints и даже один или два сообщения в блоге на их использование.

Я даже использовал их в своем веб-приложении, но я не до конца понимаю, что это такое и как они вписываются в мое приложение в целом. Как это похоже на экземпляр моего приложения, но не совсем? Документация всесторонняя, но я ищу объяснения неспециалистов или просвещающую аналогию, чтобы зажечь ее для меня. Я был достаточно озадачен, когда коллега попросил меня объяснить им план Flask, который я решил спросить здесь.

JoshieSimmons
источник

Ответы:

287

Проект - это шаблон для создания «раздела» веб-приложения. Вы можете думать об этом как о плесени:

Медальон плесень с недавно снятым золотым медальоном

Вы можете взять план и применить его к вашему приложению в нескольких местах. Каждый раз, когда вы применяете его, план создаст новую версию своей структуры в гипсе вашего приложения.

# An example
from flask import Blueprint

tree_mold = Blueprint("mold", __name__)

@tree_mold.route("/leaves")
def leaves():
    return "This tree has leaves"

@tree_mold.route("/roots")
def roots():
    return "And roots as well"

@tree_mold.route("/rings")
@tree_mold.route("/rings/<int:year>")
def rings(year=None):
    return "Looking at the rings for {year}".format(year=year)

Это простая форма для работы с деревьями - она ​​говорит, что любое приложение, которое имеет дело с деревьями, должно обеспечивать доступ к его листьям, корням и кольцам (по годам). Само по себе это полая оболочка - она ​​не может маршрутизировать, она не может отвечать, пока не произойдет впечатление на приложение:

from tree_workshop import tree_mold

app.register_blueprint(tree_mold, url_prefix="/oak")
app.register_blueprint(tree_mold, url_prefix="/fir")
app.register_blueprint(tree_mold, url_prefix="/ash")

После создания он может быть «впечатлен» в приложении с помощью register_blueprintфункции - это «впечатляет» шаблон проекта в приложениях в местах, указанных url_prefix.

Шон Виейра
источник
5
Вот хорошая статья для структуры приложения с использованием чертежей. exploreflask.com/en/latest/blueprints.html
Девашиш
5
Я все еще в замешательстве. Означает ли это oak/leavesи fir\leavesбудет указывать тот же код? Кроме того, какова цель строки moldвBlueprint("mold", __name__)
Codevalley
8
Да, и то oak/leavesи другое fir/leavesбудет обработано def leaves. "mold"это имя проекта и используется для устранения неоднозначности при обращении к маршрутам (например, someBlueprint.routeNameпротив anotherBlueprint.routeName).
Шон Виейра
2
Как я могу получить доступ url_prefixк функции? Скажем, проверить, дуб это или пихта? tree_mold.url_prefixдает мнеNone
Mellkor
3
@Mellkor - просто используйте url_for('.relative_route_name')(обратите внимание на начальную точку). Например, url_for('.roots')автоматически предоставит правильно заданный URL-адрес в каждой точке подключения.
Шон Виейра
6

Как указано в комментарии @Devasish , эта статья дает хороший ответ:

http://exploreflask.com/en/latest/blueprints.html

Цитата из статьи:

Примером этого может быть Facebook. Если Facebook использует Flask, у него могут быть чертежи для статических страниц (т. Е. Для выхода из системы, регистрации, информации и т. Д.), Панели инструментов (т. Е. Для подачи новостей), профилей (/ robert / about и / robert / photos), настройки (/ настройки / безопасность и / настройки / конфиденциальность) и многое другое. Все эти компоненты имеют общий макет и стили, но каждый имеет свой собственный макет.

Это очень хорошая интерпретация, особенно часть «если Facebook использовал Flask». Это дает нам конкретную ситуацию для визуализации того, как на самом деле работает Blueprint.

Тран Куонг
источник
3

Я тоже просто наткнулся на это сам и запутался после прочтения нескольких источников документации. Сначала я подумал, что это похоже на стиль реализации C # / Java, где вы определяете некоторые вещи, но вам не нужно беспокоиться об этом, определяя их до тех пор, пока они не появятся. Тем не менее, я наткнулся на эту страницу, которая описывает ее очень мирянно (и довольно весело в наши дни).https://hackersandslackers.com/flask-blueprints/

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

Изменить: в настоящее время я использую его, чтобы сегментировать мой код веб-приложений. Это было также хорошее решение, потому что я нашел, что ведущий дизайнер хочет сделать фронтенд в Vue.js. То, что я еще не использовал, но, глядя на его файлы проекта, выглядело бы намного более грязным и, вероятно, обеспечило бы множество склонностей к именованию.

LFMekz
источник
0

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

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

Henshal B
источник