国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table des matières
Préparation de l'installation
pipenv
Commencez à vous entra?ner
Fichier d'entrée
routing
Optimisation du routeur
SQLAlchemy
Définition de la classe de base de données
模塊中定義方法
在路由中的使用
SQLAlchemy實(shí)現(xiàn)mysql編碼、列類型
默認(rèn)值和索引設(shè)置
兼容Mysql列類型
自定義數(shù)據(jù)庫名和字符集編碼
Maison développement back-end Tutoriel Python Comment écrire des applications Python à l'aide de Flask Blueprint et SQLAlchemy

Comment écrire des applications Python à l'aide de Flask Blueprint et SQLAlchemy

May 06, 2023 pm 07:28 PM
python sqlalchemy

    Préparation de l'installation

    python3 -V && pip3 -V
    pip3 install pipenv

    pipenv

    pipenv shell

    La configuration de l'environnement de PyCharm ne se fera pas ici. Trop d'explications, voici une explication du code suivant.

    Commencez à vous entra?ner

    Flask Le principe est de lier le plan et l'application pour implémenter la fonction de routage Web lorsque l'application est initialisée. La mise en ?uvre du routage est la première étape. tous les projets.

    Fichier d'entrée

    Avant de démarrer le projet, définissez un fichier d'entrée pour permettre les requêtes d'instanciation de l'application. Ce que le fichier d'entrée doit faire est d'initialiser le fichier de configuration, d'introduire le fichier d'entrée. contr?leur et initialisez la base de données.

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

    Appelé dans le fichier de démarrage, le jugement doit être ajouté au fichier de démarrage, la raison sera expliquée plus tard.

    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 est une fonction de routage implémentée à l'aide de plans. Une méthode d'enregistrement des plans est ajoutée au fichier d'entrée pour implémenter l'introduction et l'enregistrement.

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

    Présentation du module Blueprint lorsque l'instance d'application est initialisée

    from flask import Flask
    def create_app():
        app = Flask(__name__)
        # 導(dǎo)入config中的配置文件
        app.config.from_object('app.config.setting')
        app.config.from_object('app.config.secure')
        # 注冊并導(dǎo)入藍(lán)圖
        register_blue(app)
        return app
    def register_blue(app):
        from app.api.login import login
        app.register_blueprint(login)

    Optimisation du routeur

    Un chargeur peut être ajouté à chaque routeur lors de l'initialisation. chargez les plans dans Flask dans l'ordre, l'objectif d'optimisation du routeur a été atteint.

    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=''):
            # 依次注冊藍(lán)圖
            for f, rule, options in self.loader:
                endpoint = options.pop("endpoint", f.__name__)
                bp.add_url_rule(url_prefix + rule, endpoint, f, **options)

    Le code de chargement optimisé utilisé dans le fichier API est le suivant :

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

    SQLAlchemy

    Une fois le routage du web terminé, nous démarrer la base de données Pour plus de pratique et d'exploration, flask utilise SQLAlchemy pour faire fonctionner la base de données. Ici, nous prenons la base de données Mysql comme exemple.

    L'utilisation de SQLAlchemy nécessite l'installation de deux composants?: base de données + package de pilotes. L'installation de Flask-SQLAlchemy + PyMySQL rendra notre développement plus simple et plus pratique.

    Définition de la classe de base de données

    Pour toutes les applications et plug-ins Flask, ils doivent être enregistrés dans l'application et utiliser des objets pour fonctionner. opérations , laissez les autres modules être enregistrés dans Base.

    écrivez des méthodes publiques dans toutes les bases de données de Base pour réduire le processus de réinvention de la roue.

    Instancier SQLAlchemy dans Base

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

    Les classes de données ordinaires héritent de la classe Base, prenez la classe User comme exemple, introduisez le package db avant utilisation

    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)
    #?? ??#Entrée Chargement du fichier DB

    Lors du chargement des données, vous devez charger la configuration d'initialisation de la base de données, qui est spécifiée à l'aide de SQLALCHEMY_DATABASE_URI et a un format spécifié.

    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/admin?charset=utf8'
    SQLALCHEMY_DATABASE_URI指定,有指定的格式。

    def create_app():
        app = Flask(__name__)
        app.config.from_object('app.config.secure')
        # 初始化數(shù)據(jù)庫
        db.init_app(app)
        with app.app_context():
            db.create_all()
        return app

    SQLALCHEMY_DATABASE_URI =數(shù)據(jù)庫+驅(qū)動名稱://用戶名:密碼@ip地址:端口號/數(shù)據(jù)庫名稱

    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

    說明和解釋一下with關(guān)鍵字的作用,在python中主要使用的是棧數(shù)據(jù)結(jié)構(gòu)來運(yùn)行App實(shí)例,with關(guān)鍵字能很好的區(qū)分上下文,當(dāng)資源斷開時(shí)會自動釋放和回收,對程序能啟到優(yōu)化的作用。

    mysql的驅(qū)動可以使用cymysql,也可以使用pymysql,網(wǎng)上使用pymysql的教程會偏多一點(diǎn),使用驅(qū)動時(shí),如果拿不定主意去github上使用stat數(shù)多的插件,選大眾型的,這樣解決方案也會多一點(diǎn)。

    模塊中定義方法

    model中可以定義模型,常量,直接操作數(shù)據(jù)庫的原子方法,也可以使用db.session的形式來讀取數(shù)據(jù)。

    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():
            # 驗(yàn)證通過的邏輯
            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:
            # 錯誤暫時(shí)忽略...
            return form.errors

    在路由中的使用

    在路由中使用時(shí),需要引入models中對應(yīng)的model包,下面是一個(gè)簡單使用的Demo,用戶的權(quán)限可以使用falsk-login組件來存儲用戶信息。

    SECRET_KEY = '需要加密的key值'

    順便寫一句,flask在使用session前,在配置文件中需要配置SECRET_KEY,不然會報(bào)錯,key值自定義即可。

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

    SQLAlchemy實(shí)現(xiàn)mysql編碼、列類型

    在SQLAlchemy 對Mysql實(shí)現(xiàn)了基本操作以后,我發(fā)現(xiàn)設(shè)置出來的默認(rèn)值沒有生效,字符集編碼也被設(shè)置成了默認(rèn)的latin1,優(yōu)化Mysql的列類型,實(shí)現(xiàn)Mysql連接池、接入mongo、redis等NoSql數(shù)據(jù)庫成了下一步要研究的問題。

    默認(rèn)值和索引設(shè)置

    python源碼包里的解釋很清晰 還附帶了例子 ,在Column中是這樣設(shè)置的:

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

    server_default Orm設(shè)置初始化Mysql的值,unique指定的是否為唯一索引,default是在SQLAlchemy進(jìn)行CURD操作時(shí)進(jìn)行的默認(rèn)值,server_defauldefault的值必須是字符串類型的。

    index是設(shè)置索引,nullable設(shè)置是否為空,comment設(shè)置的是備注信息。

    兼容Mysql列類型

    但是擺在眼前一個(gè)問題,你想使用tinyint類型,字符集怎么設(shè)置?

    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="昵稱")
        # 添加配置設(shè)置編碼
        __table_args__ = {
            'mysql_charset': 'utf8mb4',
            'mysql_collate': 'utf8mb4_general_ci'
        }

    以使用最多的int和varchar為例,使用之前要導(dǎo)入對應(yīng)的包:

    """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.
    """

    TINYINT類型中有三個(gè)參數(shù):

    display_width 設(shè)置的是列類型寬度,設(shè)置完以后會顯示tinyint(1)SQLALCHEMY_DATABASE_URI =Base de données + nom du pilote://nom d'utilisateur:mot de passe@adresse IP:numéro de port/nom de la base de données

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

    Description et explication Allons jetez un ?il au r?le du mot-clé with. En python, la structure de données de la pile est principalement utilisée pour exécuter des instances d'application. Le mot-clé with peut très bien distinguer le contexte. Lorsque les ressources sont déconnectées, elles seront automatiquement libérées et recyclées, ce qui peut. optimiser l'effet du programme.

    #????#Le pilote MySQL peut utiliser cymysql ou pymysql. Il existe d'autres tutoriels sur l'utilisation de pymysql en ligne. Lorsque vous utilisez le pilote, si vous êtes indécis, allez sur github et utilisez un plug-in avec un grand nombre de statistiques. numéros. Choisissez le type populaire, il y aura donc plus de solutions. #????##????#Méthodes définies dans le module #????##????#model peut définir des modèles, des constantes, des méthodes atomiques qui font fonctionner directement la base de données, ou vous pouvez utiliser la forme de db.session< /code> pour lire les données. #????#rrreee#????#Utilisation dans le routage #????##????#Lorsqu'il est utilisé dans le routage, vous devez introduire le package de modèle correspondant dans les modèles. Ce qui suit est une démo simple qui peut être utilisée avec les autorisations utilisateur falsk. -composant de connexion pour stocker les informations utilisateur. #????#rrreee#????#Au fait, avant que flask n'utilise la session, vous devez configurer <code>SECRET_KEY dans le fichier de configuration, sinon une erreur sera signalée et la valeur de la clé pourra être personnalisée. #????#rrreee#????#SQLAlchemy implémente l'encodage MySQL et le type de colonne#????##????#Après que SQLAlchemy ait implémenté les opérations de base sur Mysql, j'ai constaté que la valeur par défaut définie ne prenait pas effet et que l'encodage du jeu de caractères était également défini Il est devenu le latin1 par défaut. L'optimisation du type de colonne de Mysql, la mise en ?uvre du pool de connexions Mysql et l'accès aux bases de données NoSql telles que mongo et redis sont devenus des problèmes à étudier à l'étape suivante. #????##????#Valeur par défaut et paramètres d'index#????##????#L'explication dans le package de code source python est très claire et est accompagnée d'exemples. Dans Colonne, elle est définie comme. this:# ????#rrreee#????#server_default Orm définit la valeur pour initialiser Mysql Unique spécifie si c'est le seul index default est la valeur par défaut lorsque SQLAlchemy. effectue des opérations CURD, les valeurs de server_defaul et default doivent être de type cha?ne. #????##????#index sert à définir l'index, nullable sert à définir s'il est vide et commentaire sert à définir les informations du commentaire. #????##????#Compatible avec le type de colonne Mysql#????##????#Mais il y a une question devant vous Si vous souhaitez utiliser le type tinyint, comment définir le jeu de caractères ? #????#rrreee#????# Prenons comme exemple les int et varchar les plus couramment utilisés. Avant de l'utiliser, vous devez importer le package correspondant?: #????#rrreee#????#Il y a trois paramètres dans le type TINYINT?: #????##???? #display_width définit la largeur du type de colonne. Après le réglage, tinyint(1) sera affiché si le deuxième non signé est une plage de valeurs positives, si le troisième remplissage à zéro est rempli, la valeur est de type numérique, voici les instructions d'utilisation du code source de TINYINT. #????#rrreee#????# Permettez-moi de présenter brièvement le type de cha?ne avec varchar comme code. Le type de cha?ne doit déclarer explicitement la longueur de la cha?ne, qui est implémentée par length. Si la valeur de length n'est pas ajoutée, une erreur sera générée. se produisent lors de l’initialisation. #????#

    自定義數(shù)據(jù)庫名和字符集編碼

    __tablename__設(shè)置的是自定義數(shù)據(jù)表名,底下的設(shè)置的是數(shù)據(jù)表字符集編碼,要使用utf8mb4編碼和utf8mb4_general_ci編碼,這里就不做過多的解釋了。

    __tablename__ = &#39;wm_user_user&#39;
    # ...
    __table_args__ = {
        &#39;mysql_charset&#39;: &#39;utf8mb4&#39;,
        &#39;mysql_collate&#39;: &#39;utf8mb4_general_ci&#39;
    }

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

    Outils d'IA chauds

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    Video Face Swap

    Video Face Swap

    échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

    Article chaud

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    Sujets chauds

    Tutoriel PHP
    1502
    276
    Comment utiliser PHP combiné avec l'IA pour obtenir la correction de texte de la syntaxe PHP détection et l'optimisation Comment utiliser PHP combiné avec l'IA pour obtenir la correction de texte de la syntaxe PHP détection et l'optimisation Jul 25, 2025 pm 08:57 PM

    Pour réaliser la correction d'erreur de texte et l'optimisation de la syntaxe avec l'IA, vous devez suivre les étapes suivantes: 1. Sélectionnez un modèle ou une API d'IA appropriée, tels que Baidu, Tencent API ou bibliothèque NLP open source; 2. Appelez l'API via Curl ou Guzzle de PHP et traitez les résultats de retour; 3. Afficher les informations de correction d'erreur dans l'application et permettre aux utilisateurs de choisir d'adopter l'adoption; 4. Utilisez PHP-L et PHP_CODESNIFFER pour la détection de syntaxe et l'optimisation du code; 5. Collectez en continu les commentaires et mettez à jour le modèle ou les règles pour améliorer l'effet. Lorsque vous choisissez AIAPI, concentrez-vous sur l'évaluation de la précision, de la vitesse de réponse, du prix et du support pour PHP. L'optimisation du code doit suivre les spécifications du PSR, utiliser le cache raisonnablement, éviter les requêtes circulaires, revoir le code régulièrement et utiliser x

    Python Seaborn JointPlot Exemple Python Seaborn JointPlot Exemple Jul 26, 2025 am 08:11 AM

    Utilisez le plot conjoint de Seaborn pour visualiser rapidement la relation et la distribution entre deux variables; 2. Le tracé de diffusion de base est implémenté par sn.jointplot (data = pointes, x = "total_bill", y = "Tip", kind = "dispers"), le centre est un tracé de dispersion et l'histogramme est affiché sur les c?tés supérieur et inférieur et droit; 3. Ajouter des lignes de régression et des informations de densité à un kind = "reg" et combiner marginal_kws pour définir le style de tracé de bord; 4. Lorsque le volume de données est important, il est recommandé d'utiliser "Hex"

    Python List to String Conversion Exemple Python List to String Conversion Exemple Jul 26, 2025 am 08:00 AM

    Les listes de cha?nes peuvent être fusionnées avec la méthode join (), telles que '' .join (mots) pour obtenir "HelloworldFrompython"; 2. Les listes de nombres doivent être converties en cha?nes avec MAP (STR, nombres) ou [STR (x) Forxinnumbers] avant de rejoindre; 3. Toute liste de types peut être directement convertie en cha?nes avec des supports et des devis, adaptées au débogage; 4. Les formats personnalisés peuvent être implémentés par des expressions de générateur combinées avec join (), telles que '|' .join (f "[{item}]" ForIteminitems)

    Python Connexion à SQL Server PyoDBC Exemple Python Connexion à SQL Server PyoDBC Exemple Jul 30, 2025 am 02:53 AM

    Installez PYODBC: utilisez la commande PiPInstallpyodbc pour installer la bibliothèque; 2. Connectez SQLServer: utilisez la cha?ne de connexion contenant le pilote, le serveur, la base de données, l'UID / PWD ou TrustEd_Connection via la méthode pyoDBC.Connect () et prendre en charge l'authentification SQL ou l'authentification Windows respectivement; 3. Vérifiez le pilote installé: exécutez pyodbc.Drivers () et filtrez le nom du pilote contenant ?SQLServer? pour vous assurer que le nom du pilote correct est utilisé tel que ?ODBCDriver17 pour SQLServer?; 4. Paramètres clés de la cha?ne de connexion

    Python pandas fondre l'exemple Python pandas fondre l'exemple Jul 27, 2025 am 02:48 AM

    pandas.melt () est utilisé pour convertir les données de format larges en format long. La réponse consiste à définir de nouveaux noms de colonne en spécifiant id_vars conserver la colonne d'identification, Value_Vars Sélectionnez la colonne à fondre, var_name et valeur_name, 1.id_vars = 'name' signifie que la colonne de nom reste inchangée, 2.Value_vars = [Math ',' English ',' Science '. du nom de colonne d'origine, 4.value_name = 'score' définit le nouveau nom de colonne de la valeur d'origine et génère enfin trois colonnes, notamment le nom, le sujet et le score.

    Optimisation de Python pour les opérations liées à la mémoire Optimisation de Python pour les opérations liées à la mémoire Jul 28, 2025 am 03:22 AM

    PythonCanBeoptimizedFormemory-Boundoperations AdreductoverHeadHroughGenerators, EfficientDatastructures et ManagingObjectliFetimes.first, useGeneratorsInSteadofListStoproceSlargedataseSeItematatime, EvitingLoadingEnteryToMeToMeMory.

    Python django forme l'exemple Python django forme l'exemple Jul 27, 2025 am 02:50 AM

    Définissez d'abord un formulaire ContactForm contenant le nom, la bo?te aux lettres et les champs de message; 2. De l'avis, la soumission du formulaire est traitée en jugeant la demande de poste, et après la vérification, nettoyée_data est obtenue et la réponse est retournée, sinon le formulaire vide sera rendu; 3. Dans le modèle, utilisez {{form.as_p}} pour rendre le champ et ajouter {% csrf_token%} pour empêcher les attaques CSRF; 4. Configurer le routage d'URL vers Point / Contact / vers la vue Contact_View; Utilisez Modelform pour associer directement le modèle pour obtenir un stockage de données. Djangoforms implémente le traitement intégré de la vérification des données, le rendu HTML et les invites d'erreur, qui convient au développement rapide des fonctions de forme s?re.

    Qu'est-ce que l'arbitrage statistique dans les crypto-monnaies? Comment fonctionne l'arbitrage statistique? Qu'est-ce que l'arbitrage statistique dans les crypto-monnaies? Comment fonctionne l'arbitrage statistique? Jul 30, 2025 pm 09:12 PM

    L'introduction à l'arbitrage statistique L'arbitrage statistique est une méthode commerciale qui capture l'inadéquation des prix sur le marché financier basé sur des modèles mathématiques. Sa philosophie principale découle de la régression moyenne, c'est-à-dire que les prix des actifs peuvent s'écarter des tendances à long terme à court terme, mais reviendront éventuellement à leur moyenne historique. Les traders utilisent des méthodes statistiques pour analyser la corrélation entre les actifs et rechercher des portefeuilles qui changent généralement de manière synchrone. Lorsque la relation de prix de ces actifs est anormalement déviée, des opportunités d'arbitrage se présentent. Sur le marché des crypto-monnaies, l'arbitrage statistique est particulièrement répandu, principalement en raison de l'inefficacité et des fluctuations drastiques du marché lui-même. Contrairement aux marchés financiers traditionnels, les crypto-monnaies fonctionnent 24h / 24 et leurs prix sont très susceptibles de briser les nouvelles, les sentiments des médias sociaux et les améliorations technologiques. Cette fluctuation des prix constante crée fréquemment un biais de prix et fournit aux arbitrageurs un

    See all articles