web.py——简单而且功能强大的Python web 框架(4):生成表单、获取输入和内容的验证
web.py的form模块能够帮助你生成HTML表单;获取用户的输入,并在处理或添加到数据库之前对其进行内容的验证。
表单简介
web.py的表单模块允许生成html表单,获取用户输入,并在处理或将其添加到数据库之前对其进行验证。
表单模块定义了2个主要类:Form类和Input类。表单使用一个或多个输入和可选验证器进行实例化。输入使用名称变量以及可选参数和验证器进行实例化。Input类被子类化为以下html输入(parens中的html类型):
1.Textbox - free form single line input (input type=”text”)
2.Password - free form single line that hides input (input type=”password”)
3.Textarea - free form multi line input (textarea)
4.Dropdown - mutually exclusive input for lists (select and options)
5.Radio - mutually exclusive input for a few options (input type=”radio”)
6.Checkbox - binary input (input type=”checkbox”)
7.Button - submit the form (button)
基本登录表单如下所示:
login = form.Form(form.Textbox('username'),form.Password('password'),form.Button('Login'),
)
这定义了一个基本形式。一旦定义,你应该再次调用它来获取一个复制的实例,然后你可以在其上调用render方法,如下所示:
f = login()
print(f.render())
这将输出以下HTML:
<table><tr><th><label for="username">username</label></th><td><input type="text" id="username" name="username"/><div class="post" style="display: none;"></div></td></tr><tr><th><label for="password">password</label></th><td><input type="password" id="password" name="password"/><div class="post" style="display: none;"></div></td></tr><tr><th><label for="Login"></label></th><td><button id="Login" name="Login">Login</button><div class="post" style="display: none;"></div></td></tr>
</table>
界面显示就如下:
实现输入功能
表单输入支持几个附加属性。例如:
form.textbox("firstname",form.notnull, #首先放置验证器,然后是可选属性class_="textEntry", #给文本框一个类名 - 注意下划线pre="pre", #直接在文本框之前post="post", #直接在文本框后面description="please enter your name", #描述字段,默认为表单名称(“firstname”)value="bob", #默认值id="nameid", #指定id
)
除了上述属性之外,还可以以相同的方式输入任何html属性。例如:
myform2 = form.Form(form.textbox('phonenumber',size="12",maxlength="12" )
)
实现下拉菜单:
下拉输入允许下拉列表中每个项目设置唯一的描述和值,为此,使用如下所示的元组创建下拉列表:
form.Dropdown('mydrop', [('value1', 'description1'), ('value2', 'description2')])
表格特征
除了单独的输入验证器,form模块还支持整个表单验证,允许比较字段。验证器作为变量’validators’(列表)传递:
signup = form.Form(form.Textbox('username'),form.Password('password'),form.Password('password_again'),validators = [form.Validator("Passwords didn't match.", lambda i: i.password == i.password_again)]
)
表单数据发布后,可以轻松地将其放入数据库(需要保证数据库方案的名称与您的webpy表单一致)。例如:
def POST(self):f = myform()if f.validates():web.insert('data_table', **f.d)#不要使用web.insert('data_table',** web.input())因为这样就可能提交恶意数据else:render.foo(f)
下面给出一个完整栗子:
#导入模块
import web
from web import form#模板
render = web.template.render('templates/')#url映射
urls = ('/', 'index')#表单
myform = form.Form( form.Textbox("boe"), form.Textbox("bax", form.notnull,form.regexp('\d+', 'Must be a digit'),form.Validator('Must be more than 5', lambda x:int(x)>5)),form.Textarea('moe'),form.Checkbox('curly'), form.Dropdown('french', ['mustard', 'fries', 'wine'])) class index: def GET(self): form = myform()# 确保通过调用它来创建表单的副本(上面一行)# 否则更改将全局显示return render.formtest(form)def POST(self): form = myform() if not form.validates(): return render.formtest(form)else:# form.d.boe和form ['boe'].value是等价的方式# 从表单中提取经过验证的参数。return "Grrreat success! boe: %s, bax: %s" % (form.d.boe, form['bax'].value)if __name__=="__main__":web.internalerror = web.debugerrorapp = web.application(urls, globals())app.run()
并且示例formtest.html(将其放在templates子目录中)如下:
$def with (form)<form name="main" method="post">
$if not form.valid: <p class="error">Try again, AmeriCAN:</p>
$:form.render()
<input type="submit" /> </form>
web.py——简单而且功能强大的Python web 框架(4):生成表单、获取输入和内容的验证相关推荐
- 还在用Spring Security?推荐你一款使用简单、功能强大的权限认证框架
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/qq_40058629/article/ details/116692302 我们先看一下官网介绍 ...
- Python小型web服务 web.py 简单教程
最近有个项目需要通过Java调用Python的服务,有考虑过gRPC,那是一个很好的框架,通信效率高.但是基于够用就好的原则,决定选择使用简单的HTTP通信方式,Python建立服务器,公开JSON ...
- 使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序
使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序 实现功能 C++实现代码 实现功能 使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序 C++实现代码 ...
- cropper简单且功能强大的图片剪裁jQuery插件
cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. cropper提供了大量的参数 ...
- 搜题接口 后台简单便捷功能强大
搜题接口 后台简单便捷功能强大 本平台优点: 多题库查题.独立后台.响应速度快.全网平台可查.功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台( ...
- html图片自动剪裁,jQuery简单且功能强大的图片剪裁插件
cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持鼠标滚轮操作,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. croppe ...
- 再见Spring Security!推荐一款功能强大的权限认证框架,用起来够优雅!
在我们做SpringBoot项目的时候,认证授权是必不可少的功能!我们经常会选择Shiro.Spring Security这类权限认证框架来实现,但这些框架使用起来有点繁琐,而且功能也不够强大. ...
- Python的Django框架中forms表单类的使用方法详解2
用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...
- nc65右键生成菜单_DbSchema生成表单和报表,原来如此简单
DbSchema 8 for Mac是mac上一款非常实用的商业数据库ER图绘制软件,可以轻松的对文档进行注释或标注,而且Dbschema集成了SQL和数据工具,能生成直观的图表.PDF文件或HTML ...
最新文章
- Python中的元编程:一个关于修饰器和元类的简单教程
- java线程池饱和策略_线程池的饱和策略-调用者执行 | 学步园
- Z变换(2020.10.21)
- Python Django开发案例:POST方式实现登录功能
- python中横向制表符_Python-“缩进中的制表符和空格使用不一致”
- 志愿填报显示服务器错误,高分落榜案例:志愿填报常见的3个低级错误
- 在控制台中录入学生姓名(python)
- Azure 物联网开发者体验 7 月更新:边缘计算开发工具,ARM64 设备开发,VS Code 容器化开发工具...
- 蓝桥杯 k倍区间 前缀和
- Win7如何禁用无线网卡
- Linux服务器异常关机,重启启动后weblogic无法启动
- join为什么每个字符都分割了 js_js如何截取以逗号隔开的字符串
- 如何从计算机中删除 Exchange Server 2003
- 计算机组成原理在线实验,计算机组成原理编程实验
- 工业机器人云监控与运维方案
- 增量式PID公式的4点疑问和理解
- QT课程设计:C++英语单词记忆软件程序开发
- 《Docker》高级篇
- 搜狗输入法——导入本地txt词库
- java画篮球_PS教程!手把手教你绘制炫酷的科比篮球海报