Flask의 폴더 구성 요약
틈새 시간으로 심플한 앱에서도 만들고 싶다고 생각하고 최근 Flask의 공부를 시작하고 있다.
하나의 파일에, 다양한 설정을 너무 많이 넣는 것은 역시 좋지 않기 때문에, MVC에 근거해, 디렉토리 구성을 정리했다.
flask_app
├ common
│ ├ libs
│ └ models --- モデル
│ ├ user.py
│ └ ・・・
├ config --- 設定フォルダ
│ ├ base_setting.py --- 各環境共通設定
│ ├ local_setting.py --- ローカル開発環境用設定
│ └ production_setting.py --- 本番環境用設定
├ controllers --- コントローラ
│ ├ index.py
│ └ ・・・
├ interceptors
│ ├ auth.py --- 認証系処理
│ └ error_handler.py --- エラー処理
├ static --- 静的ファイル置き場所
├ templates --- テンプレート
│ ├ common
│ │ └ layout.html
│ └ index.html
├ application.py --- 複数のファイルが利用するものを定義(Flaskインスタンス、DB、環境変数など)
├ manager.py --- アプリ実行用スクリプト(アプリの入り口)
├ requirements.py --- ライブラリ一覧
└ www.py --- ルーティング
실행 흐름
(Django처럼 명령 (
python manager.py runserver
)으로 앱을 시작하고 싶기 때문에 flash_script의 Manager를 사용합니다.)파일 역할 설명
순서대로 쫓아 설명해 간다.
app.config.from_pyfile("config/base_setting.py")
에서 공통 설정을 먼저 읽는다. 환경에 따라 (개발 · 프로덕션) 바뀌는 설정은 사전에 설정한 환경 변수 ops_config의 다른 값에 따라 다른 설정 파일을 읽도록 했다.flask_app/application.py
from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)
manager = Manager(app)
app.config.from_pyfile("config/base_setting.py")
# linux export ops_config=local|production
# windows set ops_config=local|production
if "ops_config" in os.environ:
app.config.from_pyfile("config/%s_setting.py" % (os.environ['ops_config']))
db = SQLAlchemy(app)
controllers 내용은 기능 단위로 나누고 www.py에 blueprint를 사용하여 통합한다.
flask_app/www.py
from interceptors.errorHandler import *
from interceptors.Auth import *
from application import app
from controllers.index import index_page
from flask_debugtoolbar import DebugToolbarExtension
toolbar = DebugToolbarExtension(app)
app.register_blueprint(index_page, url_prefix="/")
모델 안에 모델을 정의. 여기에서는 user.py에 테스트용 모델을 정의했다.
flask_app/common/models/user.py
from application import db
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(20), nullable=False)
controllers 안에 실제 처리를 정의.
flask_app/controllers/index.py
from flask import Blueprint, render_template
from common.models.user import User
index_page = Blueprint("index_page", __name__)
@index_page.route("/")
def index():
name = "hello"
context = {"name": name}
context["user"] = {"nickname": "xxxx",
"id": "xxxxx", "home_page": "http://www.xxx"}
context["num_list"] = [1, 2, 3, 4, 5]
result = User.query.all()
context['result'] = result
return render_template("index.html", **context)
Manager의 add_commend 메소드에서 runserver 명령과 create_all 명령을 등록하십시오.
flask_app/manager.py
from application import app, db, manager
from flask_script import Server, Command
from www import *
# web server
manager.add_command("runserver", Server(host = "0.0.0.0", use_debugger=True, use_reloader=True))
# create tables
@Command
def create_all():
from common.models.user import User
db.create_all()
manager.add_command("create_all", create_all)
def main():
manager.run()
if __name__ == "__main__":
# app.run( host = "0.0.0.0" )
try:
import sys
sys.exit( main() )
except Exception as e:
import traceback
traceback.print_exc()
실행
pip install -r requirements.py
에서 필요한 모듈 설치. flask_app/local_setting.py
에서 자신의 환경에 맞게 db의 user, password, host, port를 설정. python manager.py create_all
를 두드린다.이름이 user인 마스터가 생성된다.
python manager.py runserver
http://localhost:5000
방문하여 다음 화면이 나오면 성공!출처
소스를 gitHub에 올렸으므로 시간이 있으면 다운로드 하고 놀아보세요.
다음에 할 일
Reference
이 문제에 관하여(Flask의 폴더 구성 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shixukeizai/items/49f6dbccf5364e8fb499텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)