Python?Flask?模型介紹和配置方法
Flask數(shù)據(jù)模型和連接數(shù)據(jù)庫(kù)
flask是基于MTV的結(jié)構(gòu),其中M指的就是模型,即數(shù)據(jù)模型,在項(xiàng)目中對(duì)應(yīng)的是數(shù)據(jù)庫(kù)。flask與數(shù)據(jù)庫(kù)建立聯(lián)系有很多方法,但一般分為兩種,一種是使用pymsql對(duì)數(shù)據(jù)庫(kù)建立連接;還有一種是ORM映射的方式(基于pymysql),這種方式常用于web開(kāi)發(fā)。以對(duì)象的形式與數(shù)據(jù)庫(kù)表做映射,方便對(duì)象在頁(yè)面中顯示。下面紀(jì)錄以mysql和orm方式連接數(shù)據(jù)庫(kù)。
一、安裝
準(zhǔn)備工作,安裝一下庫(kù):
pip3 install pymysql 建公路 pip3 install flask-sqlalchemy 實(shí)現(xiàn)ORM映射 pip3 install flask-migrate 發(fā)布命令工具
二、配置數(shù)據(jù)庫(kù)連接、創(chuàng)建模型類(lèi)
步驟:
(1) 配置數(shù)據(jù)庫(kù)的連接路徑
# mysql+pymysql://user:password@hostip:port/databasename # 數(shù)據(jù)庫(kù)+pymysql://用戶(hù)名:密碼@主機(jī)ip:端口/數(shù)據(jù)庫(kù)名 SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@127.0.0.1:3306/flaskdemo'
(2) flask-sqlalchemy的搭建:在apps包下創(chuàng)建包ext(第三方庫(kù)的配置通常建個(gè)ext文件夾存放),用于存放與數(shù)據(jù)庫(kù)有關(guān)的代碼,在__init__.py中添加:
db = SQLAlchemy() ---->必須跟app聯(lián)系
在apps/init.py文件(這里我將啟動(dòng)app和app初始化分開(kāi)了,此處的__init__是app的初始化)下與app建立聯(lián)系:
def create_app(): .... # 跟app聯(lián)系 db.init_app(app) return app
(3) 創(chuàng)建模型:models.py,模型就是類(lèi),經(jīng)常稱(chēng)作模型類(lèi)
class User(db.Model): ------> user表 id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(15), nullable=False) password = db.Column(db.String(12), nullable=False) phone = db.Column(db.String(11), unique=True) rdatetime = db.Column(db.DateTime, default=datetime.now)
常見(jiàn)的數(shù)據(jù)類(lèi)型:
Integer 整型
String(size) 字符串類(lèi)型,務(wù)必指定大小
Text 長(zhǎng)文本類(lèi)型
DateTime 日期時(shí)間
Float 浮點(diǎn)類(lèi)型
Boolean 布爾類(lèi)型
PickleType 存儲(chǔ)pickle類(lèi)型 主要跟序列化有關(guān)
LargeBinary 存儲(chǔ)大的二進(jìn)制類(lèi)型
可選的:
primary_key=True 主鍵
autoincrement=True 自增
nullable=False 不允許為空
unique=True 唯一
default=datetime.now 默認(rèn)值 可以設(shè)置成當(dāng)前系統(tǒng)時(shí)間或者其他的值
三、使用命令創(chuàng)建數(shù)據(jù)庫(kù)表
a. 在app.py 中導(dǎo)入模型:from apps.user.models import User —》讓模型與app關(guān)聯(lián)
b. 在終端使用命令:db 建立數(shù)據(jù)庫(kù)/更新數(shù)據(jù)庫(kù)
flask db init -----》 產(chǎn)生一個(gè)文件夾migrations
flask db migrate -----> 自動(dòng)產(chǎn)生了一個(gè)版本文件
flask db upgrade ------> 同步,完成數(shù)據(jù)庫(kù)表創(chuàng)建
項(xiàng)目結(jié)構(gòu) | ---apps | ---ext | ---migrations flask db init 只需要init一次 |---versions 版本文件夾 |---71edde7ee937_.py ---》 flask db migrate 遷移 |---cc0dca61130f_.py flask db upgrade 同步 flask db downgrade 降級(jí)
四、以注冊(cè)為例
1.創(chuàng)建app、migrate(綁定app、數(shù)據(jù)庫(kù)),app.run啟動(dòng)入口
2.apps文件下__init__.py文件初始化app配置
3.數(shù)據(jù)庫(kù)配置
4.創(chuàng)建模型類(lèi)
5.通過(guò)命令創(chuàng)建數(shù)據(jù)庫(kù)表
flask db init -----》 產(chǎn)生一個(gè)文件夾migrations
flask db migrate -----> 自動(dòng)產(chǎn)生了一個(gè)版本文件
flask db upgrade ------> 同步,完成數(shù)據(jù)庫(kù)表創(chuàng)建
此刻在pycharm的數(shù)據(jù)庫(kù)視圖中可以看到創(chuàng)建好的數(shù)據(jù)庫(kù)表
6.編寫(xiě)注冊(cè)邏輯(視圖)
# 用戶(hù)注冊(cè) @user_bp.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': username = request.form.get('username') password = request.form.get('password') repassword = request.form.get('repassword') phone = request.form.get('phone') email = request.form.get('email') if password == repassword: # 注冊(cè)用戶(hù) user = User() user.username = username # 自定義加密:new_password = hashlib.sha256(password.encode('utf-8')).hexdigest() # 使用自帶的函數(shù)實(shí)現(xiàn)加密:generate_password_hash user.password = generate_password_hash(password) print(len(user.password)) user.phone = phone user.email = email # 添加并提交 db.session.add(user) db.session.commit() return redirect(url_for('user.index')) return render_template('user/register.html')
7.編寫(xiě)模板即html頁(yè)面即可實(shí)現(xiàn)簡(jiǎn)單的注冊(cè)功能,實(shí)現(xiàn)MTV的整合
到此這篇關(guān)于Python Flask 模型介紹和配置方法的文章就介紹到這了,更多相關(guān)Python Flask 模型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go/Python/Erlang編程語(yǔ)言對(duì)比分析及示例代碼
這篇文章主要介紹了Go/Python/Erlang編程語(yǔ)言對(duì)比分析及示例代碼,本文重點(diǎn)是給大家介紹go語(yǔ)言,從語(yǔ)言對(duì)比分析的角度切入介紹,需要的朋友可以參考下2018-04-04python連接讀寫(xiě)操作redis的完整代碼實(shí)例
這篇文章主要介紹了python連接讀寫(xiě)操作redis的完整代碼實(shí)例,包括redis連接與讀寫(xiě)操作,redis-sentinel哨兵模式下Python操作redis,redis-cluster(集群)模式下Python操作redis,需要的朋友可以參考下2023-01-01通過(guò)python 執(zhí)行 nohup 不生效的解決
這篇文章主要介紹了通過(guò)python 執(zhí)行 nohup 不生效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python 3.x讀寫(xiě)csv文件中數(shù)字的方法示例
在我們?nèi)粘i_(kāi)發(fā)中經(jīng)常需要對(duì)csv文件進(jìn)行讀寫(xiě),下面這篇文章主要給大家介紹了關(guān)于Python 3.x讀寫(xiě)csv文件中數(shù)字的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08python向MySQL數(shù)據(jù)庫(kù)插入數(shù)據(jù)的操作方法
這篇文章主要介紹了python向MySQL數(shù)據(jù)庫(kù)插入數(shù)據(jù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11pytorch預(yù)測(cè)之解決多次預(yù)測(cè)結(jié)果不一致問(wèn)題
這篇文章主要介紹了pytorch多次預(yù)測(cè)結(jié)果不一致的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06python腳本實(shí)現(xiàn)分析dns日志并對(duì)受訪域名排行
這篇文章主要介紹了python腳本實(shí)現(xiàn)分析dns日志并對(duì)受訪域名排行,本文是在Windows服務(wù)器環(huán)境中實(shí)現(xiàn),需要的朋友可以參考下2014-09-09對(duì)python中詞典的values值的修改或新增KEY詳解
今天小編就為大家分享一篇對(duì)python中詞典的values值的修改或新增KEY詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01