6.4 表單
使用flask-wtf表單擴充套件,可以幫助進行csrf驗證,幫助我們快速定義表單模板,而且可以幫助我們在檢視中驗證表的資料
pip install flask-wtf
6.4.1 不使用flask-wtf擴充套件時,表單需要自己處理
#模板檔案
from flask importflask,render_template,request
username= request.form['username']
password= request.form['password']printusername,passwordreturn「success」else:return render_template(「login.html」)
6.4.2 使用flask-wtf擴充套件
需要設定 secret_key 的配置引數,前端設定csrf_token
模板頁:
# 設定csrd_token}}
} } }}
} }} }
}檢視函式
#coding:utf-8
from flask importflask, render_template, redirect, url_for, sessionfrom flask_wtf importflaskformfrom wtforms importstringfield, passwordfield, submitfieldfrom wtforms.validators importdatarequired, equalto
#定義表單的模型類
classregisterform(flaskform):"""自定義的登錄檔單模型類"""
#名字 驗證器/驗證器
#datarequired 保證資料必須填寫,並且不能為空
user_name = stringfield(label=u"使用者名稱", validators=[datarequired(u"使用者名稱不能為空")])
password= passwordfield(label=u"密碼", validators=[datarequired(u"密碼不能為空")])
password2= passwordfield(label=u"確認密碼", validators=[datarequired(u"確認密碼不能為空"),
equalto("password", u"兩次密碼不一致")])
submit= submitfield(label=u"提交")
form =registerform()#判斷form中的資料是否合理
#如果form中的資料完全滿足所有的驗證器,則返回真,否則返回假
ifform.validate_on_submit():#表示驗證合格
#提取資料
uname =form.user_name.data
pwd=form.password.data
pwd2=form.password2.dataprint(uname, pwd, pwd2)
session["user_name"] =unamereturn redirect(url_for("index"))return render_template("register.html", form=form)
6.5.1 if語句
6.5.2 for語句
6.6.1 不帶引數巨集的定義與使用
定義:name="username"
value=""
size="30"/>使用}
6.6.2 帶引數巨集的定義與使用
定義name="}"
value="}"
size="}"/>使用}
6.6.3 將巨集單獨封裝在html檔案中
檔名可以自定義macro.html
在其它模板檔案中先導入,再呼叫
6.4 模板繼承
父模板:base.html
頂部選單
底部子模板:
需要填充的內容
模板繼承使用時注意點:
不支援多繼承。
為了便於閱讀,在子模板中使用extends時,盡量寫在模板的第一行。
不能在乙個模板檔案中定義多個相同名字的block標籤。
當在頁面中使用多個block標籤時,建議給結束標籤起個名字,當多個block巢狀時,閱讀性更好。
6.5 模板包含
jinja2模板中,除了巨集和繼承,還支援一種**重用的功能,叫包含(include)。它的功能是將另乙個模板整個載入到當前模板中,並直接渲染。
示例:include的使用
包含在使用時,如果包含的模板檔案不存在時,程式會丟擲templatenotfound異常,可以加上ignore missing關鍵字。如果包含的模板檔案不存在,會忽略這條include語句。
示例:include的使用加上關鍵字ignore missing
巨集、繼承、包含:
巨集(macro)、繼承(block)、包含(include)均能實現**的復用。
繼承(block)的本質是**替換,一般用來實現多個頁面中重複不變的區域。
巨集(macro)的功能類似函式,可以傳入引數,需要定義、呼叫。
包含(include)是直接將目標模板檔案整個渲染出來。
6.6 flask在模板中使用特殊變數和方法
6.6.1 config
}6.6.2 request
就是 flask 中表示當前請求的 request 物件,request物件中儲存了一次http請求的一切資訊。
6.6.3 url_for
request常用的屬性如下:
屬性說明型別
data
記錄請求的資料,並轉換為字串
form
記錄請求中的表單資料
multidict
args
記錄請求中的查詢引數
multidict
cookies
記錄請求中的cookie資訊
dict
headers
記錄請求中的報文頭
environheaders
method
記錄請求使用的http方法
get/post
url記錄請求的url位址
string
files
記錄請求上傳的檔案
}6.6.3 url_for}}
6.6.4 get_messages (閃現)
get_flashed_messages方法:
返回之前在flask中通過 flash() 傳入的資訊列表。把字串物件表示的訊息加入到乙個訊息佇列中,然後通過呼叫 get_flashed_messages() 方法取出。
}from flask importflask, render_template, flash
flash("hello1")
flash("hello2")
flash("hello3")globalflag
flag=falsereturn render_template("index.html")
}
python Flask 擴充套件
flask有兩大核心 werkzeug和jinja2。werkzeug實現路由 除錯和web伺服器閘道器介面。jinja2實現了模板。flask框架是以werkzeug為基礎實現的。werkzeug是乙個遵循wsgi協議的python函式庫。其內部實現了很多web框架底層的東西,比如request和...
03 HTML語法 表單
表單的基本介紹 表單是一種結構,用來在網際網路上收集使用者資訊,在html當中事先定義好乙個標籤來完成這件事,標籤名叫做form,它是乙個雙標籤。action和method是form的兩個是屬性 預設情況下 form只是宣告當前結構只是乙個表單,但是它裡面不存在任何的供使用者去輸入的方框。看起來就是...
起步,Python Flask記錄
首次寫部落格,主要為記錄一下這幾天來一直在學習的乙個python的框架flask。安裝flask需要用到pip或easy install 可選擇是否使用virtuanlenv安裝框架,這種安裝方式需要每次啟動時,都要進入python虛擬環境中。用命令 pip install virtualenv 安...