Python框架學習之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_KEY
12 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_token
38 # print(form.validate_on_submit())
39 if form.validate_on_submit():
40 # 獲取提交的數據
41 name = form.u_name.data
42 passwd = form.passwd.data
43 confirm_passwd = form.confirm_passwd.data
44 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中的常用擴展包