table of contents
01模板與自定義過濾器
02表單wtf原理簡介
03 表單模型類與模板使用
04表單接收檢驗引數 05
06模板巨集
07巨集定義在外部
08繼承、閃現
jinja2模板
from flask import render_template
}傳單個值
return render_template('index.html', name=result)
kv方式多值
data=
return render_template('index.html', **data)
傳其他型別變數:
data=,
"my_int":18,
"my_list":[1,2,3],
}return render_template('index.html', **data)
name = }
my_dict: }
my_dict: }
my_list: }
my_list[my_int]: }
過濾器
字串過濾器:safe禁用轉義
}列表過濾器:length獲取列表長度
}這功能厲害是厲害,但後端的事還要跑到前端來做麼
自定義的過濾器如果和內建過濾器重名,會覆蓋內建
return render_template('index.html', **data)
def list_step_2(li):
return li[::2]
#註冊過濾器,使用名不是函式名而是註冊名
經典方式:
def login():
if request.methods == 'post':
username=request.form['username']
print username
return "success"
else:
return render_template('login.html')
引入flask-wtf,抽象出乙個表單類
需要時建立該類的物件,在模板中使用該物件的屬性。可幫助csrf跨站請求偽造攻擊校驗
(疑問:前端直接使用物件屬性對style設定會不會有影響)
pip install flask-wtf
from flask_wtf import flaskform
wtforms支援html中的大部分欄位type
from wtforms import stringfield,passwordfield,submitfield
自帶有常用的驗證函式(datarequired不為空,equalto兩值相等)
from wtforms.validators import datarequired, equalto
csrf校驗依賴:請求cookie金鑰,請求體中值
定義表單模型類:
class registerform(object):
user_name=stringfield(label=u"使用者名稱",validators=[datarequired(u"使用者名稱不能為空")])
password=passwordfield(label=u"密碼",validators=[datarequired(u"密碼不能為空")])
password2=passwordfield(label=u"確認密碼",validators=[datarequired(u"確認密碼不能為空"),equalto("password","兩次密碼不一致")])
submit=submitfield(label=u"提交")
label為說明文字,validators為校驗器,驗證函式datarequired內傳入提示資訊,equalto還需要傳入比較的欄位名
檢視函式使用form類的物件:
def register():
form=registerform()
return render_template('register.html',form=form)
前端:
不管是get還是post都需要建立表單物件(form=registerform()),flask會把前端傳送的資料存放到物件中。可以省略request對get與post判斷
判斷form中的資料是否合理:
form.validate_on_submit()
如果form中的資料完全滿足,返回真
get方式訪問時,此處資料空,不為真,只需判斷為真時提取資料處理
user_name=form.user_name.data
csrf的金鑰在表單中也要帶
}def register():
form=registerform()
if form.validate_on_submit():
user_name=form.user_name.data
print(user_name)
session["user_name"]=user_name
return redirect(url_for("index"))
return render_template('register.html',form=form)
因為提交後form中已有資料,所以再次進入填寫頁面,渲染的使用者名稱會保留上次填寫的使用者名稱
在模板中將重複出現的**定義成巨集以復用
}傳入引數
}預設引數
}單獨建乙個檔案,只保留巨集定義
在模板中匯入
}擴充套件父模板:父模板挖空,子模版繼承,填空
包含子模板:
特殊變數和方法:config、request、url_for也都能在模板中使用
flash提供訊息資料:
通過flash()傳入資訊列表,把訊息加入到訊息佇列(存到session)
from flask import flash
flash("flash message")
get_flashed_messages()取出}
Flask快速入門 5 模板渲染
檢視函式from flask import flask,request,render template,markup def index age 18 classes 班級 schools s1 s2 s3 user 2 3 4 safe test return render template in...
flask學習筆記(五) 模板
歡迎加入知了課堂,學習flask python flask系列 1 基礎 python flask框架 全棧開發 之前,我一直使用檢視函式返回字串的方式實現響應客戶端。然而實際開發中,這種方式開發的 對開發者而言十分混亂。不利於專案的維護,更加不便於實現複雜的業務邏輯。於是必須使用模板,將必要的資料...
Flask學習筆記之模板(一)
這裡,首先我們在templates資料夾下,建立乙個html檔案。這個是模板基本使用 然後通過檢視函式進行對映 這樣我們就完成了乙個渲染模板的功能。當然,我們也可以傳入變數到模板中,講上面的 進行簡單修改 這個是模板基本使用 def index return render template inde...