Flask 백엔드 애플리케이션 설정

안녕하세요.나는 네가 잘하기를 바란다.이전 글에서 우리는 응용 프로그램 폴더 구조를 설정했고, 이 글에서 우리는 응용 프로그램에 백엔드를 설정했다.
먼저 창조하다.env 파일, 환경 변수를 이 파일에 추가합니다.
SECRET_KEY = "abcdefgh"
FLASK_APP = run.py
FLASK_ENV= development # production/development


# Define the database
# Flask-SQLAlchemy
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://DB_USERNAME:[email protected]:3306/DB_DATABASE"
SQLALCHEMY_TRACK_MODIFICATIONS = False

# Static Assets
STATIC_FOLDER_PATH = "/assets"
STATIC_FOLDER = "assets"
TEMPLATES_FOLDER = "views"
UPLOAD_FOLDER = "application/assets/uploads"
이제 환경 변수에 대해 자세히 알아보겠습니다.
비밀 키
세션 쿠키에 대한 보안 서명을 위한 키
FLASK 응용 프로그램
FLASK APP 환경 변수는 응용 프로그램을 로드하는 방법을 지정합니다.
플라스크 ENV
응용 프로그램이 실행되는 환경.Flask 및 확장은 환경에 따라 비헤이비어를 활성화합니다(예: 디버그 모드 활성화).
SQLALCHEMY 데이터베이스 URI
연결된 데이터베이스 URI에 적용됩니다.
SQLALCHEMY TRACK 수정
True로 설정하면 Alchemy가 객체의 수정 사항을 추적하고 신호를 보냅니다.기본값은 없음으로 추적이 활성화되지만 나중에 기본적으로 추적이 비활성화된다는 경고가 표시됩니다.이것은 추가 메모리가 필요합니다. 필요하지 않으면 비활성화해야 합니다.
정적 폴더 경로
웹의 정적 파일에 다른 경로를 지정할 수 있습니다.기본값은 정적 폴더 이름입니다.
정적 폴더
정적 파일을 포함하는 폴더입니다. 정적 폴더 경로로 제공됩니다.응용 프로그램 루트나 절대 경로를 기준으로 합니다.기본값은 정적입니다.
템플릿 폴더
응용 프로그램에서 사용할 템플릿을 포함하는 폴더입니다.기본값은 응용 프로그램 루트의 템플릿 폴더입니다.
폴더 업로드
파일 업로드를 담당하는 폴더입니다.
이제 구성을 엽니다.py는 Config 클래스를 만들고 데이터를 읽는 클래스 속성을 추가합니다.환경
import os
from os import environ


class Config:
    # General Config
    SECRET_KEY = environ.get('SECRET_KEY')
    FLASK_APP = environ.get('FLASK_APP')
    FLASK_ENV = environ.get('FLASK_ENV')

    BASE_DIR = os.path.abspath(os.path.dirname(__file__))

    # Static Assets
    STATIC_FOLDER_PATH = environ.get('STATIC_FOLDER_PATH')
    STATIC_FOLDER = environ.get('STATIC_FOLDER')
    TEMPLATES_FOLDER = environ.get('TEMPLATES_FOLDER')
    UPLOAD_FOLDER = environ.get('UPLOAD_FOLDER')

    # Flask-SQLAlchemy
    SQLALCHEMY_DATABASE_URI = environ.get('SQLALCHEMY_DATABASE_URI')
    SQLALCHEMY_TRACK_MODIFICATIONS = bool(environ.get('SQLALCHEMY_TRACK_MODIFICATIONS'))
그래서 설정 중입니다.py BASE DIR 은 응용 프로그램 폴더의 루트 경로를 저장하여 나중에 사용할 수 있도록 합니다.
응용 프로그램/init를 엽니다.그리고 설정 프로그램을 시작합니다.필요한 모듈을 먼저 가져옵니다.
from dotenv import load_dotenv
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import MetaData
그런 다음 ENV 변수를 로드합니다.
load_dotenv()
현재 forigen 키, 메인 키, 기타 구조 함수에 데이터베이스 제약 이름을 설정합니다.python 사전 한 권을 만들다.
convention = {
    "ix": 'ix_%(column_0_label)s',
    "uq": "uq_%(table_name)s_%(column_0_name)s",
    "ck": "ck_%(table_name)s_%(column_0_name)s",
    "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
    "pk": "pk_%(table_name)s"
}
metadata = MetaData(naming_convention=convention)
그런 다음 SQLAlchemy와 마이그레이션 객체를 초기화합니다.
db = SQLAlchemy(metadata=metadata)
migrate = Migrate()
그래서 지금 우리의 시작은py 파일은 이렇게 보입니다.
from dotenv import load_dotenv
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import MetaData
from flask_debugtoolbar import DebugToolbarExtension

load_dotenv()

convention = {
    "ix": 'ix_%(column_0_label)s',
    "uq": "uq_%(table_name)s_%(column_0_name)s",
    "ck": "ck_%(table_name)s_%(column_0_name)s",
    "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
    "pk": "pk_%(table_name)s"
}
metadata = MetaData(naming_convention=convention)

db = SQLAlchemy(metadata=metadata)
migrate = Migrate()
응용 프로그램/설정을 엽니다.py 파일을 가져오고 모델을 가져옵니다.
from flask import Flask
import os

import config
from application import (
    db,
    migrate
)
그래서 저희가 init를 만들었습니다.py는 응용 프로그램 폴더에 있습니다. 이것은 응용 프로그램을python 패키지로 만들 것입니다. 따라서 마지막으로 우리는from 문장을 응용 프로그램과 init에서 만든db나migrate 대상에 사용합니다.그래서 프로그램에서 가져오고 있습니다.
집을 짓다.py 파일, 그리고 flask blueprint를 사용하여 우리의 첫 번째 노선에 청사진을 만듭니다.
from flask import Blueprint, render_template

controller = Blueprint('home', __name__)

@controller.route('/', methods=['GET'])
def index():
    return "Home Controller"
사용자를 만듭니다.모델 폴더에 우리의 첫 번째 모델을 만듭니다.이것은 SQLAlchemy 모형이 될 것이며, 우리의 migartions에도 사용될 것이다.
사용자 클래스는db를 사용하여 확장됩니다.모형, 여기 특수한 속성 이름이 있습니다.; tablename;, tablename을 변경하는 데 사용됩니다. 그렇지 않으면; tablename; tablename은 클래스 이름입니다.
from application import db


class User(db.Model):

    __tablename__ = 'users'

    id = db.Column(
        db.Integer,
        primary_key=True
    )

    name = db.Column(
        db.String(255),
        nullable=False
    )

    email = db.Column(
        db.String(255),
        unique=True,
        nullable=False
    )

    password = db.Column(
        db.String(255),
        nullable=False
    )

    role = db.Column(
        db.String(50),
        nullable=False,
        server_default="user"
    )

    created_at = db.Column(
        db.DateTime,
        server_default=db.func.now(),
        nullable=False
    )

    updated_at = db.Column(
        db.DateTime,
        server_default=db.func.now(),
        nullable=False
    )

이제 컨트롤러와 모델이 생겨서 프로그램에 등록할 수 있습니다.
이제 설정을 엽니다.py와 파일에 세 가지 함수를 만듭니다. 첫 번째는 등록 청사진, 가져오기 모델, 초기화 플러그인입니다.
register blueprints 함수에서 컨트롤러를 가져와 컨트롤러를 등록합니다.
def register_blueprints(app):
    from application.controllers import (
        home
    )

    app.register_blueprint(home.controller)
import models 함수에서 모델을 가져오고 이 함수에 등록합니다.
def import_models():
    # import database models
    from application.models import (
        user
    )
마지막으로 가장 중요하지 않은 것은 flask 프로그램을 flask로 초기화하는 데 사용되는 initialize 플러그인입니다. 예를 들어 SQLAlchemy,flask Migrate 등입니다.
이제 이 파일에 우리의 마지막 함수를 만들 때가 되었습니다. 이것은 initialize flask app입니다. 이것은 우리가 설정에 추가한 설정으로flask app를 초기화하는 것을 책임집니다.피야.
def initialize_flask_app():
    # Initialize the core application.
    app = Flask(
        __name__,
        instance_relative_config=False,
        template_folder=config.Config.TEMPLATES_FOLDER,
        static_folder=config.Config.STATIC_FOLDER,
        static_url_path=config.Config.STATIC_FOLDER_PATH
    )
    app.config.from_object('config.Config')
    return app
인스턴스\상대\구성
True로 설정하면 구성을 로드할 때 상대 파일 이름은 응용 프로그램 루트가 아닌 인스턴스 경로를 기준으로 가정됩니다.
여기서 False로 설정하면 우리는 우리의 위치에서 우리의 설정을 불러올 수 있습니다. 따라서 마지막 두 번째 줄에서flask app 대상을 설정하고 이 대상에서 데이터를 읽습니다. 그러면 우리는 설정 파일에서from object 함수를 사용할 수 있습니다.
그래서 우리 설정은py는 이렇게 보인다.
def initialize_plugins(app):
    # Initialize Plugins
    db.init_app(app)
    migrate.init_app(app, db)
그래서 지금 우리 설정은py는 이렇게 보인다.
from flask import Flask
import os

import config
from application import (
    db,
    migrate
)


def register_blueprints(app):
    from application.controllers import (
        home
    )

    app.register_blueprint(home.controller)


def initialize_plugins(app):
    # Initialize Plugins
    db.init_app(app)
    migrate.init_app(app, db)


def import_models():
    # import database models
    from application.models import (
        user
    )

def initialize_flask_app():
    # Initialize the core application.
    app = Flask(
        __name__,
        instance_relative_config=False,
        template_folder=config.Config.TEMPLATES_FOLDER,
        static_folder=config.Config.STATIC_FOLDER,
        static_url_path=config.Config.STATIC_FOLDER_PATH
    )
    app.config.from_object('config.Config')
    return app
이제 init를 엽니다.py 파일을 만들고 파일 끝에 프로그램 함수를 만듭니다.
def create_app():
    from application.settings import (
        initialize_flask_app,
        initialize_plugins,
        import_models,
        register_blueprints
    )
    app = initialize_flask_app()

    with app.app_context():
        # initialize plugins
        initialize_plugins(app)

        # register blueprints
        register_blueprints(app)

        # import models
        import_models()

        return app
이 함수 다음에 우리는 초기화한다.py는 이렇게 보인다.
from dotenv import load_dotenv
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import MetaData

load_dotenv()

convention = {
    "ix": 'ix_%(column_0_label)s',
    "uq": "uq_%(table_name)s_%(column_0_name)s",
    "ck": "ck_%(table_name)s_%(column_0_name)s",
    "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
    "pk": "pk_%(table_name)s"
}
metadata = MetaData(naming_convention=convention)

db = SQLAlchemy(metadata=metadata)
migrate = Migrate()


def create_app():
    from application.settings import (
        initialize_flask_app,
        initialize_plugins,
        import_models,
        register_blueprints
    )
    app = initialize_flask_app()

    with app.app_context():
        # initialize plugins
        initialize_plugins(app)

        # register blueprints
        register_blueprints(app)

        # import models
        import_models()

        return app

먼저 설정에서 모든 기능을 가져옵니다.py 파일.flask app를 초기화하고 app 변수로 설정합니다.
이제 app context()를 사용하여 설정에서 가져온 모든 함수를 초기화합니다.py, 그리고 응용 프로그램obejct로 돌아갑니다.
이제 우리의 운행에 코드를 추가할 때가 되었다.응용 프로그램을 시작합니다.
from application import create_app

app = create_app()

if __name__ == '__main__':
    app.run(host='0.0.0.0')
init에서 간단한 import create app 함수를 만들었습니다.py file과 get 호출 함수는flask 대상을 가져오고run 방법으로 프로그램을 시작합니다.
지금 데이터베이스를 만듭니다.python flask blog의 이름으로 데이터베이스를 만듭니다.

데이터베이스에 데이터베이스 자격 증명을 설정합니다.환경 파일.
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://muhammadsaim:[email protected]:3306/python_flask_blog"
현재 터미널에서 이 명령을 시작합니다.
flask db init
이것은 루트 폴더에 만든migartions 폴더에migarions와 관련된 프로필을 만들 것입니다.

이 명령을 실행하여 이전을 만듭니다.
flask db migrate -m "Create User table."
이전으로 돌아갈 수 있도록 파일 migartion 버전 파일을 만들 것입니다.

그래서 우리는 이전을 제출합니다. 이 명령을 실행하고 이 제출을 데이터베이스에 전송합니다. 이것은 사용자 테이블을 만들 것입니다.

그리고 나서 우리의 책상은 만들어졌다.

첫 번째는alembic 버전이고, 다른 하나는 우리가 만든 사용자이지만, 첫 번째는 이전 추적 기록에 사용됩니다.
이제 드디어 프로그램을 실행할 때가 왔습니다. 이 명령을 실행해야 합니다.
python run.py
이 명령은 서버를 열고 URL을 주며, 응용 프로그램은 개발 서버에서 서비스를 제공합니다.

브라우저를 열고 브라우저에서 이 링크를 열면 색인 경로를 얻을 수 있습니다. 메인 컨트롤러에 이 경로를 만들었습니다. 열면 메인 컨트롤러에

만세, 우리의 신청이 끝났다.
같이 있어줘서 고마워요.
다음 게시물에서 보십시오. 만약 당신들이 이 게시물을 쓸 때 어떤 문제가 있으면, 평론을 발표하는 것을 환영합니다.

좋은 웹페이지 즐겨찾기