Le quatrième article sur la naissance d'une application Web basée sur flask. Cet article présente principalement comment interconnecter flask et mysql. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à
Le chapitre 1 implémente une partie de. la fonction de connexion. La raison pour laquelle on l'appelle une fonction partielle est qu'il n'est absolument pas permis d'écrire le nom d'utilisateur et le mot de passe sous forme de valeurs fixes. Une fonction entière nécessite au moins une inscription, une connexion, une modification du mot de passe, etc., ce qui nécessite de fournir. a La possibilité de stocker ces valeurs dans la base de données.
Les bases de données grand public actuelles sont divisées en deux types, à savoir les bases de données relationnelles et les bases de données NoSql. Pour les systèmes de petite et moyenne taille, les performances et la facilité d'utilisation des deux bases de données sont équivalentes, et ce sont toutes deux de bons choix. .
Configuration de base
Ici, nous utilisons le package d'intégration flask du framework de base de données SQLAlchemy, à savoir flask-SQLAlchemy, pour effectuer des opérations de base de données.
SQLAlchemy est un très bon framework qui simplifie les opérations de base de données. Il fournit des fonctions ORM de haut niveau et SQL de bas niveau, ce qui est très pratique à utiliser.
La méthode d'installation est la même que le type précédent, ou la commande pip :
pip3.6 install flask-sqlalchemy
Une fois l'installation terminée, modifiez la partie de configuration par défaut, importez d'abord le package :
from flask.ext.sqlalchemy import SQLAlchemy
Configurez ensuite la chaîne de lien :
app.config["SQLALCHEMY_DATABASE_URI"]='mysql://root:1234@localhost/cblog'
Configurez la soumission automatique des modifications une fois la demande terminée :
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"]=True
Instancier SQLAlchemy :
db=SQLAlchemy(app)
Paramètres du modèle
Une fois l'installation terminée , continuez à améliorer l'exemple de connexion et modifiez le fichier default.py, ajoutez le modèle utilisateur (classe) et le modèle de rôle (pour montrer l'association)
Classe de rôle
class Role(db.Model): #需继承模型 __tablename__="roles" #db中表明,如果不设置,则会与class同的默认名 id=db.Column(db.Integer,primary_key=True) #SQLAlchemy要求必须有主键,一般命名为id即可 name=db.Column(db.String(50),unique=True) #表示name为字符串,不重复 users=db.relationship("User",backref='role') #关联user模型,并在user中添加反向引用(backref)
Classe d'utilisateur
class User(db.Model): __tablename__="users" id=db.Column(db.Integer,primary_key=True) username=db.Column(db.String(50),unique=True,index=True) #此列带索引 password=db.Column(db.String(50)) role_id=db.Column(db.Integer,db.ForeignKey("roles.id")) #外键指向roles表中的id列
Nous devons réfléchir à la manière de l'exécuter ci-dessous, il doit être pratique et ne peut pas envahir le code logique, ce qui nécessite qu'il ne puisse pas être codé en dur dans le code logique. Par exemple, le code pour juger la base de données. status est passé en paramètre à app.run(). À ce stade, le shell est utile
Script de configuration
Si vous souhaitez que Flask prend en charge les scripts de ligne de commande, vous devez d'abord installer l'extension flask-script :
pip3.6 install flask-script
Modifier default.py Le code :
from flask.ext.script import Manager mamager=Manager(app) .... if __name__=='__main__': #app.run(debug=True) mamager.run()
Après modification, exécutez-le à nouveau :
python default.py
et constatez qu'il ne s'exécute pas correctement, mais il y a une invite :
Vous pouvez voir que les paramètres suivants sont requis, à savoir shell (exécuter le script), runserver (démarrer le service) et aider
Démarrez le service ci-dessous :
python default.py runserver
Service exécuté avec succès
Plus de configurations de base de données
Mais à ce moment-là, lors de l'accès au site (127.0.0.1:5000), une erreur 500 apparaîtra, indiquant qu'il n'y a pas de module mysql, pourquoi ? Évidemment, la raison est que le pilote mysql n'est pas installé. Utilisez la commande pip pour installer le pilote :
pip3.6 install MySQL-python
Une erreur est trouvée et le contenu affiché est (uniquement win system ici) :
Selon les invites, installez la boîte à outils C++ et suivez l'adresse de téléchargement sur les invites
landinghub.visualstudio.com/visual-cpp-build-tools
Une fois le téléchargement terminé, directement le fichier exe, installez
puis redémarrez pour installer MySQL-python. Après avoir passé par Baidu, j'ai découvert que MySQLdb. La bibliothèque ne prend en charge que jusqu'à python2.7 et ne prend plus en charge 3.x, je dois donc utiliser d'autres méthodes, utilisez la bibliothèque PyMySQL :
pip3.6 install PyMySQL
Modifiez ensuite le code de default.py. et ajoutez deux lignes :
import pymysql pymysql.install_as_MySQLdb()
Entrez le code source et faites attention à cette ligne :
sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]
pour réussir à utiliser et à vous connecter à MySQL .
Entrez la connexion dans le navigateur et entrez correctement sur le site.
Ensuite, utilisez le shell pour créer la table de base de données et entrez dans le répertoire racine de default.py :
python default.py shell from default import db db.create_all()
Si aucune erreur n'est signalée à ce niveau temps, alors la table de base de données devrait être Création terminée :
Migration de la base de données
Ensuite, le problème vient , à ce stade, modifier le modèle ne sera pas reflété dans la base de données, alors que dois-je faire si je le modifie ? Pour l'instant, c'est aussi très simple :
db.drop_all() db.create_all()
Mais cela n'est utilisé que pour le débogage maintenant. S'il y a déjà des données dans la base de données, ce sera certainement insupportable à ce moment-là. de la base de données Le plug-in de migration Migrate est ici. La première chose est toujours la même. Il faut l'installer :
pip3.6 install flask-migrate
Comme avant, après l'installation, modifiez le fichier default.py pour la configuration :
from flask.ext.migrate import Migrate,MigrateCommand migrate=Migrate(app,db) #配置迁移 mamager.add_command("db",MigrateCommand) #配置迁移命令
Utilisez ensuite la commande init pour initialiser l'entrepôt de migration
python default.py db init
La ligne de commande affiche :
Ajoutez ensuite le répertoire migrations :
indique que le fichier de migration a été initialisé.
migrate框架提供了一些命令来进行迁移操作,分别为(使用default.py文件举例):
#根据差异创建迁移 python default.py db migrate -m "说明" #改动差异 python default.py db upgrade #取消差异改动 python default.py db downgrade
回到表单
接下来看看登录如何与数据库关联起来,修改login方法内的代码:
@app.route("/login",methods=["POST"]) def loginPost(): username=request.form.get("username","") password=request.form.get("password","") user=User.query.filter_by(username=username,password=password).first() #数据库查询 if user is not None: session["user"]=username return render_template("/index.html",name=username,site_name='myblog') else: flash("您输入的用户名或密码错误") return render_template("/login.html") #返回的仍为登录页
执行结果非常完美。
一些总结
下面是一些关于python和db相连的总结性的东西
数据类型
列选项
数据库操作
查询过滤器
经过这几章,登录功能已经基本完成,在下一章中将讲解用户注册的相关功能。
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!