您的位置:首页 > 其它

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

2016-05-09 11:01 1501 查看
使用 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()
就可以输出反馈信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: