Web2py表单和验证器 Web2py数据库抽象层 Web2py电子邮件和短信 web2py为表单生成提供了强大的功能。在web2py中构建表单的四种不同方式如下所示 - FORM - 就HTML助手而言,它被认为是低级别的实现。 FORM对象知道其字段内容。 SQLFORM - 它为现有数据库提供创建,更新和删除功能。 SQLFORM.factory - 它被认为是SQLFORM顶层的抽象层,它生成一个类似于SQLFORM的表单。 在这里,不需要创建一个新的数据库。 CRUD方法 - 顾名思义,它提供了基于SQLFORM的相似功能的创建,检索,更新和删除功能。 形成 考虑一个应用程序,该应用程序接受来自用户的输入并具有“提交”按钮来提交响应。 调节器 “default.py”控制器将包含以下相关功能 def display_form(): return dict() 视图 关联的视图“default / display_form.html”将呈现HTML格式的表单 - {{extend 'layout.html'}} <h2>Basic Form</h2> <form enctype = "multipart/form-data" action = "{{= URL()}}" method = "post"> Your name: <input name = "name" /> <input type = "submit" /> </form> <h2>Submitted variables</h2> {{= BEAUTIFY(request.vars)}} 上面的例子是普通的HTML表单,它要求用户输入。可以使用FORM对象等助手生成相同的表单。 调节器 def display_form(): form = FORM('Value:', INPUT(_value = 'name'), INPUT(_type = 'submit')) return dict(form = form) “default.py”控制器中的上述功能包括帮助创建表单的FORM对象(HTML助手)。 视图 {{extend 'layout.html'}} <h2>Basic form</h2> {{= form}} <h2>Submitted variables</h2> {{= BEAUTIFY(request.vars)}} 他由 表单{{= form}} 生成的 表单 序列化FORM对象。当用户填写表单并单击提交按钮时,表单将自动提交,并且变量 request.vars.value 及其输入值显示在底部。 SQLFORM 它有助于为现有数据库创建表单。下面讨论它的实施步骤。 使用DAL建立与数据库的连接,这是使用DAL对象(也称为DAL构造器)创建的。建立连接后,用户可以创建相应的表格。 db = DAL('sqlite://storage.sqlite') db.define_table('employee', Field('name', requires = IS_NOT_EMPTY())) 因此,我们创建了一个名为“employee”的表。控制器使用以下语句构建表单和按钮 - form = SQLFORM( db.mytable, record = mytable_index, deletable = True, submit_button = T('Update') ) 因此,对于创建的员工表,控制器中的修改将是 - def display_form(): form = SQLFORM(db.person) View中 没有修改。在新的控制器中,必须构建一个FORM,因为在模型中定义了表db.employee中构建的SQLFORM构造函数。新表格在序列化时显示如下 - <form enctype = "multipart/form-data" action = "" method = "post"> <table> <tr id = "employee_name__row"> <td> <label id = "person_name__label" for = "person_name">Your name: </label> </td> <td> <input type = "text" class = "string" name = "name" value = "" id = "employee_name" /> </td> <td></td> </tr> <tr id = "submit_record__row"> <td></td> <td><input value = "Submit" type = "submit" /></td> <td></td> </tr> </table> <input value = "9038845529" type = "hidden" name = "_formkey" /> <input value = "employee" type = "hidden" name = "_formname" /> </form> 表单中的所有标签都有从表格和字段名称派生的名称。 一个 SQLFORM 对象也由“上传”文件夹保存上传的文件与“上传”领域的交易。这是自动完成的。在 “textareas” 的帮助下,SQLFORM以复选框和文本值的形式显示“布尔”值。 SQLFORM也使用过程方法。如果用户想要使用关联的SQLFORM保存值,则这是必需的。 如果 form.process(keepvalues = True), 那么它被接受。 例 def display_form(): form = SQLFORM(db.employee) if form.process().accepted: response.flash = 'form accepted' elif form.errors: response.flash = 'form has errors' else: response.flash = 'please fill out the form' return dict(form = form) SQLFORM.factory 有时,用户需要生成一个表单,以便在没有实现数据库的情况下存在现有的数据库表。用户只是想要利用SQLFORM功能。 这是通过 form.factory 完成的,它在会话中保持。 def form_from_factory(): form = SQLFORM.factory( Field('your_name', requires = IS_NOT_EMPTY()), Field('your_image', 'upload')) if form.process().accepted: response.flash = 'form accepted' session.your_name = form.vars.your_name session.your_image = form.vars.your_image elif form.errors: response.flash = 'form has errors' return dict(form = form) 该表单将显示为SQLFORM,其名称和图像作为其字段,但数据库中没有此类现有表。 “default / form_from_factory.html”视图将表示为 - {{extend 'layout.html'}} {{= form}} CRUD方法 CRUD 是在SQLFORM之上使用的API。顾名思义,它用于创建,检索,更新和删除适当的表单。 与web2py中的其他API相比,CRUD未公开; 因此,有必要进口。 from gluon.tools import Crud crud = Crud(db) 上面定义的CRUD对象提供了以下API - Sr.No API和功能 1 crud.tables() 返回数据库中定义的表的列表。 2 crud.create(db.tablename) 为 **表格名称** 返回一个创建表单。 3 crud.read(db.tablename,id) 返回 **表名** 和记录标识的只读表单。 4 crud.delete(db.tablename,id) 删除记录 5 crud.select(db.tablename,query) 返回从表中选择的记录列表。 6 crud.search(db.tablename) 返回表单是搜索表单的元组(表单,记录)。 7 CRUD() 根据request.args()返回上面的一个。 表格的创建 让我们创建一个表单。按照下面给出的代码。 模型 在应用程序的 模型 文件夹下创建新模型。该文件的名称将是 “dynamic_search.py” 。 def build_query(field, op, value): if op == 'equals': return field == value elif op == 'not equal': return field != value elif op == 'greater than': return field > value elif op == 'less than': return field < value elif op == 'starts with': return field.startswith(value) elif op == 'ends with': return field.endswith(value) elif op == 'contains': return field.contains(value) def dynamic_search(table): tbl = TABLE() selected = [] ops = ['equals', 'not equal', 'greater than', 'less than', 'starts with', 'ends with', 'contains'] query = table.id > 0 for field in table.fields: chkval = request.vars.get('chk'+field,None) txtval = request.vars.get('txt'+field,None) opval = request.vars.get('op'+field,None) row = TR(TD(INPUT(_type = "checkbox",_name = "chk"+field,value = chkval == 'on')), TD(field),TD(SELECT(ops,_name = "op"+field,value = opval)), TD(INPUT(_type = "text",_name = "txt"+field,_value = txtval))) tbl.append(row) if chkval: if txtval: query &= build_query(table[field], opval,txtval) selected.append(table[field]) form = FORM(tbl,INPUT(_type="submit")) results = db(query).select(*selected) return form, results 调节器 控制器部分下的相关文件 “dynamic_search.py” 将包含以下代码 - def index(): form,results = dynamic_search(db.things) return dict(form = form,results = results) 视图 我们可以使用以下视图进行渲染。 {{extend 'layout.html'}} {{= form}} {{= results}} 这是它的样子 - Web2py数据库抽象层 Web2py电子邮件和短信