Flask form(登录,注册)
用户登录
from flask import Flask, render_template, request, redirect from wtforms import Form from wtforms.fields import core from wtforms.fields import html5 from wtforms.fields import simple from wtforms import validators from wtforms import widgetsapp = Flask(__name__, template_folder='templates')class LoginForm(Form):name = simple.StringField(label='用户名',validators=[validators.DataRequired(message='用户名不能为空.'),validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d')],widget=widgets.TextInput(),render_kw={'class': 'form-control'})pwd = simple.PasswordField(label='密码',validators=[validators.DataRequired(message='密码不能为空.'),validators.Length(min=8, message='用户名长度必须大于%(min)d'),validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}",message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符')],widget=widgets.PasswordInput(),render_kw={'class': 'form-control'})@app.route('/login', methods=['GET', 'POST']) def login():if request.method == 'GET':form = LoginForm()return render_template('login.html', form=form)else:form = LoginForm(formdata=request.form)if form.validate():print('用户提交数据通过格式验证,提交的值为:', form.data)else:print(form.errors)return render_template('login.html', form=form)if __name__ == '__main__':app.run(host="127.0.0.1", port=8000)login.py
login.py
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h1>登录</h1> <form method="post"><!--<input type="text" name="name">--><p>{{form.name.label}} {{form.name}} {{form.name.errors[0] }}</p><!--<input type="password" name="pwd">--><p>{{form.pwd.label}} {{form.pwd}} {{form.pwd.errors[0] }}</p><input type="submit" value="提交"> </form> </body> </html>
template/login.html
用户注册
from flask import Flask, render_template, request, redirect from wtforms import Form from wtforms.fields import core from wtforms.fields import html5 from wtforms.fields import simple from wtforms import validators from wtforms import widgetsapp = Flask(__name__, template_folder='templates') app.debug = Trueclass RegisterForm(Form):name = simple.StringField(label='用户名',validators=[validators.DataRequired()],widget=widgets.TextInput(),render_kw={'class': 'form-control'},default='alex')pwd = simple.PasswordField(label='密码',validators=[validators.DataRequired(message='密码不能为空.')],widget=widgets.PasswordInput(),render_kw={'class': 'form-control'})pwd_confirm = simple.PasswordField(label='重复密码',validators=[validators.DataRequired(message='重复密码不能为空.'),validators.EqualTo('pwd', message="两次密码输入不一致")],widget=widgets.PasswordInput(),render_kw={'class': 'form-control'})email = html5.EmailField(label='邮箱',validators=[validators.DataRequired(message='邮箱不能为空.'),validators.Email(message='邮箱格式错误')],widget=widgets.TextInput(input_type='email'),render_kw={'class': 'form-control'})gender = core.RadioField(label='性别',choices=((1, '男'),(2, '女'),),coerce=int)city = core.SelectField(label='城市',choices=(('bj', '北京'),('sh', '上海'),))hobby = core.SelectMultipleField(label='爱好',choices=((1, '篮球'),(2, '足球'),),coerce=int)favor = core.SelectMultipleField(label='喜好',choices=((1, '篮球'),(2, '足球'),),widget=widgets.ListWidget(prefix_label=False),option_widget=widgets.CheckboxInput(),coerce=int,default=[1, 2])def __init__(self, *args, **kwargs):super(RegisterForm, self).__init__(*args, **kwargs)self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球'))def validate_pwd_confirm(self, field):"""自定义pwd_confirm字段规则,例:与pwd字段是否一致:param field::return:"""# 最开始初始化时,self.data中已经有所有的值if field.data != self.data['pwd']:# raise validators.ValidationError("密码不一致") # 继续后续验证raise validators.StopValidation("密码不一致") # 不再继续后续验证 @app.route('/register', methods=['GET', 'POST']) def register():if request.method == 'GET':form = RegisterForm(data={'gender': 1})return render_template('register.html', form=form)else:form = RegisterForm(formdata=request.form)if form.validate():print('用户提交数据通过格式验证,提交的值为:', form.data)else:print(form.errors)return render_template('register.html', form=form)if __name__ == '__main__':app.run()
reg.py
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h1>用户注册</h1> <form method="post" novalidate style="padding:0 50px">{% for item in form %}<p>{{item.label}}: {{item}} {{item.errors[0] }}</p>{% endfor %}<input type="submit" value="提交"> </form> </body> </html>
template/reg.html
转载于:https://www.cnblogs.com/shaojiafeng/p/8337803.html
Flask form(登录,注册)相关推荐
- django 的form登录 注册
1 #!/usr/bin/env python 2 # -*- coding: utf8 -*- 3 #__Author: "Skiler Hao" 4 #date: 2017/3 ...
- flask简单登录注册
效果图 发布问答页面需要登录才能访问,没有登录会跳转到登录页面 模板继承,正则验证,数据库迁移,md5加密 mysql 5.7 登录页面 登录后的发布问答页面,右上角会显示用户名和注销 项目代码:码云 ...
- Flask项目实战——6—(前台用户模型、前台登录注册、图形验证码、手机短信验证码、添加表单验证短信验证码请求)
1.前台用户模型 前台用户模型定义 创建前台模型文件 apps/front/models.py # -*- encoding: utf-8 -*- """ @File : ...
- Django1.6 用Form实现注册登录注销修改密码(含代码!)
参照了潘军杰的博客,但他Django版本有点老了,改动了不少东西,总体来说参考价值还是很大的,点http://www.2goo.info/blog/panjj/Django/2010/06/05/94 ...
- Flask实战2问答平台-完成登录注册功能
本来可以提前完成这篇的,结果测试时发现了一些问题,稍后将会提到. 上篇中我们已经完成了登录注册的界面,现在具体完成其具体功能. 1.注册功能 因为注册成功后,才能登录,我们在主py文件中添加如下 @a ...
- 干货!flask登录注册token验证接口开发详解
今天给大家献上登录注册接口开发,是基于token验证的.咱们闲言少叙,进入正题! 首先看一下数据库模型: #pip install passlib from passlib.apps import c ...
- Flask后端实践 连载十六 Flask实现微信Web端及APP端登录注册
Flask后端实践 连载十六 Flask实现微信Web端及APP端登录注册 tips: 本文将实现微信Web端和APP端登陆注册 本文基于python3编写 代码仓库 项目场景 某天,项目经理说,项目 ...
- mysql中完成登陆注册_Flask+MySql实现用户登录注册
项目使用插件: flask_bootstrap flask_wtf flask_login flask_sqlalchemy 用户模型类: #!/usr/bin/env python # -*- co ...
- python注册登录+mysql_Flask+MySql实现用户登录注册
项目使用插件: flask_bootstrap flask_wtf flask_login flask_sqlalchemy 用户模型类: #!/usr/bin/env python # -*- co ...
最新文章
- js事件触发器fireEvent和dispatchEvent
- H5页面获取原生APP的登录状态
- 【转】Spring 的下载、安装和使用
- 如何编写简单的lua小脚本@@
- java压缩文件读取_用Java读取/写入压缩和非压缩文件
- BZOJ 2822: [AHOI2012]树屋阶梯 [Catalan数 高精度]
- POJ-1426 Find The Multiple
- ndarray python 映射_NDArray — 基于Java的N维数组工具
- C语言数据结构各种排序算法(选择,直接,希尔,起泡等排序)
- html 隐藏_HTML实战篇:纯css制作二级横向以及竖向菜单导航
- 如何在C ++中实现内联函数?
- android 时间同步软件,Network Time(时间同步软件)
- SQL 数据库基础知识总结(一)
- 数值计算方法第一章—数值计算引论
- 中英文 织梦 html5,织梦dedecms如何做中英文多语言站点
- 组合数学之第一章之完美覆盖,断层线,幻方,拉丁方,Nim取子游戏
- Linux实战——Shell编程练习(更新12题)
- python的撤销和回退_撤销和回退
- 【树状数组】清点人数
- 随手记录系列-伯克森悖论-李永乐谈学习-辛普森悖论
热门文章
- C语言注释与C++注释的相互转换
- java 注解与反射_Java注解与反射直接上手
- mysql无法启动如何备份文件_mysql 5.7 停电导致无法启动、如何备份数据,重新安装mysql...
- xlsxwriter写行合并_使用实现XlsxWriter创建Excel文件并编辑
- linux关闭gvim命令,Linux 下 8 种退出 vim 编辑器的方法
- python产品发布会_【Mac系统 + Python + Django】之开发一个发布会系统【Django模型(三)】...
- python字符串出栈方法_1.Python实现字符串反转的几种方法
- python3中的int类型占64位,有没有什么办法来强制Python来使用64位整数的Windows?
- Java ArrayList与LinkedList数据结构和特点
- 计算机进制简称,NO.A.0007——二进制;计算机容量单位B、KB、MB、GB和TB关系