deform,一个超强的 Python 库!

news2024/11/20 11:23:42

更多资料获取

📚 个人网站:ipengtao.com


大家好,今天为大家分享一个超强的 Python 库 - deform。

Github地址:https://github.com/Pylons/deform


在 Web 开发中,表单处理是一个常见且重要的任务。deform 是一个用于生成和验证 HTML 表单的 Python 库,它提供了一种简洁且强大的方式来创建复杂的表单。deform 基于 Colander 库,支持各种表单字段类型和验证规则,使开发者能够快速创建和管理表单。本文将详细介绍 deform 库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。

安装

要使用 deform 库,首先需要安装它。可以通过 pip 工具方便地进行安装。

以下是安装步骤:

pip install deform

安装完成后,还需要安装 Colander 库,因为 deform 依赖于它进行数据验证:

pip install colander

特性

  1. 多种字段类型:支持文本、数字、日期、文件上传等多种表单字段类型。
  2. 数据验证:基于 Colander 库,支持强大的数据验证功能。
  3. 自定义小部件:允许用户自定义表单字段的小部件,满足特殊需求。
  4. 内置模板:提供内置的模板系统,方便快速生成表单的 HTML 代码。
  5. 可扩展性:支持扩展和自定义,适应复杂的表单处理需求。

基本功能

创建简单表单

使用 deform,可以方便地创建一个简单的表单。

import colander
import deform
from deform import Form
from deform import ValidationFailure

class ContactSchema(colander.MappingSchema):
    name = colander.SchemaNode(colander.String(), validator=colander.Length(max=100))
    email = colander.SchemaNode(colander.String(), validator=colander.Email())
    message = colander.SchemaNode(colander.String(), validator=colander.Length(max=1000))

schema = ContactSchema()
form = Form(schema, buttons=('submit',))

# 渲染表单
html = form.render()
print(html)

处理表单提交

deform 支持处理表单提交的数据,并进行验证。

import colander
import deform
from deform import Form
from deform import ValidationFailure

class ContactSchema(colander.MappingSchema):
    name = colander.SchemaNode(colander.String(), validator=colander.Length(max=100))
    email = colander.SchemaNode(colander.String(), validator=colander.Email())
    message = colander.SchemaNode(colander.String(), validator=colander.Length(max=1000))

schema = ContactSchema()
form = Form(schema, buttons=('submit',))

# 处理表单提交
submitted_data = {'name': 'John Doe', 'email': 'john.doe@example.com', 'message': 'Hello!'}
try:
    appstruct = form.validate(submitted_data.items())
    print("表单数据验证成功:", appstruct)
except ValidationFailure as e:
    print("表单数据验证失败:", e.render())

高级功能

自定义小部件

deform 允许用户自定义表单字段的小部件。

import colander
import deform
from deform import widget

class ContactSchema(colander.MappingSchema):
    name = colander.SchemaNode(colander.String(), widget=widget.TextInputWidget(size=40))
    email = colander.SchemaNode(colander.String(), widget=widget.EmailInputWidget(size=40))
    message = colander.SchemaNode(colander.String(), widget=widget.TextAreaWidget(cols=40, rows=5))

schema = ContactSchema()
form = deform.Form(schema, buttons=('submit',))

# 渲染表单
html = form.render()
print(html)

文件上传

deform 支持文件上传功能。

import colander
import deform
from deform import Form, FileData

class UploadSchema(colander.MappingSchema):
    file_upload = colander.SchemaNode(
        deform.FileData(),
        widget=deform.widget.FileUploadWidget()
    )

schema = UploadSchema()
form = Form(schema, buttons=('submit',))

# 渲染表单
html = form.render()
print(html)

复杂嵌套表单

deform 支持创建复杂的嵌套表单。

import colander
import deform

class AddressSchema(colander.MappingSchema):
    street = colander.SchemaNode(colander.String())
    city = colander.SchemaNode(colander.String())
    zip = colander.SchemaNode(colander.String())

class PersonSchema(colander.MappingSchema):
    name = colander.SchemaNode(colander.String())
    age = colander.SchemaNode(colander.Integer())
    address = AddressSchema()

schema = PersonSchema()
form = deform.Form(schema, buttons=('submit',))

# 渲染表单
html = form.render()
print(html)

实际应用场景

用户注册表单

在 Web 应用中,通过 deform 创建用户注册表单,并进行数据验证。

import colander
import deform
from deform import Form, ValidationFailure

class RegistrationSchema(colander.MappingSchema):
    username = colander.SchemaNode(colander.String(), validator=colander.Length(min=3, max=20))
    password = colander.SchemaNode(colander.String(), validator=colander.Length(min=6))
    email = colander.SchemaNode(colander.String(), validator=colander.Email())

schema = RegistrationSchema()
form = Form(schema, buttons=('register',))

# 渲染表单
html = form.render()
print(html)

# 处理表单提交
submitted_data = {'username': 'johndoe', 'password': 'secretpassword', 'email': 'john.doe@example.com'}
try:
    appstruct = form.validate(submitted_data.items())
    print("注册表单数据验证成功:", appstruct)
except ValidationFailure as e:
    print("注册表单数据验证失败:", e.render())

联系我们表单

在企业网站中,通过 deform 创建联系我们表单,收集用户反馈信息。

import colander
import deform
from deform import Form, ValidationFailure

class ContactSchema(colander.MappingSchema):
    name = colander.SchemaNode(colander.String(), validator=colander.Length(max=100))
    email = colander.SchemaNode(colander.String(), validator=colander.Email())
    message = colander.SchemaNode(colander.String(), validator=colander.Length(max=1000))

schema = ContactSchema()
form = Form(schema, buttons=('send',))

# 渲染表单
html = form.render()
print(html)

# 处理表单提交
submitted_data = {'name': 'Jane Doe', 'email': 'jane.doe@example.com', 'message': 'I love your website!'}
try:
    appstruct = form.validate(submitted_data.items())
    print("联系我们表单数据验证成功:", appstruct)
except ValidationFailure as e:
    print("联系我们表单数据验证失败:", e.render())

文件上传表单

在 Web 应用中,通过 deform 创建文件上传表单,实现文件上传功能。

import colander
import deform
from deform import Form, FileData

class UploadSchema(colander.MappingSchema):
    file_upload = colander.SchemaNode(
        deform.FileData(),
        widget=deform.widget.FileUploadWidget()
    )

schema = UploadSchema()
form = Form(schema, buttons=('upload',))

# 渲染表单
html = form.render()
print(html)

# 处理表单提交
submitted_data = {'file_upload': {'fp': open('/path/to/file', 'rb'), 'filename': 'example.txt'}}
try:
    appstruct = form.validate(submitted_data.items())
    print("文件上传表单数据验证成功:", appstruct)
except ValidationFailure as e:
    print("文件上传表单数据验证失败:", e.render())

总结

deform 库是一个功能强大且易于使用的表单处理工具,能够帮助开发者在 Python 项目中高效地创建和管理表单。通过支持多种字段类型、数据验证、自定义小部件、内置模板和可扩展性,deform 能够满足各种复杂的表单处理需求。本文详细介绍了 deform 库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握 deform 库的使用,并在实际项目中发挥其优势。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

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

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

相关文章

巧用casaos共享挂载自己的外接硬盘为局域网共享

最近入手了个魔改机顶盒,已经刷好了的armbian,虽然是原生的,但是我觉得挺强大的,内置了很多 常用的docker和应用,只需要armbian-software 安装就行,缺点就是emmc太小了。 买到之后第一时间装上了casaos和1panel,想把外接移动硬盘挂载到局域网,只需: 1、安装必要的sam…

Parallels Desktop19让你的Mac无缝运行Windows!

大家好,我是你们的科技小伙伴,今天我要给大家安利一款神奇的软件——Parallels Desktop 19虚拟机。这款产品真的是让我眼前一亮,用起来简直不能更爽! 让我们来聊聊为什么我们需要一个虚拟机。 想象一下,你是一个Mac用…

牛顿插值法代替泰勒公式

引入 例题 近似函数: 通过这个近似函数可以看出,若要证的函数超过二阶可导,那么就不适合用牛顿插值法代替泰勒公式 因为,后面的操作非常复杂,不划算了… 总结 我们可以通过牛顿插值法生成一个逼近曲线的直线&#xf…

贷款申请被拒,是银行故意在找茬吗?

贷款申请被拒,很多时候真不是银行故意找茬,而是咱们自己的一些“小动作”不经意间就把路给堵窄了。今天,咱们就来聊聊那些可能让贷款之路变得坎坷的“坑”,帮你顺利绕开它们。 首先,得说说那个最让人头疼的——逾期还款…

“数字孪生+大模型“:打造设施农业全场景数字化运营新范式

设施农业是一个高度复杂和精细化管理的行业,涉及环境控制、作物生长、病虫害防治、灌溉施肥等诸多环节。传统的人工管理模式已经难以应对日益增长的市场需求和管理挑战。智慧农业的兴起为设施农业带来了新的机遇。将前沿信息技术与农业生产深度融合,实现农业生产的数字化、网络…

立项技术路线选择

本章主要是简单聊聊技术路线,额涉及unity和虚幻,目的主要是给自己看的,记录下日期:2024.8.4 在今天,除游戏以外的厂商基本上采用c#的混合技术方案 如果需要的设备对象多。效果不需要极为精细,至少unity是绝…

从根儿上学习spring 八 之run方法启动第四段(2)

图2 我们接着上一篇接着来看refresh方法,我们上一小节说完了invokeBeanFactoryPostProcessors(beanFactory)方法,这一节我们来看registerBeanPostProcessors(beanFactory)方法。 从方法名称定义我们就能看出这个方法主要是用来注册BeanPostProcesor的。…

欧拉图,欧拉通路,欧拉回路,Hierholzer算法详解

文章目录 零、哥尼斯堡七桥问题一、欧拉图1.1 相关概念1.2 判别法(不做证明)1.3 Hierholzer算法1.4 代码实现1.4.1 邻接表存图1.4.2 链式前向星存图 二、OJ练习2.1 模板12.2 模板22.3 重新安排行程2.4 合法重新排列数对2.5 破解保险箱2.6 骑马修栅栏2.7 …

WebVirtMgr管理多台物理机

这篇文章只是讲一讲管理多台物理机遇到的坑,记录一下。目前时间紧张,空余时间再补充细节。 WebVirtMgr管控单台物理机很多文章能搜到,写的也都挺好。 管理多台的具体步骤我没碰到过,只能按照报错去一步步解决。 第一个问题&…

2024睿抗国赛赛后总结

题目可以去pta教育超市找 写第一题还很清醒。&#xff08;耗时15分钟&#xff09; #include<bits/stdc.h> using namespace std; string s; int sum 0,len 0; int cnt 0;int check(char c){if(c > a && c < z){return 1;}else if(c < Z &&…

【每日刷题】Day92

【每日刷题】Day92 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 面试题 16.05. 阶乘尾数 - 力扣&#xff08;LeetCode&#xff09; 2. 取近似值_牛客题霸_牛客网 (n…

贝叶斯学习方法:几种方法介绍

目录 1 拉普拉斯还原-轻松贝叶斯深度学习2 具有归一化流的变分推理3 基于条件归一化流的多元概率时间序列预测 1 拉普拉斯还原-轻松贝叶斯深度学习 深度学习的贝叶斯公式已被证明具有令人信服的理论性质&#xff0c;并提供实用的功能优势&#xff0c;例如改进预测不确定性量化…

多路I/O复用之select、poll、epoll

一、多进程/多线程模型的不足 为每个请求分配一个进程或线程的方式会带来较大的资源开销。创建和切换进程/线程需要消耗系统资源&#xff0c;包括内存、CPU 时间等。例如&#xff0c;在一个大规模的服务器环境中&#xff0c;如果同时有数千个请求到来&#xff0c;为每个请求创建…

C/C++烟花代码

目录 系列推荐 写在前面 烟花代码 代码分析 运行结果 写在后面 系列推荐 序号目录直达链接1爱心代码https://want595.blog.csdn.net/article/details/1363606842李峋同款跳动的爱心https://want595.blog.csdn.net/article/details/1397222493满屏飘字代码https://want59…

YOLOv8网络轻量化改进之ShuffleNetV2主干

目录 一、理论模型 二、代码修改 一、理论模型 首先是shuffleNet网络的理论介绍部分 论文地址:1807.11164 (arxiv.org) 这里是shufflenetv2网络的主要模块的结构,在网络结构中,通过步长来选择这两种不同的模块。步长为1的时候,对应模块c,步长为2的时候对应模块d。 二、…

Java 文件操作和 IO

1. 认识文件 狭义上的文件&#xff08;file&#xff09;&#xff1a;针对硬盘这种持久化存储的 IO 设备&#xff0c;当我们想要进行数据保存时&#xff0c;往往不是保存成一个整体&#xff0c;而是独立成一个个的单位进行保存&#xff0c;这种独立的单位就被抽象成文件的概念 …

2024第五届华数杯数学建模竞赛C题思路+代码

目录 原题背景背景分析 问题一原题思路Step1:数据读取与处理Step2:计算最高评分&#xff08;Best Score, BS&#xff09;Step3:统计各城市的最高评分&#xff08;BS&#xff09;景点数量 程序读取数据数据预处理 问题二原题思路Step1: 定义评价指标Step2: 收集数据Step3: 标准化…

【linux深入剖析】初识线程---线程概念

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. Linux线程概念什么是线…

RK3568笔记五十二:HC-SR04超声波模块驱动测试

若该文为原创文章&#xff0c;转载请注明原文出处。 一、HC-SR04简介 HC-SR04超声波模块是一种常用于距离测量和障碍物检测的模块。它通过发射超声波信号并接收回波来计算所测量物体与传感器之间的距离。 1、基本原理 TRIG引脚负责发送超声波脉冲串。此引脚应设置为高电平10…

4.指令系统

4.指令系统 指令系统概述—复习指导 一个好的框架是学习掌握知识的捷径&#xff0c;能够帮助我们更快的掌握所学知识&#xff0c;下面从王道计算机组成原理书本第四章-指令系统出发&#xff0c;讲解一下第四章的知识框架组成&#xff0c;下面是指令系统这一章节的思维导图和详…