1. 程式人生 > >Python框架學習之Flask中的常用擴展包

Python框架學習之Flask中的常用擴展包

mongodb command class 結合 基本 init sig ring code

  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中的常用擴展包