Python架構學習之Flask中的常用擴充包

來源:互聯網
上載者:User

標籤:文本   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中的常用擴充包

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.