1. 程式人生 > 實用技巧 >flask 之 WTF

flask 之 WTF

from flask_wtf import Form
from wtforms import StringField, PasswordField, validators

class RegisterForm(Form):
    username = StringField('使用者名稱:', [validators.DataRequired('請輸入使用者名稱')])
    password = PasswordField('密碼:', [validators.DataRequired('請輸入密碼')])
    password2 = PasswordField('再次密碼:', [validators.EqualTo('
password', message='倆次密碼不一致')]) email = StringField('郵箱:', [validators.DataRequired('請輸入郵箱號'), validators.Email('請輸入有效的郵箱')]) ''' WTF 是flask 中的一個擴充套件庫 pip install flask-WTF Flask-WTF擴充套件了提供了WTForm表單,增強表單功能: - 增強了表單的驗證 - 防止csrf攻擊,就是跨站偽造請求攻擊,WTF 表單可以生成一個CSRF令牌 - 方便渲染頁面
''' ''' 自定義WTForm 表單類 需要繼承Form 這個類 StringField 文字欄位, 相當於type型別為text的input標籤 PasswordField 密碼文字欄位 DateField 文字欄位, 值為datetime.date格式 DateTimeField 文字欄位, 值為datetime.datetime格式 HiddenField 隱藏文字欄位 IntegerField 文字欄位, 值為整數 DecimalField 文字欄位, 值為decimal.Decimal FloatField 文字欄位, 值為浮點數 BooleanField 複選框, 值為True 和 False RadioField 一組單選框 SelectField 下拉列表 SelectMultipleField 下拉列表, 可選擇多個值 FileField 檔案上傳欄位 TextAreaField 多行文字欄位 SubmitField 表單提交按鈕
''' ''' validators 模組中驗證器類 DataRequired 驗證欄位是否為空,別名required Email 驗證email 是否有效 IPAddress 驗證是否有效的IP地址 EqualTo 比較兩個欄位是否相等 Length 驗證輸入字串的長度 NumberRange 驗證輸入的值在數字範圍內 Optional 無輸入值時跳過其它驗證函式 Regexp 使用正則表示式驗證輸入值 URL 驗證是否有效的URL AnyOf 確保輸入值在可選值列表中 NoneOf 確保輸入值不在可選列表中 '''
{% extends 'bash.html' %}
{% block title %}
使用者登入
{%  endblock %}

{% block header %}
    使用者登入
    <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/login.css') }}">

 {%  endblock %}
  {% block body %}
<form action="/login" method="POST">
     <table>
        <tbody>
            <tr>
                <td>使用者:</td>
                <td><input type="text" name="uid"></td>
            </tr>
            <tr>
                <td>密碼:</td>
                <td><input type="password" name="password"></td>
            </tr>
        <tr align="center">
            <td colspan="2">
                <button type="submit">確定</button>
                <button type="reset">取消</button>
            </td>
        </tr>
        </tbody>
    </table>
    session中uid的資料:    {{ session['uid'] }}
    {{uid}}
    {{password}}
</form>
 {%  endblock %}
/template/login.html
# register.py


from flask import Flask, render_template, request, redirect, url_for
from app_WTForm import RegisterForm


app = Flask(__name__)
app.secret_key = '123'

@app.route('/login/')
def login():

    return render_template('login.html')


@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm()
    if request.method == 'POST':
        if form.validate():
            return redirect(url_for('login'))
        else:
            return render_template('register.html', form=form)
    return render_template('register.html',form=form)

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