標籤:文本 NPU ODB type upgrade flask 設定 就是 提交
Flask架構是一個擴充性非常強的架構,所以導致它有非常多的擴充包。這些擴充包的功能都很強大。本節主要匯總一些常用的擴充包。
一、 Flask-Script
pip install flask-script
作用:
1. 可以讓我們通過命令列的方式啟動伺服器,還可以手動指定參數,如ip,port。
python hello.py runserver -h 127.0.0.1 -p 6666
2. 結合Flask-Migration擴充包可以實現對資料的遷移
二、 Flask-WTF
作用是為了能夠更好的處理web表單。表單包括:表單標籤、表單域、表單按鈕。
Flask-WTF中封裝了WTForms,除了能處理表單之外,還有表單資料驗證的功能
常用標準欄位:
StringField:文字欄位,相當於input標籤中type=text
TextAreaField:多文字欄位,
PasswordField:密碼文字框
HiddenField:隱藏欄位,常用於隱藏csrf_token
SelectField:下來列表欄位
SubmitField:提交表單欄位
FileField:檔案上傳欄位
常用驗證函式:
DataRequired():確保欄位中有資料
EqualTo():比較兩個欄位的值,用於密碼校正
Length():驗證輸入的字串的長度
NumberRange():驗證輸入的值在數字範圍內
URL():驗證URL
AnyOf():驗證輸入值在可選列表中
注意:使用該擴充包必須設定SECRET_KEY參數。
1 from flask import Flask, render_template 2 3 from flask_script import Manager 4 from flask_wtf import FlaskForm 5 from wtforms import StringField, PasswordField, SubmitField 6 from wtforms.validators import DataRequired, EqualTo 7 8 from settings import MyConfig 9 app = Flask(__name__)10 11 # 配置資訊中主要設定配置參數,SECRET_KEY12 app.config.from_object(MyConfig)13 # 使用Manager來代替app的啟動功能14 manager = Manager(app)15 16 17 class MyForm(FlaskForm):18 """自訂一個表單類"""19 # 定義一個文字標籤,並驗證資料是否為空白20 u_name = StringField(validators=[DataRequired()])21 # 定義一個密碼框, 密碼需要判斷是否相等22 passwd = PasswordField(validators=[DataRequired(), EqualTo(‘confirm_passwd‘)])23 confirm_passwd = PasswordField(validators=[DataRequired()])24 # 定義一個提交按鈕,用來提交資料25 submit = SubmitField(label=‘註冊‘)26 27 28 @app.route(‘/‘, methods=[‘GET‘, ‘POST‘])29 def index():30 31 # 執行個體化一個form對象32 form = MyForm()33 34 # 只有當每個欄位都滿足條件後才能提交35 # validate_on_submit():有兩個功能:36 # 1.先驗證設定了validators屬性的欄位是否有資料,37 # 2.如果有資料,那麼會驗證表單中是否設定csrf_token38 # print(form.validate_on_submit())39 if form.validate_on_submit():40 # 擷取提交的資料41 name = form.u_name.data42 passwd = form.passwd.data43 confirm_passwd = form.confirm_passwd.data44 print(name, passwd, confirm_passwd)45 46 return render_template(‘wtf.html‘, form=form)47 48 49 # 使用flask_script擴充包啟動這個檔案50 51 52 if __name__ == ‘__main__‘:53 # app.run(debug=True)54 manager.run()
三、 資料庫遷移
1.為什麼要資料庫遷移
在Flask-SQLAlchemy中,只提供了db.create_all()和db.drop_all()兩個介面,這對於想要添加或刪除某些欄位是非常麻煩的,在表中有資料的情況下基本上是沒法操作的。因為使用這兩個介面都會導致表中資料被清空。資料庫的遷移本質上就是產生表的操作。而且還是在不修改表中資料的情況下完成的,只是修改表的結構,不改變資料,如增加或刪除命令。
2. 如何使用Flask-Migrate擴充包
在Flask中可以使用一個擴充包Flask-Migrate來實現資料庫遷移工作,它與Flask-Script擴充一起使用,可以提高效率。
為了匯出資料庫遷移命令,Flask-Migarte提供了一個MigrateCommand類,可以附加到Flask-Script的manager對象上。
migrate = Migrate(app, db)
manager.add_command(‘db‘, MigrateCommand)
3. 具體命令
python database.py db init:在項目目錄下建立一個migrations目錄,所有遷移檔案都放在裡面
python database.py db migrate -m "init migration":自動建立一個遷移指令碼,裡面有upgrade()和downgrade()。-m 添加一個注釋資訊
python database.py db upgrade:更新資料庫
python database.py db history:尋找每個操作產生的版本號碼,
python database.py db downgrade 版本號碼:恢複到指定版本
四、Flask-Session
在Flask架構中,沒有整合把瀏覽器中的cookie資訊中的session資訊儲存到伺服器中,這樣不太方便。但是Flask-Session擴充包提供了這樣的功能,把session資訊同步到伺服器中。而一般來說像session、輪播圖等易變資料都是把儲存到Redis資料庫中,因為Redis的效能極高。接下來就在項目中配置Redis來來儲存session。
在項目設定檔中添加以下欄位:
SESSION_TYPE:指明儲存session的地方。可以有Redis,Mongodb, memcached,filesystem等,這裡就選擇用Redis。
SESSION_REDIS:指明一個Redis資料庫物件。
SESSION_USE_SIGNER:設定是否開啟簽名,也就是為了更進一步的保證安全。
PERMANENT_SESSION_LIFETIME:設定session的有效期間為多久。一般設定為3-5天。
Python架構學習之Flask中的常用擴充包