flask をベースにした Web アプリケーションの 4 番目の記事が誕生しました。この記事では主に flask と mysql を相互接続する方法を紹介します。興味のある方は参考にしてください。 前章で実装したログイン部分を部分関数と呼びます。ユーザー名とパスワードを固定値として書き込むことは絶対に不可能であるため、機能全体では少なくとも登録、ログイン、パスワードの変更などが必要であり、これらの値をデータベースに保存する方法が必要です。
現在主流のデータベースは、リレーショナル データベースと NoSql データベースの 2 種類に分かれており、中小規模のシステムでは、2 つのデータベースのパフォーマンスと使いやすさは同等であり、どちらも良い選択肢となります。
基本構成
ここでは、SQLAlchemy データベース フレームワークの flask 統合パッケージ、つまり flask-SQLAlchemy を使用してデータベース操作を実行します。
SQLAlchemy は、データベース操作を簡素化する非常に優れたフレームワークであり、非常に使いやすい高レベルの ORM 関数と低レベルの SQL 関数を提供します。
インストール方法は前のタイプと同じ、または pip コマンドです:
pip3.6 install flask-sqlalchemyインストールが完了したら、最初にパッケージをインポートします:
from flask.ext.sqlalchemy import SQLAlchemy
app.config["SQLALCHEMY_DATABASE_URI"]='mysql://root:1234@localhost/cblog'
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"]=True
db=SQLAlchemy(app)
インストールが完了したら、ログイン例の改善を続け、デフォルトを変更します。 pyファイルにUserモデル(クラス)とRoleモデル(関連付けを表示するため)を追加します
Roleクラス
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)
Userクラス
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列
以下は実行方法と侵入可能かどうかを考慮する必要があります。ロジック コードは、判定などのロジック コードにハードコーディングできない必要があります。db ステータスのコードはパラメーターとして app.run() に渡されるため、この時点でシェルが役に立ちます
。
設定スクリプト
flask でコマンドラインスクリプトをサポートしたい場合は、まず flask-script 拡張機能をインストールする必要があります:
pip3.6 install flask-script
default.py のコードを変更します:
from flask.ext.script import Manager mamager=Manager(app) .... if __name__=='__main__': #app.run(debug=True) mamager.run()
変更後、再度実行します:
python default.py
正常に実行されなかったことがわかりましたが、プロンプトが表示されました:
それぞれshell (実行スクリプト)、runserver (サービスの開始)、helpの後ろにパラメータが必要であることがわかります
サービスを開始します以下:
python default.py runserver
サービスは正常に実行されました
データベースの詳細設定
しかし、この時点でサイト (127.0.0.1:5000) にアクセスすると、mysql が存在しないことを示す 500 エラーが表示されます。モジュール、これはなぜですか?明らかに、その理由は、mysql ドライバーがインストールされていないことです。ドライバーをインストールするには、pip コマンドを使用します。 C++ ツール パッケージは、プロンプトのダウンロード アドレス
landinghub.visualstudio.com/visual-cpp-build-tools に従ってください
ダウンロードが完了したら、直接 exe ファイルになります
、再起動してインストールします。 MySQL-python はまだ動作しないことがわかりました。Baidu 以降では、MySQLdb ライブラリは python2.7 までしかサポートされず、3.x はサポートされなくなりました。その場合は、他の方法を使用して PyMySQL ライブラリを使用する必要があります。 :
pip3.6 install MySQL-python
次に、default.py のコードを変更して 2 行を追加します:
pip3.6 install PyMySQL
ソース コードを入力し、次の行に注目してください:
import pymysql pymysql.install_as_MySQLdb()を使用して mysql に接続します。
ブラウザに接続を入力し、サイトに正しくアクセスしてください。
次に、シェルを使用してデータベーステーブルを作成し、default.pyルートディレクトリに入ります:
sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]この時点でエラーが報告されない場合は、データベーステーブルが作成されるはずです:
Database移行
次に、この時点でモデルへの変更はデータベースに反映されません。では、変更した場合はどうすればよいでしょうか。現時点では、これも非常に簡単です:
python default.py shell from default import db db.create_all()
db.drop_all() db.create_all()
前と同様に、インストール後の構成のために、default.py ファイルを変更します: pip3.6 install flask-migrate
次に、init コマンドを使用して移行ウェアハウスを初期化します
from flask.ext.migrate import Migrate,MigrateCommand migrate=Migrate(app,db) #配置迁移 mamager.add_command("db",MigrateCommand) #配置迁移命令コマンド ラインに次のように表示されます: 次に、移行ディレクトリを追加します:
は、移行ファイルが初期化されたことを示します。
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相连的总结性的东西
数据类型
列选项
数据库操作
查询过滤器
经过这几章,登录功能已经基本完成,在下一章中将讲解用户注册的相关功能。
以上がflaskとmysql(python)の接続例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。