国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Flask Web Development —— Web表單(上)

CODING / 1158人閱讀

摘要:每個表單域都可以連接到一個或多個是一個用于檢查用戶提交的輸入是否合法的函數。表單域構造函數的第一個參數是一個,在渲染表單到時會使用。驗證確保提交的表單域不為空。表單域驗證都是直接從包中導入。表格展示了一組支持的標準表單域。

第二章中介紹的request對象公開了所有客戶端發送的請求信息。特別是request.form可以訪問POST請求提交的表單數據。

盡管Flask的request對象提供的支持足以處理web表單,但依然有許多任務會變得單調且重復。表單的HTML代碼生成和驗證提交的表單數據就是兩個很好的例子。

Flask-WTF擴展使得處理web表單能獲得更愉快的體驗。該擴展是一個封裝了與框架無關的WTForms包的Flask集成。

Flask-WTF和它的依賴集可以通過pip來安裝:

(venv) $ pip install flask-wtf
1、跨站請求偽造(CSRF)保護

默認情況下,Flask-WTF保護各種形式對跨站請求偽造(CSRF)攻擊。一個CSRF攻擊發生在一個惡意網站發送請求給受害者登錄的其他網站。

為了實現CSRF保護,Flask-WTF需要應用程序去配置一個加密密鑰。Flask-WTF使用這個密鑰去生成加密令牌用于驗證請求表單數據的真實性。示例4-1展示如何配置加密密鑰。

示例4-1. hello.py:Flask-WTF配置

app = Flask(__name__)
app.config["SECRET_KEY"] = "hard to guess string"

app.config字典通常是框架、擴展或應用程序自身存放配置變量的地方,可以使用標準字典語法添加配置值到app.config中。配置對象提供方法來從文件或環境導入配置值。

SECRET_KEY配置變量作為Flask和一些第三方擴展的通用加密密鑰。加密的強度取決于這個變量的值。給你構建的每個應用程序選擇不同的密鑰,并確保這個字符串不被其他任何人知道。

  

注:為了提高安全性,密鑰應該存儲在一個環境變量中,而不是嵌入到代碼中。這個會在第7章中描述。

2、表單類

使用Flask-WTF時,每個web表單是由繼承自Form類的子類來展現的。該類在表單中定義了一組表單域,每個都表示為一個對象。每個表單域都可以連接到一個或多個validatorsvalidators是一個用于檢查用戶提交的輸入是否合法的函數。

示例4-2展示了一個擁有文本框和提交按鈕的簡單web表單。

示例4-2. hello.py:表單類定義

from flask.ext.wtf import Form
from wtforms import StringField, SubmitField 
from wtforms.validators import Required

class NameForm(Form):
    name = StringField("What is your name?", validators=[Required()]) 
    submit = SubmitField("Submit")

表單中的域被定義為類的變量,且每個類的變量都指定一個表單域類型對象。在上一個示例中,NameForm表單有一個name文本框和submit提交按鈕。StringField類表示一個type="text"屬性的標簽。SubmitField類表示一個type="submit"屬性的標簽。表單域構造函數的第一個參數是一個label,在渲染表單到HTML時會使用。

StringField構造函數包含可選參數validators,它定義了一組檢查來驗證用戶提交的數據。Required()驗證確保提交的表單域不為空。

  

注:Flask-WTF擴展定義了表單基類,所以它從flask.ext.wtf導入。表單域、驗證都是直接從WTForms包中導入。

表格4-1展示了一組WTForms支持的標準表單域。

表格4-1. WTForms標準HTML表單域

表格4-2展示了一組WTForms內建驗證。

表格4-2. WTForms驗證

3、HTML渲染的表單

表單域是可調用的,調用時從模板渲染它們到HTML。假設視圖函數傳遞一個參數名為formNameForm實例給模板,模板就會生成一個簡單的HTML表單,如下所示:

{{ form.name.label }} {{ form.name() }} {{ form.submit() }}

當然,結果是什么都沒有。為了改變表單的外觀顯示,任何發送給該表單域的參數會被轉換為HTML表單域屬性;例如,你可以給定表單域idclass屬性,然后定義CSS樣式:

{{ form.name.label }} {{ form.name(id="my-text-field") }} {{ form.submit() }}

即使有HTML屬性,努力用這種方式渲染表單是非常重要的,所以最好是盡可能的使用Bootstrap自帶的一系列表單樣式。Flask-Bootstrap使用Bootstrap的預定義表單樣式來提供高級的幫助函數來渲染整個Flask-WTF表單,這些操作都只需要一個調用即可完成。使用Flask-Bootstrap,上一個表單可以像下面這樣來渲染:

{% import "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form) }}

import指令和常規的Python腳本一樣的作用并且允許模板元素被導入并在許多模板中使用。被導入的bootstrap/wtf.html文件,定義了幫助函數使用Bootstrap來渲染Flask-WTF表單。wtf.quick_form()函數傳入Flask-WTF表單對象并使用默認Bootstrap樣式渲染它。示例4-3展示了完整的hello.py模板。

示例4-3. templates/index.html:使用Flask-WTF和Flask-Bootstrap渲染表單

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %}Flasky{% endblock %}

{% block page_content %}





{{ wtf.quick_form(form) }}
{% endblock %}

目前模板的內容區有兩塊。第一塊是類為page-header的div輸出一個問候語。這里使用了模板條件判斷語句。在Jinja2中格式為{% if variable %}...{% else %}...{% endif %}。如果判斷條件為True則渲染ifelse之間的內容。如果判斷條件為False則渲染elseendif之間的內容。示例模板會渲染字符串“Hello, Stranger!”當name模板參數未定義的時候。第二塊內容使用wtf.quick_form()函數渲染NameForm對象。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37454.html

相關文章

  • Flask Web Development —— Web表單(下)

    摘要:局部變量用于保存從表單中接收到的名字,初始化時變量為。在語句中,這個名字被賦值給局部變量且表單域的數據屬性通過賦值為空字符串而被清除。示例重定向和用戶會話在上一個版本中,局部變量用于保存用戶在表單中輸入的姓名。 4、視圖函數中的表單操作 在新版本的hello.py中,index()視圖函數渲染表單并接收其數據。示例4-4展示更新后的index()視圖函數。 示例4-4. hello...

    yeooo 評論0 收藏0
  • Flask Web Development —— 模板(

    摘要:用真實的值替換變量并返回最終響應字符串,這個過程稱為渲染。示例展示模板實現該響應。控制結構提供一些控制結構用于改變模板流。這個示例展示如何使用循環做到這些同樣支持宏,這和代碼中的函數很像。 寫代碼最關鍵的是要易于維護且結構清晰整潔。目前為止,你看到的例子都過于簡單從而沒有做這方面的要求。Flask視圖函數希望將兩個應該完全獨立的任務一并處理,兩個任務有兩種代碼,一并處理勢必會引發問題。...

    fizz 評論0 收藏0
  • Flask Web Development —— Email

    摘要:函數攜帶目的地址主題郵件體模板和一組關鍵字參數。許多擴展操作是在假設有活動的應用程序和請求上下文的情況下進行的。但是當函數在一個不同的線程上執行,應用程序上下文需要人為地創建使用。例如,執行函數可以將郵件發送到的任務隊列中。 許多類型的應用程序都會在某些事件發生的時候通知用戶,常用的溝通方法就是電子郵件。盡管在Flask應用程序中,可以使用Python標準庫中的smtplib包來發送電...

    SKYZACK 評論0 收藏0
  • Flask Web Development —— 模板(下)

    摘要:如果路由重組,模板中的鏈接將被打斷而變得無法訪問。靜態文件應用程序不僅僅是由代碼和模板組成。當服務器收到來自之前示例的,它會產生一個響應包含的文件內容。一個優雅的解決方案是允許服務器只發送時間給瀏覽器,由瀏覽器轉為當地時間并渲染。 4、鏈接 任何應用程序都有多個路由,必然需要包含鏈接來連接不同的頁面,例如導航欄。 在模板中,對于簡單的路由直接寫URLs做鏈接是非常瑣碎麻煩的,而給帶...

    raoyi 評論0 收藏0
  • Flask Web Development —— 基本應用程序結構(下)

    摘要:有兩類應用級和請求級。一個響應中非常重要的部分是狀態碼,默認設置來指示請求已經成功處理。重定向通常由響應狀態碼注明并且重定向的由頭部的給出。因為這些變化,應用程序獲得一組基本的命令行選項。運行顯示可用信息在應用程序上下文的內部運行一個。 5、請求-響應循環 現在你已經玩過一個基本的Flask應用程序,你也許想要知道更多關于Flask如何施展魔力。下面章節描述了一些框架設計方面的特點。...

    caohaoyu 評論0 收藏0

發表評論

0條評論

CODING

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<