Flask

Flask 이용한 웹사이트 제작기 (2) - 폴더 구조/ hello world 띄우기

sseram 2023. 7. 15. 00:48
반응형

2023.07.10 - [Flask] - Flask 이용한 웹사이트 제작기 (1) - 설치

 

Flask 이용한 웹사이트 제작기 (1) - 설치

유튭 쇼츠만 죽어라고 내리고 있다보니, 내가 지금 뭘 하고있나.. 라는 자괴감이 들더라. 멍때리면서 손가락 운동만 해서 뭐하나... 생산적인 일 뭐라도 하나 해 보자는 생각이 들었다. 그러면 무

donot-simsim.tistory.com

 

에서 이어지는 글.

 

 

https://flask.palletsprojects.com/en/2.3.x/tutorial/

부분을 진행한다.

 

일단 가상환경 먼저 켜두고 시작하자.

Flask 제대로 깔렸는지 한 번만 더 확인해 주고.

 


- Project Layout

 

맨 처음 Flask와 django를 비교할 때 들었던 이야기가 있다. flask는 가볍고, 작고, 간결한 설계를 가지고 있다는 말이었다. 그리고 그 말을 증명하듯, 튜토리얼 첫 번째 페이지에서 바로 코드로 보여준다.

 

 

단지 이 것만으로도 flask app을 제작할 수 있다고 소개한다.

물론... 아직은 어떻게 실행하는지도 모르니, 아 그렇구나~ 하고 넘어가는 수준이다.

 

당연히 나중 가면 프로젝트가 거대해지고, 거대해짐에 따라 공식 사이트에서 추천하는 폴더 구조가 있다고 한다.

 

 

  • flaskr/, a Python package containing your application code and files.
  • tests/, a directory containing test modules.
  • .venv/, a Python virtual environment where Flask and other dependencies are installed.
  • Installation files telling Python how to install your project.
  • Version control config, such as git. You should make a habit of using some type of version control for all your projects, no matter the size.
  • Any other project files you might add in the future.
/home/user/Projects/flask-tutorial
├── flaskr/
│   ├── __init__.py
│   ├── db.py
│   ├── schema.sql
│   ├── auth.py
│   ├── blog.py
│   ├── templates/
│   │   ├── base.html
│   │   ├── auth/
│   │   │   ├── login.html
│   │   │   └── register.html
│   │   └── blog/
│   │       ├── create.html
│   │       ├── index.html
│   │       └── update.html
│   └── static/
│       └── style.css
├── tests/
│   ├── conftest.py
│   ├── data.sql
│   ├── test_factory.py
│   ├── test_db.py
│   ├── test_auth.py
│   └── test_blog.py
├── .venv/
├── pyproject.toml
└── MANIFEST.in

 

이런 식으로.

 

솔루션 폴더가 하나 있고, 그 밑에 flaskr 이라는 폴더를 하나 만들어 거기에 메인 코드들.

test, env 등등은 솔루션 폴더 바로 밑에 두나 보다.

일단은 이렇게 있구나~ 만 생각하고 넘어가면 될 것 같다.

 

 

그리고

 

.gitignore

.venv/

*.pyc
__pycache__/

instance/

.pytest_cache/
.coverage
htmlcov/

dist/
build/

 

flask 빌드 시 자동으로 생성되는 / git에 들어가지 않아도 되는 폴더, 파일들을 미리 듀토리얼에서 알려준다. gitignore에 미리미리 추가해주자.

 

 

 


- Application Setup

 

 

Flask application은 flask class의 instance라고 한다. 그리고 우리는 바로 이전 예시처럼 global로 flask를 선언하여 바로 사용이 가능하긴 하지만, 만약 그렇게 한다고 하면 프로젝트가 커질수록 점점 관리가 힘들어 질 거라고 한다.

깔끔한 구조 중요하지...

듀토리얼의 위쪽 설명을 적당히 듣고 넘어가고, 바로 밑을 그대로 따라해본다.

 

먼저 위에서 소개한 공식 구조에 맞게 flaskr 디렉토리를 만든다.

 

mkdir flaskr

 

 

 

만든 flaskr 디렉토리 내부에, 듀토리얼을 따라서 __init__.py 를 만들어주자.

 

 

flaskr/__init__.py
import os

from flask import Flask


def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='dev',
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # a simple page that says hello
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    return app

 

 

이 __init__.py 는 두 가지의 일을 한다고 한다.

1. application factory를 포함하고

2. python에게 flaskr이라는 디렉토리가 패키지처럼 다뤄질 거라는 사실을 말해준다.

 

오... 뭔소리지.

 

다행히 밑에 코드에 대한 부가 설명이 있다.

  • app = Flask(__name__, instance_relative_config=True) 이 부분이 위에서 말한 factory인가 보다. name은 현재 python module의 이름을 알려준다.
  • app.config.from_mapping() 에서 app 기본 구성에 대해 몇 가지 설정을 한다. 여기서는 secret key를 dev로 두고 (나중엔 바꿔야겠지만), 기본 database를 sqlite로 설정하였다.
  • app.config.from_pyfile() 은 위와 같은 역할을 한다. 위처럼 직접 지정을 할 수도 잇지만, py file에서 읽어 올 수도 있나보다.
  • os.makedirs()는 flask 자체에서 instance folder를 만들 수 없다 보니, 코드 내부에서 명시해준다고 한다. 그리고 이를 통해, app.instance_path가 존재하는 것을 보증해준다.
  • @app.route()는 간단한 route를 나타낸다고 한다. 위처럼 진행하면 '~~ /hello' url로 들어왔을 때, hello 함수가 실행된다.

 

 

- Run The Application

 

이렇게 기본 코드 작성이 끝났다.

위에서 작성한 flask application code를 돌려보자.

flaskr 디렉토리가 아닌, 상위 폴더에서 돌려야 한다고 한다.

flask --app flaskr run --debug

 

 

이렇게 또 위기가 찾아왔다.

뭐지... 하고 보고있었는데, 가상환경이 꺼져있었다. 휴.

 

 

 

가상환경을 키고 다시 실행하니 정상 동작한다.

 

 

 

 

정상적으로 뜨는 것까지 확인 완료!

 

 

2023.07.16 - [Flask] - Flask 이용한 웹사이트 제작기 (3) - DB 연결

 

반응형