使用 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() 就可以输出反馈信息