Які саме графічні графіки?


180

Я вже прочитав офіційну документацію колбу на Blueprints і навіть один або два повідомлення в блозі на їх використання.

Я навіть використовував їх у своєму веб-додатку, але я не повністю розумію, що вони є чи як вони вписуються в мою програму в цілому. Чим він схожий на екземпляр мого додатка, але не зовсім? Документація є вичерпною, але я шукаю непростого пояснення або просвітницької аналогії, щоб викликати це для мене. Я був достатньо здивований, коли колега попросив мене пояснити їхній план, який я вирішив запитати тут.

Відповіді:


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/uk/latest/blueprints.html
Devasish

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/

По суті, одна перевага, яка згадується у посиланні, і дає мені чітке уявлення про її реальне використання - це те, що я можу ефективно логічно впорядкувати / розділити додаток на кілька частин, які потребують стосунку лише власних справ. Таким чином, це забезпечує деяку розроблену інкапсуляцію.

Редагувати: Зараз я використовую його для сегментації коду webapps. Це було також гарним рішенням, тому що я виявив, що головний дизайнер хоче здійснити передній план у Vue.js. Яких ще не використовував, але дивлячись на файли проекту, вони виглядатимуть набагато брудніше і, ймовірно, забезпечують багато схильних до зіткнення імен.


0

У великих проектах весь код не повинен знаходитися в одному файлі. Натомість ви можете сегментувати чи розділяти більші коди на окремий файл, здебільшого на основі функціональності. Як цегли, що утворюють стіну.

Сподіваюся, що це допомогло. Оскільки це теоретичне запитання, не розміщуючи кодів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.