flask app flask project layout with blueprint bootstrap
이 튜토리얼에서는 Flask 프로젝트에서 Flask 앱, Flask Blueprint 및 Flask Bootstrap을 사용하는 방법을 설명합니다.
이 주제에서는 Flask 블루 프린트에 대한 이해를 쌓기 위해 Flask-Appbuilder의 아키 타입에서 조금 멀어 질 것입니다. Flask, Flask 템플릿 및보기, MongoDB, SQLite 및 MySQL과 같은 데이터베이스가있는 Flask에 대한 자습서를 읽어보세요. 우리는 flaskTutorialApp이라는 예제 프로젝트를 사용하고 있습니다.
그러나 flask fab create-app 명령을 사용하여 처음부터 프로젝트를 만들 수도 있습니다. 이 명령은 사용자가 지정한 애플리케이션 이름을 기반으로 애플리케이션 디렉토리와 함께 Flask 프로젝트에 필요한 스캐 폴딩을 만듭니다.
이 튜토리얼에서는 Flask 앱, Flask Blueprint 및 Flask Bootstrap에 대해 설명합니다. 우리는 처음에 Flask-Appbuilder에서 제공하는 기존 스캐 폴딩으로 Flask 앱을 개발합니다. 그런 다음 hello2라는 Flask Blueprint를 만듭니다. 마지막으로 Flask 앱을 도킹하여 Flask Docker 개념을 설명합니다.
학습 내용 :
Flask 앱
Flask 앱은 Flask 애플리케이션의 또 다른 이름입니다. __init__.py 파일에 작성된 코드를 발견하면 Flask의 인스턴스가 생성되고 변수의 이름이 app으로 지정됩니다. Flask 클래스의 인스턴스는 WSGI 응용 프로그램의 인스턴스 인 Flask 응용 프로그램입니다.
from flask import Flask app = Flask(__name__)
플라스크 청사진
Flask Blueprint를 사용하면 관련 기능을 함께 유지하고 더 나은 개발 사례를 얻을 수 있습니다. Flask Blueprints의 몇 가지 이점은 다음과 같습니다.
- 대규모 애플리케이션의 간편한 구성.
- 동일한 블루 프린트를 여러 번 등록하여 코드의 재사용 성을 높입니다.
- 일련의 작업이 기록되고 청사진을 등록한 후 나중에 재생할 수 있습니다.
플라스크 블루 프린트에 주어진 위의 배경을 가지고, 우리는 앞으로 나아가서 첫 번째 블루 프린트를 디자인 할 수 있습니다. 블루 프린트도 모듈로 생각할 수 있습니다. HelloWorld 청사진을 만들어 보겠습니다.
청사진의 모든 구성 요소, 리소스 및 기능은 Flask 애플리케이션의 다른 소스 코드와 별도로 유지되고 구성됩니다. 이는 Flask Blueprint가보기, 양식, 모델, 정적 파일 및 템플릿을 가질 수 있음을 의미합니다.
동일한 리소스 세트에서 여러 블루 프린트를 생성 할 수 있습니다. 그러나 이는 혼란을 야기 할 수 있으며 좋은 방법이 아닙니다.
Flask Blueprint 파일 및 디렉터리 생성
hello2라는 이름으로 Flask 블루 프린트를 만들어 보겠습니다. 응용 프로그램 디렉터리로 이동 한 후 소스 venv / bin / activate를 사용하여 가상 환경을 활성화 한 후 아래 제공된 스크립트를 사용하여 디렉터리 구조를 만듭니다.
blueprint_name='hello2' mkdir '$blueprint_name' mkdir -p '$blueprint_name/templates/$blueprint_name' touch '$blueprint_name/templates/$blueprint_name/hello.html' mkdir '$blueprint_name/static/' touch '$blueprint_name/__init__.py' touch '$blueprint_name/views.py'
hello2 블루 프린트가 __init__.py에서 임포트 할 뷰를 갖기를 원합니다. Flask 뷰를 렌더링하고 각각 정적 리소스를 제공하기 위해 템플릿 및 정적 디렉터리가있는 Blueprint 용 별도의 디렉터리를 만듭니다.
Flask Blueprint 디렉터리 구조
블루 프린트의 디렉토리 구조는 아래와 같습니다. tree 명령을 사용하여 유사한 출력을 생성합니다.
Create Flask Blueprint View
이제 views.py 안에 간단한 뷰를 정의 해 보겠습니다. hello2 / views.py를 열고 아래 제공된 코드 스 니펫을 입력합니다.
from flask import Blueprint, render_template hello2 = Blueprint( 'hello2', __name__, template_folder='templates', static_folder='static' ) @hello2.route('/hello2') def hello2_view(): greeting = 'Hello World 2' return render_template('hello2/hello.html', greeting=greeting)
Blueprint 클래스와 render_template 메서드를 가져옵니다. 그런 다음 템플릿 이름과 정적 디렉터리를 제공하여 Blueprint 객체를 만듭니다.
그런 다음 @ hello2.route 데코레이터와 hello2_view라는 이름의 컨트롤러를 사용하여 경로를 정의합니다. 이 컨트롤러는 Python 함수입니다. 이 함수에서는 greeting이라는 변수에 값을 할당 한 다음 render_template 메서드에 전달합니다.
Flask Blueprint 템플릿 생성
이제 hello.html 템플릿을 만들어 보겠습니다. 이전 튜토리얼을 읽고 있었다면 템플릿이 HelloWorld 뷰를 렌더링하기 위해 만든 것과 동일한 이름임을 알아 차렸을 것입니다. 이 hello2 블루 프린트의 경우 이전 템플릿을 확장하여 새 템플릿을 만듭니다.
또한 템플릿에서 인사말을 렌더링하기 위해 render_template을 호출하는 동안 경로 의미 hello2 / hello.html을 사용했습니다. 이 패턴은 동일한 이름의 템플릿 간의 충돌을 방지합니다.
아래 제공된 코드 조각을 사용하여 hello.html을 만들고 hello2 / templates / hello2 / 경로에 저장합니다.
{% extends 'hello.html' %} {% block hello %} {{ greeting }} , from Software Testing Help.
{% endblock %}
이 템플릿은 hello.html과 거의 유사합니다. 그러나 hello.html에서 대부분의 HTML 부분을 상속합니다. {% block hello %} 및 {% endblock %}의 사용에 주목하십시오. hello2 / hello.html에서 hello를 차단하면 hello.html 기본 템플릿의 hello 차단이 재정의됩니다.
이제 hello2 블루 프린트의 __init__.py 파일을 열고 아래에 주어진 코드를 언급하겠습니다.
from app.hello2.views import * # expose all views at the blueprint level
이 문에서는 hello2 블루 프린트의 views.py에서 생성 한 데코 레이팅 된 모든 메서드를 가져옵니다. 필요한 경우 사용 또는 테스트 할 준비가 된 메서드 / 컨트롤러 만 가져올 수 있습니다.
Flask 앱에 Flask Blueprint 등록
이제 Flask 애플리케이션 디렉터리에서 __init__.py를 열고 아래 코드와 같이 hello2 블루 프린트를 등록하겠습니다.
from app.hello2 import hello2 app.register_blueprint(hello2, url_prefix='/hello2')
여기에서도 뷰를 선택적으로 가져오고 사용 또는 테스트 할 준비가 된 뷰만 등록 할 수 있습니다.
프로젝트의 루트 디렉터리에서 python run.py 명령을 사용하여 디버그 모드에서 Flask 앱을 실행하고 http : // localhost : 8080 / hello2로 이동하여 hello2보기가 제대로 작동하는지 확인합니다.
브라우저의 결과는 아래 표시된 예와 유사해야합니다.

Twitter의 부트 스트랩 프레임 워크를 사용하여 hello2 청사진을 더 잘 표현해 보겠습니다. 또한 다음 섹션에서는 Flask 블루 프린트의 동작을 변경하는 선택적 매개 변수에 대해 자세히 알아 봅니다. Flask Bootstrap이라는 Flask Blueprint의 예를 통해 살펴 보겠습니다.
Flask Blueprint를 사용한 모듈 식 Flask 애플리케이션 예제
hello2 Flask Blueprint에 대한 학습을 기반으로 Flask에서 모듈 식 애플리케이션을 만드는 방법을 이해하기 위해 몇 가지 Blueprint를 추가해 보겠습니다.
방문자에게 eBook, 튜토리얼 및 코스의 형태로 콘텐츠를 제공하는 웹 애플리케이션이 있다고 가정 해 보겠습니다. 또한 팀 및 홈 페이지에 대한 정보와 관련된 몇 가지 추가 콘텐츠가 있습니다.
기존 애플리케이션에서 이러한 새로운 기능을 수용하려면 views.py에 뷰를 생성하고 애플리케이션 템플릿 디렉토리 아래에 해당 템플릿을 생성해야합니다. 마찬가지로 models.py 및 forms.py에서 모델과 양식을 만들어야합니다.
그러나 모든 애플리케이션 코드를 유지 관리하는 것은 번거롭고 다른 팀 구성원과의 공동 작업이 너무 복잡하여 커밋 충돌이나 복잡한 개발 워크 플로가 발생할 수 있습니다.
현재 이러한 기존 접근 방식에서 애플리케이션 구조는 다음과 같습니다.
jar 파일을 어떻게 실행합니까
이러한 시나리오를 피하기 위해 Flask Blueprint를 사용하여 기능 및 각 콘텐츠에 특정한 모듈을 만들 수 있습니다. 별도의 리소스를 사용하여 몇 가지 Flask Blueprint를 만들어 보겠습니다.
각 Flask 블루 프린트 레이아웃은 아래 표시된 것과 유사합니다.
아래 제공된 스크립트를 사용하여 계획된 Flask Blueprint에 필요한 파일과 디렉터리를 만듭니다. 프로젝트의 루트 디렉토리에서이 스크립트를 실행합니다.
cd app for dir in home courses tutorials ebooks do echo 'generating files for $dir ..' mkdir -p $dir/templates/$dir touch $dir/templates/$dir/$dir.html mkdir $dir/static touch $dir/static/style.css touch $dir/__init__.py touch $dir/views.py touch $dir/models.py touch $dir/forms.py done
먼저 홈 모듈의 기능을 만들어 보겠습니다.
홈 디렉토리에서 views.py를 열고 아래 제공된 코드로 업데이트하십시오.
from flask import render_template, Blueprint home = Blueprint('home', __name__, template_folder='templates', static_folder='static') @home.route('/') def index(): return render_template('home/home.html')
이 파일에서는 Flask의 블루 프린트 클래스를 임포트하고 별도의 템플릿과 정적 폴더가있는 필수 매개 변수로 인스턴스화했습니다. 그런 다음 @home 장식을 사용하여 index라는 뷰 메서드의 관련 경로를 선언합니다.
이제 앱의 템플릿 디렉토리 아래에 base.html Jinja2 템플릿을 만듭니다. 아래 제공된 코드를 사용하여 파일을 업데이트하십시오.
from Software Testing Help.
Learn More >> {% endblock %}
우리는 Bootstrap의 base.html에서 확장했습니다. 클래스 컨테이너와 영웅 유닛의 div 사용에 주목하십시오. 또한 사용자가 더 많은 것을 배울 수있는 버튼을 만들었습니다. 이 HTML을 수정하고 Twitter의 Bootstrap 프레임 워크에서 가져온 클래스를 사용했습니다.
이제 http : // localhost : 8080 / hello2.html의 브라우저에서 페이지를 새로 고쳐 hello2.html의 변경된 모습을 확인합니다.
Changed Hello2의보기는 아래 표시된 것과 유사합니다.

Flask-Bootstrap의 사용은 재정의 또는 수정에 사용할 수있는 블록에 전적으로 의존합니다. 아래 언급 된 블록을 사용하여 경험을 사용자 지정할 수 있습니다. 가능한 모든 블록의 자세한 목록은 https://pythonhosted.org/Flask-Bootstrap/basic-usage.html에서 볼 수 있습니다.
때로는 블록을 완전히 바꾸지 않고 수정하고 싶을 때 Jinja2의 super () 함수를 사용하여 결과를 얻을 수 있습니다.
hello2 / static 아래에 hello2.css라는 파일을 만들고 hello2 / hello.html에서 단락의 색상 스타일을 지정하는 아래 코드 스 니펫을 배치합니다.
p { color: orange; }
아래에 표시된 코드 조각을 가져 와서 hello2 / hello.html에 배치합니다.
{% block styles } {{ super() }} {% endblock %}
이제 Flask Blueprint hello2의 views.py를 열고 아래와 같이 블루 프린트 문을 수정합니다.
hello2 = Blueprint('hello2', __name__, template_folder='templates', static_folder='static')
Flask Blueprint의 등록 된 URL (예 : http : // localhost : 8080 / hello2)로 다시 이동합니다. 지금까지의 변경으로 인한 결과는 아래와 같습니다.

플라스크 도커
Docker는 애플리케이션 컨테이너화에 도움이됩니다. 가상 머신과 같은 완전한 가상화 환경이 요구되지 않는 방식으로 Flask 애플리케이션에 필요한 환경을 격리합니다.
게다가, 도커 컨테이너는 최소한의 풋 프린트를 가지며 오케스트레이션 플랫폼의 도움으로 관리 및 확장이 더 편안합니다. 오늘날 다른 모든 애플리케이션에도 컨테이너화 된 배포가있을 때 우리도 샘플 애플리케이션을 Docker 컨테이너로 배포하는 방법을 배워야합니다.
Linux 기반 컨테이너는 Windows 및 MAC에서 실행할 수 있습니다. 따라서 Dockerized Flask 앱은 빌드 된 운영 체제에 관계없이 모든 운영 체제에 배포 할 수 있습니다.
이 섹션에서는 Flask 앱을 도킹하는 단계를 설명합니다. 이 프로젝트를 고정화하여 내부에 모든 종속성이 포함 된 컨테이너에 배포 할 수 있도록합니다.
먼저, Docker 설치 당신의 컴퓨터에.
sudo apt-get install docker.io
설치가 완료되면 샘플 프로젝트의 루트 디렉터리로 이동하여 Dockerfile을 만듭니다.
해당 Dockerfile에 아래 주어진 코드를 작성하십시오.
FROM python:3 ADD . /flaskTutorialApp WORKDIR /flaskTutorialApp RUN pip install -r requirements.txt ENTRYPOINT ('python') CMD ('run.py')
아래와 같이 config.py 파일을 업데이트하고 데이터베이스를 SQLite로 변경합니다.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
게다가이 튜토리얼 시리즈에서 SQLite로 작업하는 것이 이번이 처음이라면 flask fab create-admin 명령을 사용하여 관리자를 생성하십시오.
Admin 사용자가 애플리케이션에 로그인 할 수 있는지 확인하십시오.
이제 아래 명령을 사용하여 샘플 애플리케이션의 도커 이미지를 빌드합니다.
sudo docker build --tag flask-tutorial
이 명령은 Docker 허브에서 리소스를 다운로드하므로 시간이 걸립니다. 이 명령이 완료되면 아래 명령을 사용하여 이미지가 나타나는지 확인하십시오.
sudo docker images
이제 최근에 생성 된 Docker 이미지를 실행합니다.
sudo docker run -p 5001:8080 flask-tutorial:latest
콘솔에 개발 서버의 로그 메시지가 표시됩니다.
Docker를 설치하면 이름이 docker0 인 가상 NIC가 생성됩니다. sudo ifconfig 명령을 사용하여 IP 주소를 찾으십시오. Docker의 IP를 받으면 아래 제공된 URL로 이동하여 애플리케이션에 액세스 할 수 있습니다.
http : // : 5001
애플리케이션 개발에 자신이 있으면 다른 사용자가 다운로드하고 사용할 수 있도록 Docker 이미지를 Docker Hub에 배포 할 수 있습니다.
플라스크 블루 프린트 테스트
이제 블루 프린트 hello2를 테스트하기위한 몇 가지 테스트를 만들어 보겠습니다. 클라이언트가 / hello2 엔드 포인트에서 리소스에 대한 Get 요청을 보낼 때 샘플 앱이 올바른 HTTP 코드를 반환하는지 살펴 보겠습니다. 기억 하시나요? / hello2 값을 사용하여 url_prefix를 사용하여 Flask Blueprint hello2를 등록했습니다.
테스트에서 test_blueprint.py라는 파일을 만들고 다음 테스트를 추가합니다.
def test_hello2(client): resp = client.get('/hello2') assert 308 == resp.status_code
HTTP 308은 영구 리디렉션과 관련이 있으며 Flask 앱이 요청을 hello2라는 Blueprint와 관련된 리소스로 리디렉션해야 할 것으로 예상됩니다.
이제 블루 프린트 리소스의 루트 경로를 확인하는 다른 테스트를 추가해 보겠습니다. 값이 있는지 여부를 확인하는 테스트를 추가해 보겠습니다.
from app.hello2 import hello2 def test_rootpath(): assert hello2.root_path is not None
이제이 테스트를 다른 테스트와 함께 실행하여 통과하는지 확인하겠습니다.
모뎀은 어떻게 생겼습니까
pytest -v
아래와 같이 테스트 결과의 유사한 출력을 볼 수 있습니다.

이제 모든 변경 사항을 저장소에 커밋하고 해당 변경 사항을 Github의 원격 저장소에 게시합니다. 코드와 마스터 브랜치의 차이점을 비교하고 충돌이 없으면 pull 요청을 생성합니다.
풀 요청은 Github 워크 플로의 일부인 빌드 작업을 호출합니다. tutorial-4의 pull 요청에 대한 모든 검사가 실패하지 않으면이 분기를 마스터와 안전하게 병합 할 수 있습니다.

자주 묻는 질문
Q # 1) Flask BluePrint 란 무엇입니까?
대답: Flask Blueprint는 Flask 애플리케이션을 더 작고 재사용 가능한 모듈로 구성하는 방법입니다. Flask Blueprint에는보기, 템플릿, 정적 파일, 모델, 양식 등과 같은 별도의 리소스가 있습니다. Flask Blueprint 접근 방식을 사용하여 쉽게 유지 관리하고 확장 가능한 Flask 애플리케이션을 만듭니다.
Q # 2) Flask Blueprint를 어떻게 사용합니까?
대답: Flask Blueprint를 사용하려면 app.register_blueprint 메서드를 사용하여이를 가져 와서 Flask Application 객체에 등록해야합니다. url_prifix 파라미터에 값을 전달하여 Flask 블루 프린트의 경로에 경로를 추가 할 수 있습니다.
결론
이 자습서에서는 Flask 앱에 대한 정적 리소스를 만드는 개념과 함께 Flask Blueprint를 설명했습니다. Flask-Bootstrap이라는 Flask 플러그인을 사용하여 Blueprint 리소스에 대한 생각과 함께 Flask Blueprint 사용의 이점을 탐색했습니다.
또한 샘플 Flask 자습서 애플리케이션의 Docker 이미지를 만드는 개념도 다루었습니다. 또한 Flask Blueprint를 검증하기위한 두 가지 테스트도 만들었습니다.
다음 튜토리얼에서는 Flask를 사용하여 웹 애플리케이션에서 기능을 빌드하는 동안 일반적으로 따르는 패턴을 다룰 것입니다.
추천 도서
- 예제가 포함 된 Flask API 자습서 | API로 Flask 확장
- 답변이있는 인기있는 Python Flask 인터뷰 질문 31 가지
- Django 대 Flask 대 노드 : 선택할 프레임 워크
- 웹 애플리케이션을위한 플라스크 디자인 패턴 및 모범 사례
- (Top 10) 2021 년 최고의 앱 개발 소프트웨어 플랫폼
- Top 51 Bootstrap 인터뷰 질문 및 답변