用户登录

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(登录,注册)相关推荐

  1. django 的form登录 注册

    1 #!/usr/bin/env python 2 # -*- coding: utf8 -*- 3 #__Author: "Skiler Hao" 4 #date: 2017/3 ...

  2. flask简单登录注册

    效果图 发布问答页面需要登录才能访问,没有登录会跳转到登录页面 模板继承,正则验证,数据库迁移,md5加密 mysql 5.7 登录页面 登录后的发布问答页面,右上角会显示用户名和注销 项目代码:码云 ...

  3. Flask项目实战——6—(前台用户模型、前台登录注册、图形验证码、手机短信验证码、添加表单验证短信验证码请求)

    1.前台用户模型 前台用户模型定义 创建前台模型文件 apps/front/models.py # -*- encoding: utf-8 -*- """ @File : ...

  4. Django1.6 用Form实现注册登录注销修改密码(含代码!)

    参照了潘军杰的博客,但他Django版本有点老了,改动了不少东西,总体来说参考价值还是很大的,点http://www.2goo.info/blog/panjj/Django/2010/06/05/94 ...

  5. Flask实战2问答平台-完成登录注册功能

    本来可以提前完成这篇的,结果测试时发现了一些问题,稍后将会提到. 上篇中我们已经完成了登录注册的界面,现在具体完成其具体功能. 1.注册功能 因为注册成功后,才能登录,我们在主py文件中添加如下 @a ...

  6. 干货!flask登录注册token验证接口开发详解

    今天给大家献上登录注册接口开发,是基于token验证的.咱们闲言少叙,进入正题! 首先看一下数据库模型: #pip install passlib from passlib.apps import c ...

  7. Flask后端实践 连载十六 Flask实现微信Web端及APP端登录注册

    Flask后端实践 连载十六 Flask实现微信Web端及APP端登录注册 tips: 本文将实现微信Web端和APP端登陆注册 本文基于python3编写 代码仓库 项目场景 某天,项目经理说,项目 ...

  8. mysql中完成登陆注册_Flask+MySql实现用户登录注册

    项目使用插件: flask_bootstrap flask_wtf flask_login flask_sqlalchemy 用户模型类: #!/usr/bin/env python # -*- co ...

  9. python注册登录+mysql_Flask+MySql实现用户登录注册

    项目使用插件: flask_bootstrap flask_wtf flask_login flask_sqlalchemy 用户模型类: #!/usr/bin/env python # -*- co ...

最新文章

  1. js事件触发器fireEvent和dispatchEvent
  2. H5页面获取原生APP的登录状态
  3. 【转】Spring 的下载、安装和使用
  4. 如何编写简单的lua小脚本@@
  5. java压缩文件读取_用Java读取/写入压缩和非压缩文件
  6. BZOJ 2822: [AHOI2012]树屋阶梯 [Catalan数 高精度]
  7. POJ-1426 Find The Multiple
  8. ndarray python 映射_NDArray — 基于Java的N维数组工具
  9. C语言数据结构各种排序算法(选择,直接,希尔,起泡等排序)
  10. html 隐藏_HTML实战篇:纯css制作二级横向以及竖向菜单导航
  11. 如何在C ++中实现内联函数?
  12. android 时间同步软件,Network Time(时间同步软件)
  13. SQL 数据库基础知识总结(一)
  14. 数值计算方法第一章—数值计算引论
  15. 中英文 织梦 html5,织梦dedecms如何做中英文多语言站点
  16. 组合数学之第一章之完美覆盖,断层线,幻方,拉丁方,Nim取子游戏
  17. Linux实战——Shell编程练习(更新12题)
  18. python的撤销和回退_撤销和回退
  19. 【树状数组】清点人数
  20. 随手记录系列-伯克森悖论-李永乐谈学习-辛普森悖论

热门文章

  1. C语言注释与C++注释的相互转换
  2. java 注解与反射_Java注解与反射直接上手
  3. mysql无法启动如何备份文件_mysql 5.7 停电导致无法启动、如何备份数据,重新安装mysql...
  4. xlsxwriter写行合并_使用实现XlsxWriter创建Excel文件并编辑
  5. linux关闭gvim命令,Linux 下 8 种退出 vim 编辑器的方法
  6. python产品发布会_【Mac系统 + Python + Django】之开发一个发布会系统【Django模型(三)】...
  7. python字符串出栈方法_1.Python实现字符串反转的几种方法
  8. python3中的int类型占64位,有没有什么办法来强制Python来使用64位整数的Windows?
  9. Java ArrayList与LinkedList数据结构和特点
  10. 计算机进制简称,NO.A.0007——二进制;计算机容量单位B、KB、MB、GB和TB关系