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):生成表单、获取输入和内容的验证相关推荐

  1. 还在用Spring Security?推荐你一款使用简单、功能强大的权限认证框架

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/qq_40058629/article/ details/116692302 我们先看一下官网介绍 ...

  2. Python小型web服务 web.py 简单教程

    最近有个项目需要通过Java调用Python的服务,有考虑过gRPC,那是一个很好的框架,通信效率高.但是基于够用就好的原则,决定选择使用简单的HTTP通信方式,Python建立服务器,公开JSON ...

  3. 使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序

    使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序 实现功能 C++实现代码 实现功能 使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序 C++实现代码 ...

  4. cropper简单且功能强大的图片剪裁jQuery插件

    cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. cropper提供了大量的参数 ...

  5. 搜题接口 后台简单便捷功能强大

    搜题接口 后台简单便捷功能强大 本平台优点: 多题库查题.独立后台.响应速度快.全网平台可查.功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台( ...

  6. html图片自动剪裁,jQuery简单且功能强大的图片剪裁插件

    cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持鼠标滚轮操作,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. croppe ...

  7. 再见Spring Security!推荐一款功能强大的权限认证框架,用起来够优雅!

    ‍ ‍在我们做SpringBoot项目的时候,认证授权是必不可少的功能!我们经常会选择Shiro.Spring Security这类权限认证框架来实现,但这些框架使用起来有点繁琐,而且功能也不够强大. ...

  8. Python的Django框架中forms表单类的使用方法详解2

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  9. nc65右键生成菜单_DbSchema生成表单和报表,原来如此简单

    DbSchema 8 for Mac是mac上一款非常实用的商业数据库ER图绘制软件,可以轻松的对文档进行注释或标注,而且Dbschema集成了SQL和数据工具,能生成直观的图表.PDF文件或HTML ...

最新文章

  1. Python中的元编程:一个关于修饰器和元类的简单教程
  2. java线程池饱和策略_线程池的饱和策略-调用者执行 | 学步园
  3. Z变换(2020.10.21)
  4. Python Django开发案例:POST方式实现登录功能
  5. python中横向制表符_Python-“缩进中的制表符和空格使用不一致”
  6. 志愿填报显示服务器错误,高分落榜案例:志愿填报常见的3个低级错误
  7. 在控制台中录入学生姓名(python)
  8. Azure 物联网开发者体验 7 月更新:边缘计算开发工具,ARM64 设备开发,VS Code 容器化开发工具...
  9. 蓝桥杯 k倍区间 前缀和
  10. Win7如何禁用无线网卡
  11. Linux服务器异常关机,重启启动后weblogic无法启动
  12. join为什么每个字符都分割了 js_js如何截取以逗号隔开的字符串
  13. 如何从计算机中删除 Exchange Server 2003
  14. 计算机组成原理在线实验,计算机组成原理编程实验
  15. 工业机器人云监控与运维方案
  16. 增量式PID公式的4点疑问和理解
  17. QT课程设计:C++英语单词记忆软件程序开发
  18. 《Docker》高级篇
  19. 搜狗输入法——导入本地txt词库
  20. java画篮球_PS教程!手把手教你绘制炫酷的科比篮球海报

热门文章

  1. arm linux 俄罗斯方块,ARM 俄罗斯方块 - 下载 - 搜珍网
  2. VBA基础学习之1.2输入框(InputBox)
  3. Centos 7安装docker教程
  4. other-note
  5. 如何让自己做任何事情都很有条理?适合规划工作计划的清单便签
  6. edb的安装与使用计统第二次实验
  7. 数值计算方法——第一节方程的根的求解
  8. PTN与IPRAN承载LTE的比较
  9. 有理数类的定义与实现
  10. 同型号的74系列、74HC系列、74LS系列