検索
ホームページバックエンド開発Python チュートリアルFlask Blueprint と SQLAlchemy を使用して Python アプリケーションを作成する方法

    インストール準備

    python3 -V && pip3 -V
    pip3 install pipenv

    pipenv

    pipenv shell

    PyCharmの環境構成についてはここではあまり説明しません。 ↑ コードを説明します。

    練習を始める

    Flask の原理は、アプリの初期化時にブループリントとアプリをバインドして Web ルーティング機能を実装することです。ルーティングの実装はすべてのプロジェクトの最初のステップです。

    エントリー ファイル

    プロジェクトを開始する前に、リクエストでアプリをインスタンス化できるようにエントリー ファイルを定義します。エントリー ファイルで行う必要があるのは、構成ファイルの初期化、コントローラーの導入、データベースやその他の操作。

    def create_app():
        app = Flask(__name__)
        # 导入config中的配置文件
        app.config.from_object('app.config.setting')
        app.config.from_object('app.config.secure')
        return app

    スタートアップファイル内で呼び出します。判定はスタートアップファイルに追加する必要があります。理由は後述します。

    from app.app import create_app
    app = create_app()
    if __name__ == '__main__':
        app.run(debug =True,port=81,host= '0.0.0.0')

    Routing

    Flask はブループリントを利用して実装されたルーティング機能で、エントリファイルにブループリントを登録するメソッドを追加して導入と登録を実現します。

    from flask import Blueprint
    login = Blueprint('login', __name__)
    @login.route('/login')
    def loginIndex():
        return "login Hello"

    アプリ インスタンスの初期化時にブループリント モジュールを導入する

    from flask import Flask
    def create_app():
        app = Flask(__name__)
        # 导入config中的配置文件
        app.config.from_object('app.config.setting')
        app.config.from_object('app.config.secure')
        # 注册并导入蓝图
        register_blue(app)
        return app
    def register_blue(app):
        from app.api.login import login
        app.register_blueprint(login)

    ルーターを最適化する

    各ルーターにローダーを追加し、初期化中に Flask を順番にロードできます。ブループリントはルーターを最適化するという目的を達成しました。

    class BaseRoutes:
        def __init__(self, name):
            self.name = name
            self.loader = []
        def route(self, rule, **options):
            def decorator(f):
                self.loader.append((f, rule, options))
                return f
            return decorator
        def register(self, bp, url_prefix=''):
            # 依次注册蓝图
            for f, rule, options in self.loader:
                endpoint = options.pop("endpoint", f.__name__)
                bp.add_url_rule(url_prefix + rule, endpoint, f, **options)

    API ファイルで使用される最適化されたローダー コードは次のとおりです:

    from app.libs.BaseRoutes import BaseRoutes
    api = BaseRoutes('login')
    @api.route('/login/loginHandle', methods=['GET', 'POST'])
    def loginHandle():
        return "login Hello"

    SQLAlchemy

    Web のルーティングが完了したら、さらに追加、削除を開始します。 , データベースを変更して確認する 練習と探索のために、flask は SQLAlchemy を使用してデータベースを操作します。ここでは例として Mysql データベースを取り上げます。

    SQLAlchemy を使用するには、データベース ドライバー パッケージの 2 つのコンポーネントをインストールする必要があります。Flask-SQLAlchemy と PyMySQL の 2 つのコンポーネントをインストールすると、開発がより簡単かつ便利になります。

    データベース クラスの定義

    すべての Flask アプリケーションとプラグインは、アプリに登録し、オブジェクトを使用して操作する必要があります。最初にデータベース操作の基本クラスを定義し、他のクラスを使用します。モジュールはBaseに登録されます。

    すべての DB のパブリック メソッドを Base に書き込み、車輪の再発明のプロセスを削減します。

    Base で SQLAlchemy をインスタンス化する

    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy()
    class Base(db.Model):
        # 忽略基类的主键
        __abstract__ = True

    通常のデータ クラスは Base クラスを継承し、User クラスを例として使用する前に db パッケージを導入します

    from app.models.base import Base
    class User(Base):
        __tablename__ = 'user'
        id = Column(Integer, primary_key=True, autoincrement=True)
        name = Column(String(50), nullable=False, default="")
        email = Column(String(120), nullable=False, default="")
        _password = Column('password',String(64))
        @property
        def password(self):
            return self._password
        @password.setter
        def password(self, raw):
            self._password = generate_password_hash(raw)

    Entry ファイルをロードする DB

    データをロードするときは、SQLALCHEMY_DATABASE_URI を使用して指定され、指定された形式を持つデータベース初期化構成をロードする必要があります。

    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/admin?charset=utf8'

    SQLALCHEMY_DATABASE_URI =データベース ドライバー名://ユーザー名:パスワード@IP アドレス:ポート番号/データベース名

    def create_app():
        app = Flask(__name__)
        app.config.from_object('app.config.secure')
        # 初始化数据库
        db.init_app(app)
        with app.app_context():
            db.create_all()
        return app

    with キーワードの役割を記述して説明します。 Python では、スタック データ構造は主にアプリ インスタンスの実行に使用されます。with キーワードはコンテキストを非常によく区別できます。リソースが切断されると、リソースは自動的に解放されてリサイクルされ、プログラムを最適化できます。

    Mysql ドライバーは、cymysql または pymysql を使用できます。インターネット上には、pymysql の使用に関するチュートリアルが他にもあります。ドライバーを使用する際、迷った場合は、github にアクセスし、統計情報が多数あるプラグインを使用してください。 、人気のあるものを選択すると、さらに多くの解決策が表示されます。

    モジュールで定義されたメソッド

    Model では、データベースを直接操作するモデル、定数、アトミック メソッドを定義できます。また、db.session の形式を使用して、データを読み取ります。

    from sqlalchemy import Column, Integer, String, SmallInteger
    from app.models.base import Base, db
    class tp_manager(Base):
        STATUS_NORMAL = 1
        STATUS_STOP = 0
        # ...
        @classmethod
        def get_manager_by_name(cls, username):
            r = cls.query.filter(cls.username == username, cls.status == cls.STATUS_NORMAL).one()
            return r
        @classmethod
        def get_db(cls):
            r = db.session.query(cls).filter(cls.status == cls.STATUS_NORMAL).all()
            return r

    ルーティングで使用する

    ルーティングで使用する場合は、モデルに対応するモデル パッケージを導入する必要があります。以下は簡単なデモです。ユーザー権限で falsk-login コンポーネントを使用できます。ユーザー情報を保存します。

    from flask import request, session, jsonify
    from app.libs.BaseRoutes import BaseRoutes
    from app.validators.form.login import LoginForm
    from app.models.admin.tp_manager import tp_manager
    api = BaseRoutes('login')
    @api.route('/login/loginHandle', methods=['POST'])
    def loginHandle():
        form = LoginForm(request.form)
        if form.validate():
            # 验证通过的逻辑
            r = tp_manager.get_manager_by_name(form.username.data)
            if r:
                msg = '操作成功'
                session['manager_id'] = r.id
            else:
                msg = '账号和密码错误'
            return jsonify({"code": 200, "data": [], "msg": msg})
        else:
            # 错误暂时忽略...
            return form.errors

    ちなみに、flask がセッションを使用する前に、構成ファイルで SECRET_KEY を構成する必要があります。そうしないと、エラーが報告され、キーの値をカスタマイズできます。

    SECRET_KEY = '需要加密的key值'

    SQLAlchemy は mysql エンコーディングと列タイプを実装します

    SQLAlchemy が Mysql で基本的な操作を実装した後、デフォルト値セットが有効にならず、文字セット エンコーディングもデフォルトのlatin1、Mysqlのカラム型の最適化、Mysqlコネクションプールの実装、mongoやredisなどのNoSqlデータベースへのアクセスなどが次のステップでの検討課題となっています。

    デフォルト値とインデックスの設定

    Python ソース コード パッケージの説明は非常にわかりやすく、例も付いています。Column では次のように設定されています:

    Column(Integer, index=True, nullable=False,  server_default="0",comment="昵称")

    server_default Orm は Mysql の初期化の値を設定します。 unique はそれが唯一のインデックスであるかどうかを指定します。 default は SQLAlchemy が CURD 操作を実行するときのデフォルト値です。 server_defaul および default の値は文字列型である必要があります。

    index はインデックスの設定、nullable は空かどうかの設定、comment はコメント情報の設定です。

    Mysql カラム型との互換性

    しかし、tinyint 型を使用したい場合、文字セットをどのように設定するかという質問があります。

    from sqlalchemy.dialects.mysql import VARCHAR, TEXT, BIGINT, INTEGER, SMALLINT, TINYINT, DECIMAL, FLOAT, \
        DOUBLE, DATETIME, TIMESTAMP, DECIMAL

    最も一般的に使用される int と varchar を例に挙げます。使用する前に、対応するパッケージをインポートする必要があります:

    from sqlalchemy import Column, Index, Integer
    from sqlalchemy.dialects.mysql import VARCHAR, TEXT, BIGINT, INTEGER, SMALLINT, TINYINT, DECIMAL, FLOAT, \
        DOUBLE, DATETIME, TIMESTAMP, DECIMAL
    from app.models.base import Base, db
    class wm_user_user(Base):
        STATUS_NORMAL = 1
        __tablename__ = 'wm_user_user'
        user_status = Column(TINYINT(display_width=1,unsigned=True), nullable=False, server_default="1",
                             comment="1为正常,0为审核中")
        user_nickname = Column(VARCHAR(length=50), index=True, nullable=False, comment="昵称")
        # 添加配置设置编码
        __table_args__ = {
            'mysql_charset': 'utf8mb4',
            'mysql_collate': 'utf8mb4_general_ci'
        }

    TINYINT 型には 3 つのパラメータがあります:

    display_width は列の型の幅を設定します。設定後は tinyint(1) が表示されます。2 番目の符号なしは正の値の範囲で、3 番目のゼロフィルは埋められます。値は数値型です。以下は TINYINT ソース コードの使用手順です。

    """Construct a TINYINT.
    :param display_width: Optional, maximum display width for this number.
    :param unsigned: a boolean, optional.
    :param zerofill: Optional. If true, values will be stored as strings
      left-padded with zeros. Note that this does not effect the values
      returned by the underlying database API, which continue to be
      numeric.
    """

    コードとして varchar を使用した文字列型について簡単に紹介します。文字列型は文字列の長さを明示的に宣言する必要があり、これは length によって実装されます。length の値が追加されていない場合、処理中にエラーが発生します。初期化。

    自定义数据库名和字符集编码

    __tablename__设置的是自定义数据表名,底下的设置的是数据表字符集编码,要使用utf8mb4编码和utf8mb4_general_ci编码,这里就不做过多的解释了。

    __tablename__ = 'wm_user_user'
    # ...
    __table_args__ = {
        'mysql_charset': 'utf8mb4',
        'mysql_collate': 'utf8mb4_general_ci'
    }

    以上がFlask Blueprint と SQLAlchemy を使用して Python アプリケーションを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    Python:ゲーム、GUIなどPython:ゲーム、GUIなどApr 13, 2025 am 12:14 AM

    PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

    Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

    Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

    2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

    2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

    Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

    Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

    2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

    2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

    プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

    10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

    中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?Apr 02, 2025 am 07:15 AM

    fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

    Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Apr 02, 2025 am 07:12 AM

    Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    WebStorm Mac版

    WebStorm Mac版

    便利なJavaScript開発ツール

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    DVWA

    DVWA

    Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

    AtomエディタMac版ダウンロード

    AtomエディタMac版ダウンロード

    最も人気のあるオープンソースエディター

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール