使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化

使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能

使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整

使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

一、创建 Flask-WTF 验证类

创建 register.py 文件

/demo/modules/users/forms/register.py

 

# config=utf-8
from flask_wtf import Form
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired


class RegisterForm(Form):
    accountNumber = StringField('accountNumber', validators=[DataRequired()])
    password = PasswordField('password', validators=[DataRequired()])
    name = StringField('name', validators=[DataRequired()])

 

二、实现注册功能

/demo/modules/users/views.py

1.引用上一步创建的 register.py 文件中的 RegisterForm 类

from demo.modules.users.forms.users import RegisterForm

2.引入数据库访问类

from demo.common import db

3.增加 register 函数

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

    if request.method == 'POST':
        if not form.validate_on_submit():
            return render_template('register.html', form=form)

        user = User.query.filter(User.accountNumber == form.accountNumber.data).first()

        if user:
            flash("账号已存在")
            return render_template('register.html', form=form)

        user = User()
        user.accountNumber = form.accountNumber.data
        user.password = md5(form.password.data)
        user.name = form.name.data

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

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

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

4.增加 register.html 页面

在 /demo/modules/users/templates 目录创建 register.html 页面:

 

{% extends "base.html" %}
{% block title %}注册新用户{% endblock %}
{% block head %}
    <style type="text/css"></style>
{% endblock %}
{% block content %}
    <form action="{{ url_for('user.register') }}" method="post">
        {% if form.errors or get_flashed_messages() %}
            <ul>
                {% for name, errors in form.errors.items() %}
                    {% for error in errors %}
                        <li>{{ error }}</li>
                    {% endfor %}
                {% endfor %}
                {% for message in get_flashed_messages() %}
                    <li>{{ message }}</li>
                {% endfor %}
            </ul>
        {% endif %}
        账号:{{ form.accountNumber(size=20) }}<label>{{ form.accountNumber.errors[0] }}</label><br/>
        密码:<input name="password" type="password"/><br/>
        昵称:<input name="name" type="text"/><br/>
        {{ form.hidden_tag() }}
        <button type="submit">注册</button>
    </form>
    <a href="/">返回</a>
{% endblock %}

 

完成!现在可以通过 /user/register 来访问并注册新用户了

 

注意:在这里需要进行账号是否存在的验证,需要返回自定义信息,返回的办法是:

# 视图函数需要调用
flash('your response message for user')

# 前端页面调用
for message in get_flashed_messages()
就可以输出反馈信息

 

posted @ 2016-05-09 11:01  cjnmy36723  阅读(826)  评论(0编辑  收藏  举报