フラスコバックエンドアプリケーションセットアップ


こんにちは!私はあなたが素晴らしいことを願っています.最後のポストでは、アプリケーションフォルダの構造を設定し、この1つで我々のアプリケーションのバックエンドを設定している.
ファーストクリエイト.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"
環境変数の詳細を見てください.
秘密鍵
セッションクッキーを安全に署名するために使用される秘密キーで、拡張子やアプリケーションによって他のセキュリティ関連のニーズに使用できます.
フラックランアプリ
FlaskCountアプリ環境変数は、アプリケーションを読み込む方法を指定するために使用されます.
フラッシュセン
アプリが実行されている環境.フラスコとエクステンションは、デバッグモードを有効にするなどの環境に基づいた動作を可能にすることができます.
SQLAlchemyConeデータベース
接続に使用するデータベースURI.
SQLAlchemyThrough TrackRank修正
trueに設定すると、フラスコsqlalchemyオブジェクトの変更を追跡し、信号を発します.デフォルトはNoneです.これは追跡を可能にしますが、将来デフォルトで無効になると警告します.これは余分なメモリを必要とし、必要に応じて無効にする必要があります.
StaticSoundの折り返しパス
Web上の静的ファイルの別のパスを指定するために使用できます.デフォルトは、StaticSoundフォルダーフォルダの名前です.
フォルダフォルダ
StaticCount FolderLandパスで提供される静的ファイルを持つフォルダ.アプリケーションのルートパスまたは絶対パスに対して相対的です.デフォルトは' static 'です.
テンプレートフォルダ
アプリケーションで使用するテンプレートを含むフォルダ.アプリケーションのルートパスの'テンプレート'フォルダのデフォルト.
アップロードフォルダ
我々のファイルアップロードに責任があるフォルダ.
今すぐオープン設定.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 BaseRun DIRは将来使用するアプリケーションフォルダのルートパスを保存するために使用します.
今すぐオープンアプリケーション/init.Pyファイルと設定アプリケーションを起動します.最初に必要なモジュールをインポートします.
from dotenv import load_dotenv
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import MetaData
その後、env変数を読み込みます
load_dotenv()
Forrigenキー、主キーおよび他の制約のデータベース制約条件を設定します.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とmigrateオブジェクトを初期化します.
db = SQLAlchemy(metadata=metadata)
migrate = Migrate()
それで、今度は我々のinit.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ファイルとmoduelsをインポートします.
from flask import Flask
import os

import config
from application import (
    db,
    migrate
)
そこでinitを作成します.アプリケーションフォルダでPyを作成するので、アプリケーションはPythonパッケージを作成します.最後に、アプリケーションとの間でステートメントを使用します.Pyので、現在のアプリケーションからインポートされます.
ホームを作成します.我々のコントローラフォルダのPYファイルと我々の最初のルートの青写真をつくるために、フラスコ青写真を使用してください.
from flask import Blueprint, render_template

controller = Blueprint('home', __name__)

@controller.route('/', methods=['GET'])
def index():
    return "Home Controller"
今すぐユーザーを作成します.モデルフォルダ内のPyファイル.これはsqlalchemyモデルとも私たちの移行のための使用されます.
ユーザクラスはdbで拡張されます.テーブル名はクラス名になります.
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とファイルの最初の3つの関数を作成します.
RegisterRange BluePrintsでは、コントローラからコントローラをインポートし、そのコントローラーを登録します.
def register_blueprints(app):
    from application.controllers import (
        home
    )

    app.register_blueprint(home.controller)
インポートモデルでは、モデルからモデルをインポートし、この関数で登録します.
def import_models():
    # import database models
    from application.models import (
        user
    )
最後に、しかし、我々はフラスコアプリのようなフラスコのアプリをSQLAlchemy、フラスコ移行などに初期化するために使用されるInitializeRoundプラグインを持っています.
今すぐ私たちの設定で追加された構成でフラスコアプリケーションを初期化する責任があるInitializeCount FlaskCountアプリになりますこのファイルの最後の機能を作成するその時間.Py
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
( InstanceRank相対的な設定)
設定をロードするための真の相対的なファイル名を設定すると、アプリケーションルートの代わりにインスタンスパスに相対的であると仮定されます.
そこで、ここではfalseに設定しますので、2番目の最後の行でフラスコアプリケーションオブジェクトを設定し、オブジェクトからデータを読み込みます.
だから我々の設定.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ファイルを作成し、ファイルの末尾にCreateRoundアプリを作成します.
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
この関数の後にinit.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ファイル.フラスコアプリケーションを初期化し、アプリケーションの変数に設定します.
今、我々は設定からインポートしたすべての関数を初期化するためにapphash context ()を使用します.PYとその後、アプリOneJCTを返します.
今私たちの実行にいくつかのコードを追加するその時間.Pyはアプリケーションを起動します.
from application import create_app

app = create_app()

if __name__ == '__main__':
    app.run(host='0.0.0.0')
我々はinitで作成された単純なインポートCreateRenアプリの機能.Py Fileとget get Flaskオブジェクトを取得し、Runメソッドを使用してアプリケーションを起動します.
今、データベースを作成してデータベースを作成しました.

でデータベースの資格情報を設定します.envファイル.
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://muhammadsaim:[email protected]:3306/python_flask_blog"
今すぐあなたの端末の開始では、このcommadを実行するフラスコ移行.
flask db init
これは、ルートフォルダに作成された移行フォルダにいくつかの移行関連の設定ファイルを作成します.

このコマンドを実行してマイグレーションを作成します.
flask db migrate -m "Create User table."
これは変更を追跡するためにファイル移行バージョンファイルを作成します.

そこで、このコマンドを実行して、このコミットをデータベースにプッシュします.

そして、その後、我々のテーブルはつくられます.

我々は2つのテーブルを1つ目の1つのAlembicConeバージョンであり、他のユーザーが作成されますが、最初の1つは、移行の記録を追跡するために使用されます.
今すぐfinalyこのアプリケーションを実行するには、このコマンドを実行する必要があります.
python run.py
このコマンドはサーバを開き、アプリケーションサーバから開発されるURLを与えます.

あなたのブラウザを開いて、Broswerの上でこの関連を開いてください、そして、我々は我々が我々のホームコントローラで我々が作成したインデックスルートを得ます

現在、我々は我々のアプリを持っています.
私と一緒にいてくれてありがとう.
あなたがこのポストで行っている間、どんな問題もあるならば、次のポストであなたに会いにコメントしてください.