仿照wtform自定义Form组件
时间:2022-04-23
本文章向大家介绍仿照wtform自定义Form组件,主要内容包括仿照wtforms自定义Form组件、2.自定义Form组件、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
仿照wtforms自定义Form组件
1.wtforms
2.自定义Form组件
#!usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask,render_template,request,Markup
app = Flask(__name__,template_folder="templates")
app.debug = True
# ==============通过这几个类就可以显示了-==============
#插件
class Widget(object):
pass
class InputText(Widget):
def __call__(self, *args, **kwargs):
return "<input type='text' name='name'>"
class TextArea(Widget):
def __call__(self, *args, **kwargs):
return Markup("<textarea name='email'></textarea>")
#Form
class BaseForm(object):
def __init__(self):
#获取当前所有的字段
_fields = {}
for name, field in self.__class__.__dict__.items():
if isinstance(field, Field): # 筛选出字段是name和emailDe
_fields[name] = field
self._fields = _fields
self.data = {}
# print(_fields) # {'name': 111, 'email': 222}
def validate(self,request_data):
#先找到所有的字段,在执行每一个字段的validate方法
flag = True
for name, field in self._fields.items():
input_val = request_data.get(name,"") #用户输入的值
result= field.validate(input_val) #每一个字段自己校验
print("???????????",input_val,result)
if not result:
flag = False
else:
self.data[name] = input_val
return flag
#字段
class Field(object):
'''所有类的基类'''
def __str__(self): #python中的静态字段通过类能找到,通过对象也能找到
return Markup(self.widget()) #self就是StringField,self
class StringField(Field): #每个字段打印的时候都要去执行__str__,所以选择放在基类里面,自己没有就调用父类的
widget = InputText()
def validate(self,val):
if val:
return True
class EmaliField(Field):
widget = TextArea()
reg = ".*@.*"
def validate(self,val):
import re
print(re.match(self.reg,val),"************")
if re.match(self.reg,val):
return True
# ===============使用===============
class LoginForm(BaseForm):
name = StringField()
email = EmaliField()
@app.route('/index', methods=["GET","POST"])
def index():
form = LoginForm()
ret = form.validate(request.form)
print("验证成功",ret)
print("验证成功的值",form.data)
# print(form.name)
# print(form.email)
return render_template("index.html",form=form)
if __name__ == '__main__':
app.run()
- 网络测试,带宽测试,流量测试
- github极简指南
- 设计模式学习--面向对象的5条设计原则之单一职责原则--SRP
- Spring RestFul Example (实例参考)
- C#基础知识回顾---你不知道的Lazy<T>
- 用python编写验证码
- WPF备忘录(6)WPF实现打印功能
- 适合开发者的深度学习:第一天就能使用的编码神经网络工具
- Shell 历史记录异地留痕审计与监控
- Oracle 12c: arraysize会影响结果集么?
- 【学术】实践教程:使用神经网络对犬种进行分类
- Spring Data Redis
- 使用线程新建WPF窗体(公用进度条窗体)
- Spring Data MongoDB
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何用 Python 让微博热搜榜动起来
- 如何用 Python 让微博热搜榜动起来
- 漫画:什么是 “抽象工厂模式” ?
- 5个很常用的CSS3网页小实例
- 收藏!!!学习Matplotlib看这一份笔记就够了!
- 最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)
- Selenium 系列篇(六):反反爬篇
- Selenium 系列篇(五):文件篇
- 腾讯大佬整理了 Python 所有内置异常,Python高手必备的排错手册
- Selenium 系列篇(四):JS 篇
- 【5分钟玩转Lighthouse】家乡的战疫
- Kubernetes 源码学习之延时队列
- Selenium 系列篇(三):窗口篇
- Selenium 系列篇(二):元素定位
- ES2020 中 Javascript 10 个你应该知道的新功能