flask筆記5 模板

2021-10-07 13:43:11 字數 3052 閱讀 6340

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...