flask筆記二

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能夠換成任意的變量,只要在視圖中賦值就能夠了。

相關文章
相關標籤/搜索