Flask-WTF 示例

Flask-WTF 示例


坑請注意

selectField字段提示: choices not valid


area = SelectField(coerce=int)




form.py
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired, Length, Email, EqualTo


class UserRegisterForm(FlaskForm):
    username = StringField('用戶名', [DataRequired('用戶名必填!'), Length(min=6, max=20, message='用戶名必須介於6-20字符!')])
    password = PasswordField('密碼', [DataRequired('密碼必填!'), Length(min=6, max=20, message='密碼必須介於6-20字符!')])
    confirm = PasswordField('重複密碼', [DataRequired('重複密碼必填!'), EqualTo('password', message='兩次密碼輸入不一致!')])
    email = StringField('郵箱', [DataRequired('郵箱必填!'), Email('郵箱格式不正確!')])

view.py

class RegView(MethodView):
    def get(self):
        form = UserRegisterForm(request.form)
        return render_template('register.html', form=form)

    def post(self):
        form = UserRegisterForm(request.form)
        if User.query.filter_by(username=form.username.data).first():
            flash("當前用戶名已經註冊!")
            return render_template('register.html', form=form)
        elif User.query.filter_by(email=form.email.data).first():
            flash("當前郵箱已經註冊!")
            return render_template('register.html', form=form)
        else:
            form.validate_on_submit()
            user = User(
                form.username.data,
                form.password.data,
                form.email.data,
            )
            user.save()
            return redirect(url_for('.login'))

jinja2 宏方法    helper.html    獲取 flask的 flash 消息

{% macro renden_field(field) %}
    {% if field.errors %}
        {% for error in field.errors %}
            <li style="font-size: medium">{{ error }}</li>
        {% endfor %}
    {% endif %}
{% endmacro %}

{% macro messages(get_flashed_messages) %}
    {% with messages = get_flashed_messages() %}
        {% if messages %}
            {% for message in messages %}
            <div class="alert alert-danger">
                <a href="#" class="close" data-dismiss="alert">×</a>
                {{ message }}
            </div>
            {% endfor %}
        {% endif %}
    {% endwith %}
{% endmacro %}




form.html

{% from 'helper.html' import renden_field,messages %}
        <form action="" class="form-horizontal" method="post">
            {{ form.csrf_token }}
            {{ messages(get_flashed_messages) }}
            <div class="panel-body">
                <div class="form-group">
                    {{ form.username.label(class="col-lg-2 col-sm-2 control-label") }}
                    <div class="col-md-6">
                        {{ form.username(class='from-control') }}
                        {{ renden_field(form.username) }}
                    </div>
                </div>
                <div class="form-group">
                    {{ form.password.label(class="col-lg-2 col-sm-2 control-label") }}
                    <div class="col-md-6">
                        {{ form.password(class='from-control') }}
                        {{ renden_field(form.password) }}
                    </div>
                </div>





發佈了14 篇原創文章 · 獲贊 30 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章