Flask資料互動

WDS望尘發表於2024-04-22

1)使用flask處理表單
傳統的前端通用表單,需要前後端共同完成操作,前端需要使用form標籤來定義表單,而後端則需要使用request.form來獲取post請求中的表單資料:
# 判斷請求方式
if request.method == 'POST':
# 獲取表單中name為username的文字域提交的資料
name = request.form.get('username')
# 獲取表單中name為password的文字域提交的資料
password=request.form.get('password')
return name+" "+password

上述的方法既沒有為表單提供保護措施,也不利於前後端分離的改進需求,固我們引入第三方擴充套件包:flask-wtf與wtforms,來實現由後端單獨完成的表單操作:
wtforms安裝:pip install wtforms
flask-wtf安裝:pip install Flask-WTF或pip install flask-wtf
wtforms依照功能類別來說wtforms分別由以下幾個類別:
Forms: 主要用於表單驗證、欄位定義、HTML生成,並把各種驗證流程聚集在一起進行驗證。
Fields: 包含各種型別的欄位,主要負責渲染(生成HTML文字域)和資料轉換。
Validator:主要用於驗證使用者輸入的資料的合法性。比如Length驗證器可以用於驗證輸入資料的長度。
Widgets:html外掛,允許使用者在欄位中透過該字典自定義html小部件。
Meta:用於使用者自定義wtforms功能(配置),例如csrf功能開啟。
Extensions:豐富的擴充套件庫,可以與其他框架結合使用,例如django。

Flask-WTF其實是對wtforms的簡單整合,也能透過新增動態token令牌的方式,為所有Form表單提供免受CSRF(Cross-site request forgery——跨站請求偽造)攻擊的技術支援

2)flash閃現的使用
匯入:from flask import flash;
後端的使用:flash("message"),message為訊息內容;
前端透過遍歷get_flashed_messages()獲取flash訊息內容

  • 示例程式碼(部分):

# --------------檢視函式------------------
@app.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template("flash.html")
else:
username = request.form.get('username')
password = request.form.get('password')
# user = User.query.filter(User.username == username, User.password == password).first()
user = User.query.filter(User.username == username).first()
if user and user.check_password(password):
session['user_id'] = user.id
session['user_name'] = user.username
session.permanent = True
return redirect(url_for("index"))
else:
flash('使用者名稱或密碼不正確,請檢查!')
return render_template('flash.html')

# ---------------前端使用-----------------
<div class="warning">
{% for message in get_flashed_messages() %}
<div class="alert alert-warning alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<strong>Warning!</strong> {{ message }}
</div>
{% endfor %}
</div>

相關文章