이것저것

(1) Pycharm에서 Flask 사용하기 본문

Python

(1) Pycharm에서 Flask 사용하기

곰태태 2023. 11. 22. 16:08
반응형
SMALL

우선 pycharm에 anaconda 가상환경을 만드는 것부터 시작했다.

https://wikidocs.net/80305

 

0장 들어가기 전에

점프 투 플라스크는 함께 만들어가는 온라인 책이다. 여러분의 피드백으로 점프 투 플라스크는 성장해가고 있다. 책을 씀에 있어서 가장 두려운 것은 잘못된 정보의 전달이다. …

wikidocs.net

해당 글을 참고해서 작업했다.

이렇게 anaconda로 DMS라는 가상환경을 만들어줬다.

그리고 C:/dev/Python/DMS라는 폴더도 만들어줬다.

가장먼저 해야할것은 pip를 최신화 하면서 설치한다.

python -m pip install --upgrade pip
pip install flask

터미널에 pip를 설치하고 업데이트하고

그다음에 flask도 설치한다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_pybo():
    return 'Hello, Pybo!'

먼저 pybo.py라는 파일을 만든뒤

flask의 기본적인 코드를 작성해준다.

원래는 pybo.py 대신에 app.py가 기본적인 폴더이고  app.py라고 아래처럼 작성하면

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, Pybo!'

이렇게 작성하고 터미널에 run flask라고 작성하면 실행이될것이다.

대신에 여기서는 pybo.py로 바꿔주었기때문에 실행환경을 조금 바꿔줘야한다.

 

나는 프로젝트 명과 가상환경명을 dms로 설정했기때문에 run_dms.cmb라는 파일을 만들어서 디렉토리에 넣어줬다

(C:/dev/Python/DMS 안에 생성)

@echo off
cd c:/dev/Python/DMS
set FLASK_APP=pybo
set FLASK_DEBUG=true
call C:\Users\KOSA\anaconda3\envs\DMS\Lib\venv\scripts\nt\activate
flask run

FLASK_APP=pybo는 app.py 대신 pybo.py를 사용하겠다는것이다.

DEBUG는 오류가 발생했을때 디버깅 메세지를 브라우저에 출력해주겠다는 것이다.

그리고 call 부분은 가상환경이 설치된 폴더를 찾아서 activate.bat 파일을 찾아주면된다.

이렇게 파일을 만들고 터미널 창에

run_dms라고 작성하면 페이지를 열어서 아래와 같이 뜨는 것을 확인 할 수 있다.


애플리케이션 팩토리를 사용해서 app = Flask(__name__)를 전역으로 사용하였을때 발생하는 오류를 없애주자

먼저 pybo라는 디렉토리를 생성한다음에 pybo.py를 넣어주자

그리고 pybo.py 파일의 이름을 __init__.py로 변경해주자

from flask import Flask

# create_app함수가 app 객체를 생성해 반환하도록 하는 이유는
# app=Flask(__name__)을 전역으로 사용하게되면 오류가 발생하기 때문(순환 참조 오류)
# create_app이 '애플리케이션 팩토리'이다.
# create_app 대신 다른 이름을 사용하면 정상작동하지 않는다.
def create_app():
    app = Flask(__name__)

    @app.route('/')
    def hello_pybo():
        return "hello flask!"

    return app

애플리케이션 팩토리를 사용하는 자세한 내용은 플라스크 공식 홈페이지에 나와있다고한다...


블루프린트를 사용해서 라우팅 함수를 체계적으로 관리하도록하자

블루프린트 작업 : Flask에서 URL과 함수의 매핑을 관리하기 위해 사용하는 도구이다.

__init__.py에 라우팅함수를 계속 쓰게되면 너무 길어지고 지져분해지게된다.

그래서 views라는 디렉토리에  main_views.py를 만들어서 관리를 하자

from flask import Flask

# create_app함수가 app 객체를 생성해 반환하도록 하는 이유는
# app=Flask(__name__)을 전역으로 사용하게되면 오류가 발생하기 때문(순환 참조 오류)
# create_app이 '애플리케이션 팩토리'이다.
# create_app 대신 다른 이름을 사용하면 정상작동하지 않는다.
def create_app():
    app = Flask(__name__)

    # 블루프린트 작업 : Flask에서 URL과 함수의 매핑을 관리하기 위해 사용하는 도구이다.
    # 블루프린트를 이용하면 라우팅 함수를 체계적으로 관리할 수 있다.
    from .views import main_views
    app.register_blueprint(main_views.bp)

    # @app.route('/')
    # def hello_pybo():
    #     return "hello flask!"

    return app

먼저 __init__.py 파일을 수정하자

.views에서 main_views를 불러오게한다.

 

from flask import Blueprint

bp = Blueprint('main', __name__, url_prefix='/')

# 이 작업을 통해서 라우팅 함수는 main_views 파일에 작업하면된다.

@bp.route('/hello')
def hello_pybo():
    return 'Hello, Pybo!'

@bp.route('/')
def index():
    return 'Pybo index'

그리고 main_views.py를 살펴보자

처음 pybo.py와 거의 다를것은 없다.

대신에 Blueprint를 사용했고 run_dms로 실행을 하면 root 페이지와 뒤에 /hello 페이지에 출력되는 값이 달라진다.

 

반응형
LIST
Comments