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

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

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

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

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

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

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

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

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

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

  5. Flask框架获取用户IP地址的方法

    本文实例讲述了python使用Flask框架获取用户IP地址的方法.分享给大家供大家参考.具体如下: 下面的代码包含了html页面和python代码,非常详细,如果你正使用Flask,也可以学习一下最 ...

  6. 使用Boostrap框架写一个登录\注册界面

    Bootstrap是一个Web前端开发框架,使用它提供的css.js文件可以简单.方便地美化HTML控件.一般情况下,对控件的美化需要我们自己编写css代码,并通过标签选择器.类选择器.ID选择器为指 ...

  7. vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)

    前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...

  8. Flask学习之五 用户登录

    英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins 中文翻译地址:http:// ...

  9. Django框架(十八)—— auth框架:用户登录、注册、认证

    目录 auth模块 一.什么是author模块 二.auth模块的使用 1.创建超级用户(create_superuser()) 2.验证用户(authenticate()) 3.登录用户(login ...

随机推荐

  1. WPF 图片抗锯齿,尤其是小图片更为严重

    WPF 图片抗锯齿,尤其是小图片更为严重 UseLayoutRounding="True" 搞定,就是这么给力,分享给大家

  2. Day 11 函数名,闭包,装饰器. +作业

    '''一.函数名.def func(): print(5555)print(func)#输出结果 <function func at 0x026B5E88> 打印函数地址. # 1. 函数 ...

  3. Sort-242. Valid Anagram

    Given two strings s and t, write a function to determine if t is an anagram of s. For example,s = &q ...

  4. Java并发编程之happens-before

    happens-before是JMM最核心的概念,理解happens-before是理解JMM的关键. 一.JMM的设计 首先,让我们先分析一下JMM的设计意图.从JMM的设计者的角度,在设计JMM的 ...

  5. java的几种定时任务

    本篇博文主要是讲述2.x 版本的quartz下的实现方案,1.x 版本的实现方式大致原理一致,但是具体的实现方式有些不一致,具体体现在获取  scheduler 这个类的方式上有些不同,这里不作过多的 ...

  6. C# MVC 与Java MVC

    C# MVC与Java MVC都是三层结构:Controller.View.Model,基本上没有什么区别. 但是C# MVC有很多的变形模式: 上图所示就是C#里面MVC变向模型,里面包含BLL.C ...

  7. C# 5.0-.Net新特性

    调用者信息特性 CallerMemberNameAttribute | CallerFilePathAttribute | CallerLineNumberAttribute .NET Framewo ...

  8. python学习笔记03-用户输入

    name=Input(“your name”)  此处接受的数据类型为字符串 整数转字符串  str(123) 整数转字符串  int(“123”)

  9. php if 的实现

    简单分析下php中的分支背后的实现 <?php ){ echo "a"; }else{ echo "b"; } 1.语法分析 unticked_state ...

  10. 微服务是"银弹"吗?

    前言:所谓"银弹",本意是用金属银做成的子弹:在古老的传说里它是杀死狼人的有效武器.在著作<人月神话>也有描述.微服务是当前软件界流行的名词,那么它能成为像银弹一样厉害 ...