플라스크 청사진이란 정확히 무엇입니까?


180

나는 읽을 공식 플라스크 문서 청사진에, 심지어 하나 개 또는 두 개 를 사용하는 방법에 대한 블로그 게시물을.

나는 심지어 내 웹 앱에서 그것들을 사용했지만, 그것들이 무엇인지 또는 그들이 내 앱에 어떻게 전체적으로 적용되는지 완전히 이해하지 못합니다. 내 앱의 인스턴스와 어떻게 유사합니까? 문서는 포괄적이지만 나는 평신도 설명이나 그것을 밝히기 위해 깨달은 비유를 찾습니다. 동료가 여기에 묻기로 선택한 플라스크 청사진을 설명해달라고 요청했을 때 나는 당황했다.

답변:


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

5
여전히 혼란 스러워요. 이것이 동일한 코드 를 의미 oak/leaves하고 의미합니까 fir\leaves? 또한, 캐릭터 라인의 목적은 무엇인가 moldBlueprint("mold", __name__)
Codevalley은

8
예, oak/leaves및에 fir/leaves의해 처리됩니다 def leaves. "mold"는 청사진의 이름이며 경로를 참조 할 때 명확성을 위해 사용됩니다 (예 : someBlueprint.routeNamevs. anotherBlueprint.routeName).
Sean Vieira

2
url_prefix함수에서에 액세스하려면 어떻게 해야합니까? 오크인지 전나무인지 확인 하시겠습니까? tree_mold.url_prefix제공None
Mellkor

3
@Mellkor-간단히 사용하십시오 url_for('.relative_route_name')(선행 점 참고). 예를 들어, url_for('.roots')마운트 된 각 지점에서 올바른 범위의 URL을 자동으로 제공합니다.
Sean Vieira

6

@Devasish의견 에서 지적 했듯이이 기사는 좋은 대답을 제공합니다.

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

기사에서 인용 :

이에 대한 예로는 Facebook이 있습니다. Facebook에서 Flask를 사용한 경우 정적 페이지 (예 : 로그 아웃 한 홈, 등록, 정보 등), 대시 보드 (예 : 뉴스 피드), 프로필 (/ robert / about 및 / robert / photos)에 대한 청사진이있을 수 있습니다. 설정 (/ settings / security 및 / settings / privacy) 등이 있습니다. 이러한 구성 요소는 모두 일반적인 레이아웃과 스타일을 공유하지만 각각 고유 한 레이아웃도 있습니다

이것은 "Facebook에서 Flask를 사용한 경우"부분에 대한 매우 좋은 해석입니다. 블루 프린트가 실제로 어떻게 작동하는지 시각화 할 수있는 구체적인 상황을 제공합니다.


3

저도이 문제를 우연히 발견했으며 몇 가지 문서 소스를 읽은 후 혼란 스러웠습니다. 처음에는 C # / Java 구현 스타일과 비슷하다고 생각했지만 몇 가지 물건을 정의하지만 나중에 정의 할 때 걱정할 필요는 없습니다. 그러나 나는이 페이지를 우연히 보았고 매우 평신도 (그리고 아주 재미있는 현재의 사건) 용어로 만들었습니다. https://hackersandslackers.com/flask-blueprints/

본질적으로 링크에 언급되어 있으며 실제 사용에 대한 명확한 아이디어를 제공하는 이점 중 하나 는 앱을 자체 업무에만 관심이있는 여러 부분 으로 논리적으로 구성 / 나눌 수 있다는 것 입니다. 따라서 설계된 캡슐화를 제공합니다.

편집 : 현재 webapps 코드를 분류하는 데 사용하고 있습니다. 수석 디자이너가 Vue.js에서 프론트 엔드를 만들고 싶어한다는 것을 알았 기 때문에 좋은 결정이었습니다. 내가 아직 사용하지 않았지만 프로젝트 파일을 보면 훨씬 더 지저분 해 보일 수 있으며 많은 이름 충돌이 발생하기 쉽습니다.


0

더 큰 프로젝트의 경우 모든 코드가 동일한 파일에 있지 않아야합니다. 대신 대부분 기능에 따라 더 큰 코드를 별도의 파일로 분할하거나 분할 할 수 있습니다. 벽을 형성하는 벽돌처럼.

이것이 도움이 되었기를 바랍니다. 이것은 이론적 인 질문이므로 코드를 게시하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.