Что такое Flask Blueprints?


180

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

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

Ответы:


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. То, что я еще не использовал, но, глядя на его файлы проекта, выглядело бы намного более грязным и, вероятно, обеспечило бы множество склонностей к именованию.


0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.