Flask博客項目-註冊用戶(十三)

有了用戶登錄界面,自然也少不了給用戶註冊的頁面,接下來就是對用戶的註冊進行處理:

首先在main.py中添加註冊頁面的路由:

@main_blueprint.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm()

    if form.validate_on_submit():
        new_user = User(username=form.username.data)
        new_user.set_password(form.password.data)

        db.session.add()
        db.session.commit()

        flash("Your user has been created, please login now", category="success")
        return redirect(url_for('main.login'))

    return render_template('register.html', form=form)

隨後,我們需要創建register.html讓flask渲染

{% extends "base.html" %}
{% block title %}Register{% endblock %}
{% block body %}
    <div class="row">
        <div class="col-md-4"></div>
        <div class="col-md-4">
            <h1 class="text-center">Register</h1>
            <form method="POST" action="{{ url_for('main.register') }}">
                {{ form.hidden_tag() }}
                <div class="form-group">
                    {{ form.username.label }}
                    {% if form.username.errors %}
                        {% for e in form.username.errors %}
                            <p class="help-block">{{ e }}</p>
                        {% endfor %}
                    {% endif %}
                    {{ form.username(class_='form-control') }}
                </div>
                <div class="form-group">
                    {{ form.password.label }}
                    {% if form.password.errors %}
                        {% for e in form.password.errors %}
                            <p class="help-block">{{ e }}</p>
                        {% endfor %}
                    {% endif %}
                    {{ form.password(class_='form-control') }}
                </div>
                <div class="form-group">
                    {{ form.confirm.label }}
                    {% if form.confirm.errors %}
                        {% for e in form.confirm.errors %}
                            <p class="help-block">{{ e }}</p>
                        {% endfor %}
                    {% endif %}
                    {{ form.confirm(class_='form-control') }}
                </div>
                <div class="form-group">
                    {{ form.captcha.label }}
                    {% if form.captcha.errors %}
                        {% for e in form.captcha.errors %}
                            <p class="help-block">{{ e }}</p>
                        {% endfor %}
                    {% endif %}
                    {{ form.captcha(class_='form-control') }}
                    <img src="/code " onclick="this.src='/code?'+ Math.random()">
                </div>
                <input class="btn btn-primary" type="submit" value="Register">
            </form>
        </div>
    </div>
{% endblock %}

同時,我們需要有註冊的表單,打開forms.py:

class RegisterForm(FlaskForm):
    from wtforms.validators import EqualTo

    username = StringField('Username', [DataRequired(), Length(max=255)])
    password = PasswordField('Password', [DataRequired(), Length(min=8)])
    confirm = PasswordField('Confirm Password', [DataRequired(), EqualTo('password')])
    captcha = StringField('Captcha', validators=[DataRequired()])

    def validate(self):
        check_validate = super().validate()

        if not check_validate:
            return False

        user = User.query.filter_by(username=self.username.data).first()

        if user:
            self.username.errors.append('Username already exists')
            return False

        return True

點擊此處查看Git源碼


我們打開註冊界面:


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章