Czym dokładnie są schematy kolb?

180

I już odczytać z oficjalnej dokumentacji Flask na plany, a nawet jeden lub dwa blogach na temat korzystania z nich.

Użyłem ich nawet w mojej aplikacji internetowej, ale nie do końca rozumiem, czym one są ani jak pasują do mojej aplikacji jako całości. Pod jakim względem jest podobny do wystąpienia mojej aplikacji, ale nie do końca? Dokumentacja jest obszerna, ale szukam wyjaśnień dla laika lub pouczającej analogii, która by to dla mnie rozpaliła. Byłem wystarczająco zdumiony, gdy kolega poprosił mnie o wyjaśnienie im projektu Flask, o który zdecydowałem się poprosić tutaj.

JoshieSimmons
źródło

Odpowiedzi:

287

Blueprint to szablon do generowania „sekcji” aplikacji internetowej. Możesz myśleć o tym jak o pleśni:

Forma do medalionu ze świeżo wyjętym złotym medalionem

Możesz wziąć schemat i zastosować go do swojej aplikacji w kilku miejscach. Za każdym razem, gdy go zastosujesz, projekt stworzy nową wersję swojej struktury w tynku twojej aplikacji.

# 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)

To prosta forma do pracy z drzewami - mówi, że każda aplikacja zajmująca się drzewami powinna zapewniać dostęp do jego liści, korzeni i słojów (według roku). Sam w sobie jest pustą skorupą - nie może kierować, nie może odpowiedzieć, dopóki nie zostanie wyciśnięty na aplikacji:

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")

Po utworzeniu można go „odcisnąć” na aplikacji za pomocą register_blueprintfunkcji - to „odciska” formę projektu na aplikacji w miejscach określonych przez url_prefix.

Sean Vieira
źródło
5
Oto fajny artykuł na temat struktury aplikacji przy użyciu planów. exploreflask.com/en/latest/blueprints.html
Devasish
5
Nadal jestem zdezorientowany. Czy to oznacza oak/leavesi fir\leavesbędzie wskazywać ten sam kod? Ponadto, jaki jest cel ciągu znaków moldwBlueprint("mold", __name__)
Codevalley,
8
Tak, oba oak/leavesi fir/leavesbędą obsługiwane przez def leaves. "mold"to nazwa planu i służy do ujednoznacznienia w odniesieniu do tras (np. someBlueprint.routeNamevs. anotherBlueprint.routeName).
Sean Vieira 08
2
Jak mogę uzyskać dostęp url_prefixdo funkcji? Powiedz, żeby sprawdzić, czy to dąb czy jodła? tree_mold.url_prefixdaje miNone
Mellkor
3
@Mellkor - po prostu użyj url_for('.relative_route_name')(zwróć uwagę na wiodącą kropkę). Na przykład url_for('.roots')automatycznie zapewni prawidłowy zakres adresu URL w każdym z zamontowanych punktów.
Sean Vieira,
6

Jak wskazał w komentarzu @Devasish , ten artykuł zawiera dobrą odpowiedź:

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

Cytując z artykułu:

Przykładem może być Facebook. Jeśli Facebook używał Flaska, może mieć plany dla stron statycznych (tj. Wylogowanej strony domowej, rejestracji, informacji itp.), Pulpitu nawigacyjnego (tj. Kanału informacyjnego), profili (/ robert / about i / robert / photos), ustawienia (/ settings / security i / settings / privacy) i wiele innych. Wszystkie te komponenty mają wspólny układ i style, ale każdy ma również swój własny układ

To bardzo dobra interpretacja, zwłaszcza fragment „czy Facebook użył Flaska”. Daje nam konkretną sytuację do wizualizacji, jak faktycznie działa Blueprint.

Tran Cuong
źródło
3

Ja też po prostu natknąłem się na to i po przeczytaniu kilku źródeł dokumentacji byłem zdezorientowany. Na początku myślałem, że jest to styl implementacji C # / Java, w którym definiujesz pewne rzeczy, ale nie musisz się o to martwić, definiując je aż do później. Jednak natknąłem się na tę stronę, która przedstawia ją w bardzo laickich terminach (i dość zabawnych wydarzeniach dnia dzisiejszego). https://hackersandslackers.com/flask-blueprints/

Zasadniczo jedną korzyścią, o której wspomina się w linku i która zapewnia mi jasny obraz jej użycia w świecie rzeczywistym, jest to, że mogę efektywnie logicznie organizować / dzielić aplikację na kilka części, które muszą zajmować się tylko własnymi sprawami. Zapewnia więc zaprojektowaną hermetyzację.

Edycja: Obecnie używam go do segmentowania kodu moich aplikacji internetowych. To była również dobra decyzja, ponieważ odkryłem, że główny projektant chce zrobić frontend w Vue.js. Którego jeszcze nie użyłem, ale patrząc na pliki projektu, wyglądałoby to na znacznie bardziej niechlujne i prawdopodobnie zapewniłoby wiele podatnych na kolizje nazw.

LFMekz
źródło
0

W przypadku większych projektów cały kod nie powinien znajdować się w tym samym pliku. Zamiast tego możesz segmentować lub dzielić większe kody w osobny plik, głównie na podstawie funkcjonalności. Jak cegły tworzące ścianę.

Mam nadzieję, że to pomogło. Ponieważ jest to pytanie teoretyczne, nie wysyłaj żadnych kodów.

Henshal B.
źródło