자습서 #5: 웹 애플리케이션을 위한 Flask 디자인 패턴 및 모범 사례
자습서 #6: 예제가 포함된 Flask API 자습서
이 Python Flask 입문 튜토리얼에서는 Flask가 무엇인지, Python 설치, Virtualenv, Flask Hello World 예제 코드 예제, 디버깅 및 테스트에 대한 섹션을 설명합니다.
웹사이트 개발은 기술보다 예술에 가깝습니다. 진정한 성공을 위해 필요한 것을 만들기 위해서는 인내, 용기, 헌신과 함께 인내와 근면이 필요합니다. 요즘은 학습자들이 하루빨리 속도를 내는 것이 필수입니다.
Python 3을 사용하여 학생들이 속도를 높이고 단순하면서도 복잡한 웹 프로그래밍을 구현할 수 있도록 Python Flask 튜토리얼을 만들었습니다. .
이 Python Flask 자습서는 Flask 초보자 자습서에 가깝습니다. Python, Virtualenv 및 기타 필수 패키지 설치. 이 자습서 시리즈에서는 필요한 다른 Flask 플러그인과 함께 Flask도 설치합니다. 코드 디버깅, 테스트 및 Git 작업을 사용한 지속적인 통합에 대한 섹션도 포함되어 있습니다.
이 Flask 시리즈의 자습서 목록
자습서 #1: Python Flask 자습서 – 초보자를 위한 Flask 소개
자습서 #2: 예제를 사용한 Flask 템플릿, 양식, 보기 및 리디렉션
자습서 #3: Flask 데이터베이스 처리 – 데이터베이스
에서 Flask를 사용하는 방법 자습서 #4: Blueprint &전제 조건에 언급된 단계.
1단계: Python 설치
Python 3을 설치했는지 확인합니다. 그렇지 않은 경우 여기에서 Python 3를 다운로드하고 운영 체제에 따라 설치하세요.
2단계: Python 가상 환경 만들기
다음을 사용하여 가상 환경 만들기 아래 명령입니다.
python3 -m venv venv
아래 명령을 사용하여 Python 가상 환경을 활성화합니다.
source venv/bin/activate
아래에 가상 환경의 활성화 및 비활성화 예를 제공했습니다.
이 자습서의 모든 후속 명령은 활성화된 가상 환경에서 실행되어야 합니다. 가상 환경 내에서 휠을 구축할 수 있도록 휠 패키지를 설치합니다.
pip install wheel
3단계: Flask 다운로드 및 설치
Flask 다운로드 단계를 수행해야 하며 아래 언급된 단계를 사용하여 Flask를 설치합니다.
이제 Flask를 설치합니다.
pip install flask
우리 중 일부는 최신 소스 코드 변경 사항과 함께 작업하는 것을 좋아합니다. 아래 주어진 명령을 사용하여 Flask 소스에 대한 최신 변경 사항으로 설치할 수 있습니다.
임시 디렉토리를 만듭니다.
mkdir tmp
이제 Github 저장소에서 Flask를 설치합니다. 아래 명령이 작동하려면 인터넷에 연결된 상태를 유지해야 합니다.
pip3 install -e [email protected]:pallets/flask.git#egg=flask
성공적인 설치를 확인하려면 콘솔 출력을 확인하십시오. 이제 Flask 명령에 액세스할 수 있는지 확인합니다.
flask --help
Flask가 없는 경우 몇 가지 예외가 표시될 수 있습니다.애플리케이션. 그러나 Flask 앱을 만들지 않았으므로 무시하십시오. 우리 앱은 Werkzeug 웹 프레임워크와 Jinja 템플릿 엔진의 래퍼인 Flask의 인스턴스입니다.
Werkzeug
Werkzeug는 WSGI 툴킷입니다. WSGI는 Python 프로그래밍 언어로 작성된 웹 애플리케이션에 웹 요청 을 전달하기 위한 웹 서버의 호출 규칙일 뿐입니다.
Jinja
템플릿은 웹 개발자의 필수 기술. Jinja는 완전한 기능을 갖춘 인기 있는 Python용 템플릿 엔진입니다. 상당히 표현력이 풍부한 언어이며 템플릿 작성자에게 강력한 도구 집합을 제공합니다.
4단계: MongoDB 설치
아래 언급된 단계에 따라 MongoDB를 설치합니다. Debian 기반 Linux에 설치하는 단계를 설명했습니다. 다른 운영 체제를 사용 중인 경우 링크에 액세스하여 원하는 운영 체제에 따라 설치하세요.
MongoDB 공개 GPG 키를 가져오기 위해 gnupg를 설치하세요.
sudo apt-get install gnupg
이제 아래 명령을 사용하여 키를 가져옵니다.
wget -qO - //www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
Linux 배포판에 따라 소스 목록 파일을 만듭니다. Debian에 따라 소스 목록을 추가했습니다.
echo "deb //repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
업데이트 명령 실행
sudo apt-get update
이제 아래 명령을 사용하여 MongoDB를 설치합니다.
sudo apt-get install -y mongodb-org
설치가 완료되면 아래 명령어로 MongoDB를 시작한다.
sudo systemctl start mongod
명령어로 MongoDB의 상태를 확인한다.아래.
sudo systemctl status mongod
이제 아래 표시된 명령을 실행하여 시스템 재부팅 시 mongod가 자동으로 시작되는지 확인합니다.
sudo systemctl enable mongod
이제 할 수 있는지 확인합니다. mongo 클라이언트를 사용하여 MongoDB 서버에 연결합니다.
mongo
mongo 셸에서 help 및 show dbs 명령을 사용해 봅니다.
Flask 앱 만들기
아래 명령을 사용하여 flask-appbuilder 및 mongoengine을 설치합니다.
pip install flask-appbuilder pip install mongoengine pip install flask_mongoengine
아래 코드 스니펫에 주석으로 표시된 값으로 스켈레톤 앱을 만듭니다.
flask fab create-app # Give the following values in the command line questionnaire # Application Name: flaskTutorialApp # EngineType : MongoEngine
아래와 유사한 출력이 표시됩니다.
Your new app name: exampleApp Your engine type, SQLAlchemy or MongoEngine (SQLAlchemy, MongoEngine) [SQLAlchemy]: MongoEngine Downloaded the skeleton app, good coding!
프로젝트와 앱의 레이아웃을 살펴보세요. 아래에 트리 명령의 출력을 표시했습니다.
Flask 구성 파일을 살펴보겠습니다. 마지막 명령의 결과로 생성된 기본 구성입니다. 아래와 같이 Cyborg 테마의 주석을 해제합니다.
# Theme configuration for Cybord=g # these themes are located on static/appbuilder/css/themes # We can create our own and easily use them by placing them on the same dir structure to override #APP_THEME = "bootstrap-theme.css" # default bootstrap #APP_THEME = "cerulean.css" # cerulean #APP_THEME = "amelia.css" # amelia theme #APP_THEME = "cosmo.css" # cosmo theme APP_THEME = "cyborg.css" # cyborg theme #APP_THEME = "flatly.css" # flatly theme
스켈레톤 앱을 실행하려면 터미널에서 아래 명령을 사용하세요.
flask run
Flask Hello World
flaskTutorialApp에서 첫 번째 프로그램을 만들려면 앱 디렉토리에서 views.py 파일을 열고 다음 코드를 추가합니다. 파일에 제공된 import 문을 찾으십시오. 아직 존재하지 않는 경우 이 문장을 추가하십시오.
from flask_appbuilder import BaseView, expose from app import appbuilder class HelloWorld(BaseView): """ This first view of the tutorial """ route_base = "/hello" @expose("/") def hello(self): return "Hello, World! from Software Testing Help" # at the end of the file appbuilder.add_view_no_menu(HelloWorld())
위의 소스 코드를 추가한 후 파일을 저장하십시오. 프로젝트의 루트 디렉터리로 이동하고 아래 명령을 사용하여 Flask의 개발 서버를 실행합니다.
flask run
이제 //localhost:5000/hello/로 이동하여 출력을 확인합니다.브라우저.
디버깅
현재 개발 서버가 디버그 모드로 실행되고 있지 않습니다. 디버깅 모드가 없으면 Flask 애플리케이션의 소스 코드에서 오류를 찾기가 어렵습니다.
Flask의 디버그 모드 결과는 다음과 같습니다.
- 디버그 모드는 자동 리로더를 활성화합니다. 즉, 애플리케이션의 소스 코드를 변경한 후 개발 서버를 다시 시작할 필요가 없습니다.
- 디버그 모드는 Python 디버거를 활성화합니다. 예외 중에 변수 값을 검사할 수 있습니다.
- 디버그 모드는 Flask 애플리케이션 디버깅을 활성화합니다. 디버깅 세션에서 다양한 변수의 값을 확인할 수 있습니다.
개발 서버가 이미 실행 중인 경우 중지하십시오. CTRL + C 또는 키보드 인터럽트를 사용하여 동일한 작업을 수행할 수 있습니다.
다음 코드를 사용하여 디버그 모드를 활성화하고 개발 서버를 임시로 실행합니다.
FLASK_ENV=development flask run
검색 콘솔에서 Debugger PIN을 확인하고 기록해 둡니다.
이제 다음 코드 조각을 사용하여 위에서 작성한 HelloWorld 보기를 변경해 보겠습니다. 사용자 지정 예외를 도입했습니다.
@expose("/") def hello(self): raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
//localhost:5000/hello/로 이동하면 응용 프로그램에서 예외가 발생한 것을 볼 수 있습니다. 브라우저는 아래와 같이 스택 추적을 표시합니다.
![](/wp-content/uploads/guides/iae5sr2a76-3.png)
또한 개발 서버가 실행 중인 콘솔을 살펴봅니다. 이번에는views.py의 변경 사항이 자동으로 감지되고 디버그 서버가 자체적으로 다시 시작됩니다. 이제 수동으로 다시 시작할 필요가 없습니다.
콘솔에는 아래와 같은 줄이 표시됩니다. 나중을 위해 디버그 PIN을 기록해 두어야 합니다.
* Detected change in '/work/sth/flaskTutorialApp/app/views.py', reloading 2020-06-02 14:59:49,354:INFO:werkzeug: * Detected change in '/work/sth/flaskTutorialApp/app/views.py', reloading * Restarting with stat 2020-06-02 14:59:49,592:INFO:werkzeug: * Restarting with stat * Debugger is active! * Debugger PIN: 150-849-897
이제 브라우저에서 스택 추적을 확인하고 마지막 줄로 이동합니다. 클릭하여 보기를 확장하고 CLI 아이콘을 클릭하여 대화형 모드에서 셸을 엽니다.
![](/wp-content/uploads/guides/iae5sr2a76-4.png)
열면 브라우저에 디버그 PIN에 대한 프롬프트가 표시됩니다. 디버그 PIN을 입력하고 확인을 클릭합니다.
![](/wp-content/uploads/guides/iae5sr2a76-5.png)
디버그 PIN을 입력한 후 계속 진행하면 대화형 셸에 액세스할 수 있습니다.
브라우저 내에서 셸에 액세스하고 변수 값을 검사하여 Exception의 원인을 찾고 더 나은 방법으로 오류를 처리할 수 있습니다. 아래 이미지에 표시된 예제 중 하나를 살펴보십시오.
![](/wp-content/uploads/guides/iae5sr2a76-6.png)
이제 아래와 같이 view.py에서 코드를 변경합니다. 예외가 발생한 줄에 주석을 달았습니다.
@expose("/") def hello(self): # raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Flask 응용 프로그램 테스트
이제 개발 중인 Flask 응용 프로그램에 대한 첫 번째 테스트를 작성해 보겠습니다. 먼저 PyTest를 설치합니다. PyTest는 테스트 프레임워크입니다. 더 나은 코드를 작성하는 데 도움이 됩니다.
또한 애플리케이션을 개발하면서 단위 테스트를 작성할 수 있기 때문에 TDD 접근 방식을 따를 수 있습니다. TDD는 테스트 주도 개발을 의미합니다. 다음 튜토리얼에서이 시리즈에서는 항상 테스트를 먼저 작성하고 뷰 또는 모델을 개발합니다.
PyTest 설치
pip install pytest
이제 앱 디렉토리 내부에 테스트라는 디렉토리를 만들고 그 안에 test_hello.py라는 파일을 만듭니다. 뷰를 테스트하기 위해 첫 번째 단위 테스트를 작성해 보겠습니다.
다음 코드 스니펫을 복사하여 test_hello.py에 붙여넣습니다.
#!/usr/bin/env python from app import appbuilder import pytest @pytest.fixture def client(): """ A pytest fixture for test client """ appbuilder.app.config["TESTING"] = True with appbuilder.app.test_client() as client: yield client def test_hello(client): """ A test method to test view hello """ resp = client.get("/hello", follow_redirects=True) assert 200 == resp.status_code
아래 pytest 명령을 사용하여 실행합니다. 테스트. PyTest는 자동으로 테스트를 수집하고 표준 출력에 결과를 표시합니다.
![](/wp-content/uploads/guides/iae5sr2a76-7.png)
GitHub 워크플로 만들기
Git Actions를 사용하여 샘플 애플리케이션에 대한 CI/CD 워크플로를 만듭니다. 프로젝트에 대해 아래 언급된 단계를 따르십시오.
1단계: GitHub의 저장소 페이지로 이동합니다. Git 작업을 클릭합니다.
![](/wp-content/uploads/guides/iae5sr2a76-8.png)
2단계: 페이지에서 아래로 스크롤하여 Python 패키지에 대한 기존 워크플로 템플릿을 찾습니다.
![](/wp-content/uploads/guides/iae5sr2a76-9.png)
3단계: Python 패키지 워크플로를 설정합니다.
![](/wp-content/uploads/guides/iae5sr2a76-10.png)
4단계: python-package.yml 워크플로 구성이 열리면 지정된 yaml 추가를 기반으로 업데이트합니다. 태그 값.
name: flaskTutorialApp jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: [3.7, 3.8] mongodb-version: [4.2] steps: - name: Start MongoDB uses: supercharge/[email protected] with: mongodb-version: ${{ matrix.mongodb-version }} # other values
최신 Ubuntu Linux 배포판에서 Flask 애플리케이션을 테스트하려고 합니다. OS 외에도 Python 3.7 및 Python 3.8만 사용하여 테스트를 실행하려고 합니다.
5단계: 업데이트된 값으로 python-package.yml을 커밋합니다.
![](/wp-content/uploads/guides/iae5sr2a76-11.png)
6단계: 이전 페이지의 커밋은 GitActions로 이동합니다.작업.
![](/wp-content/uploads/guides/iae5sr2a76-12.png)
7단계: [선택 사항]
샘플 튜토리얼 앱의 Github 작업 페이지에서 배지를 만들고 배치할 수 있습니다. 빌드 상태를 표시하기 위해 README.md 파일에 있습니다.
이제 변경 사항이 마스터 브랜치에 커밋될 때마다 python-package.yml에 작성된 Git 워크플로를 따라 Git 작업에서 실행됩니다. .
결론
이 자습서에서는 Python 기반 웹 개발 프레임워크인 Flask를 사용하여 개발된 웹 애플리케이션을 위한 전제 조건부터 CI/CD 워크플로 설정에 이르기까지 모든 기본 개념을 다뤘습니다.
이 튜토리얼은 Python 설치, 다운로드 & Python을 사용하여 웹 개발을 시작하기 위해 Flask 설치, Flask-Appbuilder로 작업, PyTest로 테스트 등. 웹 개발 커뮤니티는 일반적으로 Flask를 Django라는 다른 인기 있는 Python 웹 개발 프레임워크와 비교합니다.
이러한 차이점을 설명하고 이 시리즈의 자습서 중 하나에서 이러한 프레임워크를 비교할 것입니다.