web表單html
web表單是瀏覽者和網之間的一個互動平臺,完成瀏覽器和服務器之間的數據交互。python
一、用Flask-WTF來處理表單web
(1)在根目錄下編輯擴展配置--config.py算法
CSRF_ENABLED = True SECRET_KEY = 'you-will-never-guess'
CSRF_ENABLED配置跨站點保護,就是防止程序挾持用戶執行非本意的操做,是一種web的攻擊行爲,這個設置會提升web的安全性。數據庫
SECRET_KEY是當CSRE(跨站請求僞造)激活時執行,實現加密用來驗證表單,避免網站的惡意攻擊。flask
(2)在Flask中讀取該配置文件,(文件 app/__init__.py):小程序
from flask import Flask app = Flask(__name__) app.config.from_object('config') from app import views
二、用戶登陸表單的實現瀏覽器
使用 Flask-WTF 時,每一個 Web 表單都由一個繼承自 Form 的類表示。這個類定義表單中的一組字段,每一個字段都用對象表示。字段對象可安全
附屬一個或多個驗證函數。驗證函數用來驗證用戶提交的輸入值是否符合要求。在這個小程序中是由OpenId完成用戶的驗證的,相似於Hadoop中的SSH加密算法,不須要服務器
調用數據庫中的用戶名和密碼登陸,瀏覽器會根據用戶產生的cookie對用戶進行識別。
如今新建第一個表單(app/forms.py):
from flask.ext.wtf import Form from wtforms import StringField, BooleanField from wtforms.validators import DataRequired class LoginForm(Form): openid = StringField('openid', validators=[DataRequired()]) remember_me = BooleanField('remember_me', default=False)
解釋:StringField類表示屬性爲 type="text" 的 <input> 元素;BooleanField表示複選框,選擇true或者flase。DataRequired 驗證器只是簡單地檢查相應域提交的數據是不是空。
WTForms支持的HTML標準字段:
WTForms內置的驗證函數:
三、建立表單模板
建立好表單,那麼如今該作的就是用HTML模板實現表單中的功能。接着用HTML寫出佈局。
這裏就是咱們登陸的模板(文件 app/templates/login.html):
1 <!-- extend from base layout --> 2 {% extends "base.html" %} 3 4 {% block content %} 5 <h1>Sign In</h1> 6 <form action="" method="post" name="login"> 7 {{form2.hidden_tag()}} 8 <p> 9 Please enter your OpenID:<br> 10 {{form2.openid(size=80)}}<br> 11 </p> 12 <p>{{form2.remember_me}} Remember Me</p> 13 <p><input type="submit" value="Sign In"></p> 14 </form> 15 {% endblock %}
♦須要注意的是,建立表單模板須要將表單中 「class LoginForm(Form)」 類中的功能 經過參數(這裏是form2)傳入模板。當咱們編寫渲染這個模板的視圖函數的時候,咱們將會特別注意傳送這個模板參數到模板中。
♦form.hidden_tag() 模板參數將被替換爲一個隱藏字段,用來是實如今配置中激活的 CSRF 保護。若是你已經激活了 CSRF,這個字段須要出如今你全部的表單中。
四、建立表單視圖
如今完成渲染模板,由於功能已經在表單中實現,因此只須要在視圖中調用一下表單便可。下面是視圖文件( app/views.py):
1 from flask import render_template, flash, redirect 2 from app import app 3 from .forms import LoginForm 4 5 # index view function suppressed for brevity 6 7 @app.route('/login', methods = ['GET', 'POST']) 8 def login(): 9 form = LoginForm() 10 return render_template('login.html', 11 title = 'Sign In', 12 form2 = form)
在這裏我特別將form2和form區別開來,form2其實就是模板中抽象的概念,沒有實際的意義,只有在視圖文件中指定它的功能時才被賦予form=LoginForm()的實
例化的功能。也就是上面的模板中form2能夠換成任意的變量,只要在視圖中賦值就能夠了。