Flask模板


模板

模板導入就是將另一個模板加載到當前模板中,直接渲染。模板繼承和類的繼承含義是一樣的,主要是為了提高代碼重用,減輕開發人員的工作量。 典型應用:網站的頭部、尾部信息。

模板導入

  • 語法

    {% include(‘模板名稱’) %}
    
    {% include(‘目錄/模板名稱’) %}
    
  • 使用

    忽略模板文件不存在時的錯誤
    {% include 'footer.html' ignore missing %}
    
    #也可以組成模板列表,會按照順序依次加載
    {% include ['footer.html','bottom.html','end.html'] ignore missing %}`
    

模板繼承

如果發現在多個模板中某些內容相同,那就應該把這段內容定義到父模板中。
標簽block:用於在父模板中預留區域,留給子模板填充差異性的內容,名字不能相同。 為了更好的可讀性,建議給endblock標簽寫上名字,這個名字與對應的block名字相同。父模板中也可以使用上下文中傳遞過來的數據。

  • 父模板

    {%block 名稱%}
    預留區域,可以編寫默認內容,也可以沒有默認內容
    {%endblock %}
    
  • 子模板

    標簽extends:繼承,寫在子模板文件的第一行。
    {% extends "父模板路徑"%}
    如果子模版沒有填充,則使用父模版定義的默認值。如果有就是用子模板的實際填充內容
    {%block 名稱%}
    實際填充內容
    {%endblock %}
    

模板宏

在Flask的模板中有一個特性和Django內不同,這個特性就是宏。宏的功能和python中的函數類似。

  • 聲明一個宏

    {% macro 宏的名字(參數) %}
    ​ 內容
    {% endmacro %}
    
    
  • 調用宏

    {{  宏的名字(參數)   }}
    

在python函數可以實現代碼復用的作用,在模板中宏也有類似的作用
模板宏的使用和python中的函數的使用也類似,參數也是類似的。模板宏不常用,如果想看詳細內容 點這里(是csdn的一篇博客)

模板表單 Flask-WTF

當前端使用form表單進行參數傳遞時候,前端一般都會用js來校驗用戶輸入的參數是否合法。作為后端,不能依賴前端的校驗。要在前端校驗的基礎上在進行一遍校驗,防止程序出現異常。
當參數過多時,我們要對每個參數都進行校驗,顯得非常麻煩。在Flask中我們可以用Flask-WTF幫助我們快速校驗。Flask-WTF是集成WTForms,並帶有 csrf 令牌的安全表單和全局的 csrf 保護的功能。
安裝

pip install flsk-wtf
 

  1. WTForms支持的HTML標准字段
字段 說明
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密碼文本字段
HiddenField 隱藏文本字段
DateField 文本字段,值為datetime.date格式
DateTimeField 文本字段,值為datetime.datetime格式
IntegerField 文本字段,值為整數
DecimalField 文本字段,值為decimal.Decimal
FloatField 文本字段,值為浮點數
BooleanField 復選框,值為True和False
RadioField 一組單選框
SelectField 下拉列表
SelectMultipleField 下拉列表,可選擇多個值
FileField 文本上傳字段
SubmitField 表單提交按鈕
FormField 把表單作為字段嵌入另一個表單
FieldList 一組指定類型的字段
  1. WTForms常用驗證函數
函數 說明
DataRequired 確保字段中有數據
EqualTo 比較兩個字段的值,常用於比較兩次密碼輸入
Length 驗證輸入的字符串長度
NumberRange 驗證輸入的值在數字范圍內
URL 驗證URL
AnyOf 驗證輸入值在可選列表中
NoneOf 驗證輸入值不在可選列表中

注意:

使用Flask-WTF需要配置參數SECRET_KEY。
SECRET_KEY用來生成加密令牌,當CSRF激活的時候,該設置會根據設置的密匙生成加密

具體實現:


from flask import Flask, render_template, redirect, url_for, session, request, flash
# 導入wtf擴展的表單類
from flask_wtf import FlaskForm
# 導入自定義表單需要的字段
from wtforms import SubmitField, StringField, PasswordField
# 導入wtf擴展提供的表單驗證器
from wtforms.validators import DataRequired, EqualTo

app = Flask(__name__)

# 一定要記得配置SECRET_KEY!!!!!!!!!!!!!!
app.config['SECRET_KEY'] = 'python is good'


# 自定義表單類,文本字段、密碼字段、提交按鈕
class Login(FlaskForm):
    name = StringField(label='用戶:', validators=[DataRequired('用戶名不能為空')])
    pwd = PasswordField(label='密碼', validators=[DataRequired('密碼不能為空'), EqualTo('pwd1', '密碼不一樣')])
    pwd1 = PasswordField(label='確認密碼', validators=[DataRequired('密碼不能為空')])
    submit = SubmitField('提交')


@app.route('/login')
def login():
    return render_template('login.html')


# 定義根路由視圖函數,生成表單對象,獲取表單數據,進行表單數據驗證
@app.route('/', methods=['GET', 'POST'])
def index():
    form = Login()
    # 如果前端頁面的輸入的有錯誤,validate_on_submit是為flase
    if form.validate_on_submit():
        name = form.name.data
        pwd = form.pwd.data
        pwd1 = form.pwd1.data
        print(name, pwd, pwd1)
        return redirect(url_for('login'))
    return render_template('index.html', form=form)


if __name__ == '__main__':
    app.run(debug=True)

模板頁面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post">
    // 這個也是很重要的
    <!--設置csrf_token-->

    {{ form.csrf_token() }}

    {{ form.name.label }}
    <p>{{ form.name }}</p>

    {% for msg in form.name.errors %}
        <p>{{ msg }}</p>
    {% endfor %}

    {{ form.pwd.label }}
    <p>{{ form.pwd }}</p>

    {% for msg in form.pwd.errors %}
        <p>{{ msg }}</p>
    {% endfor %}

    {{ form.pwd1.label }}
    <p>{{ form.pwd1 }}</p>

    {% for msg in form.pwd1.errors %}
        <p>{{ msg }}</p>
    {% endfor %}

    <p>{{ form.submit() }}</p>
    
    {% for x in get_flashed_messages() %}
        {{ x }}
    {% endfor %}
</form>

</body>
</html>

如果有什么問題請大家在下方評論,我會改正的!—_—!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM