1. 程式人生 > >flask框架表單模型Form並新增驗證

flask框架表單模型Form並新增驗證

異常:ImportError: cannot import name ‘ForkingMixIn’

示例

(register.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="POST">
    {{ form.csrf_token }}
    {% for msg in get_flashed_messages() %}
        <p>{{msg}}</p>
    {% endfor %}

    <p>{{ form.username.label }}:</p>{{ form.username }}
    {% for msg in form.username.errors %}
    {{msg}}
    {% endfor %}

    <p>{{ form.password.label }}:</p>{{ form.password }}
    {% for msg in form.password.errors %}
    {{msg}}
    {% endfor %}

    <p>{{ form.password2.label }}:</p>{{ form.password2 }}
    {% for msg in form.password2.errors %}
    {{msg}}
    {% endfor %}

    <p>{{ form.submit }}</p>
</form>
</body>
</html>

app.py

# _*_ coding:utf-8 _*_


from flask import Flask, render_template, redirect, url_for, session, flash
from flask_wtf import Form
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo

app = Flask(__name__)
app.config["SECRET_KEY"] = "abcdefgh12344ijklmn904opq"


@app.route("/")
def index():
	return redirect(url_for("register"))


class RegisterForm(Form):
	"""定義表單類"""
	username = StringField(label=u"使用者名稱", validators=[DataRequired(u"使用者名稱不能為空")])
	password = PasswordField(label=u"密碼", validators=[DataRequired(u"密碼不能為空")])
	password2 = PasswordField(label=u"驗證密碼", validators=[DataRequired(u"驗證密碼不能為空"), EqualTo("password", u"兩次密碼不一樣")])
	submit = SubmitField(label=u"提交")


@app.route("/register", methods=["GET", "POST"])
def register():
	form = RegisterForm()
	if form.validate_on_submit():
		"""驗證通過"""
		username = form.username.data
		password = form.password.data
		passwor2d = form.password2.data
		session["username"] = username
		return redirect(url_for("welcome"))
	else:
		flash("歡迎註冊!")
	return render_template("register.html", form=form)


@app.route("/welcome")
def welcome():
	username = session.get("username", "Stranger")
	return "%s 註冊成功!" % username


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


測試

1