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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

substr php,PHP substr() 函数

更多实例例子 1使用带有不同正负数的 start 参数&#xff1a;<?phpecho substr("Hello world",10)."";echo substr("Hello world",1)."";echo substr("Hello world",3)."";echo substr("Hello world&quo…

怎么看so文件是哪个aar引进来的_手机爱奇艺下载视频存在哪个文件夹

我们很多朋友喜欢看视频使用爱奇艺观看&#xff0c;并且喜欢直接把视频缓冲到手机里&#xff0c;或是直接下载视频文件&#xff0c;但是经常不知道手机爱奇艺下载视频存在哪个文件夹&#xff0c;不知道怎么分享给好友或是传到电脑上&#xff0c;下面就来简单介绍一下。手机爱奇…

Node.js 异步编程之 Callback介绍

原文&#xff1a;http://www.jb51.net/article/63070.htm ------------------------------------- Node.js 基于 JavaScript 引擎 v8&#xff0c;是单线程的。Node.js 采用了与通常 Web 上的 JavaScript 异步编程的方式来处理会造成阻塞的I/O操作。在 Node.js 中读取文件、访问…

php双向链表+性能,PHP双向链表定义与用法示例

本文实例讲述了PHP双向链表定义与用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;由于需要对一组数据多次进行移动操作&#xff0c;所以写个双向链表。但对php实在不熟悉&#xff0c;虽然测试各个方法没啥问题&#xff0c;就是不知道php语言深层的这些指针和unset…

反击爬虫,前端工程师的脑洞可以有多大?

对于一张网页&#xff0c;我们往往希望它是结构良好&#xff0c;内容清晰的&#xff0c;这样搜索引擎才能准确地认知它。 而反过来&#xff0c;又有一些情景&#xff0c;我们不希望内容能被轻易获取&#xff0c; 前言 比方说电商网站的交易额&#xff0c;教育网站的题目等。因为…

Spring与Struts框架整合

Spring&#xff0c;负责对象对象创建 Struts&#xff0c;用Action处理请求 Spring与Struts框架整合&#xff0c;关键点&#xff1a;让struts框架action对象的创建&#xff0c;交给spring完成&#xff01; 1.步骤&#xff1a; 引入jar文件 1&#xff09;引入struts .jar相关文件…

esxi能直通的显卡型号_显卡刷bios教程

一般来说显卡默认的出厂bios就已经很稳定&#xff0c;如果没有特殊情况下建议不要刷显卡bios。一般而言部分网友刷显卡BIOS目的是开核或超频&#xff0c;那么对于一个不会刷显卡bios的网友来说肯定会问显卡怎么刷bios类似的问题&#xff0c;那么本文这里就说一下有关显卡怎么刷…

关于Linux网卡调优之:RPS (Receive Packet Steering)

昨天在查LVS调度均衡性问题时&#xff0c;最终确定是 persistence_timeout 参数会使用IP哈希。目的是为了保证长连接&#xff0c;即一定时间内访问到的是同一台机器。而我们内部系统&#xff0c;由于出口IP相对单一&#xff0c;所以总会被哈希到相同的RealServer。 过去使用LVS…

footer.php置底,CSS五种方式实现Footer置底

页脚置底(Sticky footer)就是让网页的footer部分始终在浏览器窗口的底部。当网页内容足够长以至超出浏览器可视高度时&#xff0c;页脚会随着内容被推到网页底部&#xff1b;但如果网页内容不够长&#xff0c;置底的页脚就会保持在浏览器窗口底部。方法一&#xff1a;将内容部分…

安卓adapter适配器作用_自带安卓系统的便携屏,能玩出什么花样?

之前说到去年出差太多&#xff0c;平常就把便携屏带上了。之前也说了如果是像笔者这样的出差狗也知道&#xff0c;托运需要提前去机场一路着急忙慌&#xff0c;不托运只需要打印登机牌(纸质才给报销)排队安检登机就完了。有的时候可以把标准显示器来回寄&#xff0c;只要包装强…

Gradle插件学习笔记(二)

之前介绍了Gradle插件的开发&#xff0c;这次会对功能进行一部分拓展&#xff0c;建议没有读过第一篇文章的朋友&#xff0c;先看一下Gradle插件学习笔记&#xff08;一&#xff09; Extension 之前的文章提到过&#xff0c;如何编写一个插件&#xff0c;但是并不能通过外面传递…

php抽象类继承抽象类,PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)...

本文实例讲述了PHP面向对象程序设计高级特性。分享给大家供大家参考&#xff0c;具体如下&#xff1a;静态属性class StaticExample {static public $aNum 0; // 静态共有属性static public function sayHello() { // 静态共有方法print "hello";}}print StaticExam…

Typora markdown公式换行等号对齐_Typora编写博客格式化文档的最佳软件

Typora-编写博客格式化文档的最佳软件Typora 不仅是一款支持实时预览的 Markdown 文本编辑器&#xff0c;而且还支持数学公式、代码块、思维导图等功能。它有 OS X、Windows、Linux 三个平台的版本&#xff0c;是完全免费的。作为技术人员或者专业人员&#xff0c;使用Markdown…

Bootstrap静态cdn

百度的静态资源库的 CDN 服务http://cdn.code.baidu.com/ &#xff0c;访问速度更快、加速效果更明显、没有速度和带宽限制、永久免费,引入代码如下&#xff1a; <!-- 新 Bootstrap 核心 CSS 文件 --> <link href"http://apps.bdimg.com/libs/bootstrap/3.3.0/…

php复习,PHP排序算法的复习和总结

直接上代码吧&#xff01;/** 插入排序(一维数组)* 每次将一个待排序的数据元素&#xff0c;插入到前面已经排好序的数列中的适当的位置&#xff0c;使数列依然有序&#xff1b;直到待排序的数据元素全部插入完成为止。*/function insertSort($arr){if(!is_array($arr) || coun…

docker-machine

vbox安装 sudo /sbin/vboxconfig &#xfffc; yum install gcc make yum install kernel-devel-3.10.0-514.26.2.el7.x86_64 转载于:https://www.cnblogs.com/yixiaoyi/p/dockermachine.html

intention lock_写作技巧:你写出来的情节有用吗?好情节的原则——LOCK系统

读者喜欢一本小说的原因只有一个&#xff1a;很棒的故事。——Donald Maass来&#xff0c;话筒对准这位小作家&#xff0c;请问你是如何构思故事的&#xff1f;是习惯于现在脑海中把故事都想好了&#xff0c;才开始写作&#xff1f;还是习惯于临场发挥&#xff0c;喜欢一屁股坐…

zookeeper基本操作

1.客户端连接 [txtest1 bin]$ jps 23433 Jps 23370 QuorumPeerMain #zookeeper进程[txtest1 bin]$ ./zkCli.sh -server test1:2182 Connecting to test1:2182 2018-01-24 23:42:09,024 [myid:] - INFO [main:Environment100] - Client environment:zookeeper.version3.4.5-…

sqllite java 密码,SQLite登录检查用户名和密码

我正在创建一个应用程序(使用Java和SQLite)(JFrame&#xff0c;使用Netbeans)我有我想要登录的用户 . (我有所有正确的包JDBC&#xff0c;SQLite等)我遇到的问题似乎是获取用户名/密码来检查我的users.db文件..我正在使用Java和SQLite . 我也在使用JDBC .我的一些代码作为一个例…

springmvc与struts2的区别

1&#xff09;springmvc的入口是一个servlet&#xff0c;即前端控制器&#xff0c;例如&#xff1a;*.action struts2入口是一个filter过虑器&#xff0c;即前端过滤器&#xff0c;例如&#xff1a;/* 2&#xff09;springmvc是基于方法开发&#xff0c;传递参数是通过方法形…