from flask import Flask,Markup,render_template,request,redirect
from wtforms.form import Form
from wtforms.fields import core
from wtforms import widgets
#插件
class Widget(object):
pass
class TextInput():
def __call__(self, *args, **kwargs):
return "<input type='text' name='name'/>"
class TextErea():
def __call__(self, *args, **kwargs):
return '<textarea name="email"> </textarea>'
#字段
class Field():
def __str__(self):
return Markup(self.widget())
class StringField(Field):
widget=TextInput()
def validate(self,data):
if data:
return True
class EmailField(Field):
widget=TextErea()
def validate(self,data):
reg = ".*@.*"
import re
if re.match(reg,data):
return True
#Form
class BaseForm(object):
def __init__(self,*args,**kwargs):
_fields={}
for name,field in self.__class__.__dict__.items():
if isinstance(field,Field):
_fields[name]=field
self._fields=_fields
self.data={}
def validate(self,form_data):
flag=True
for name,field in self._fields.items():
input_val=form_data.get(name,'')
result=field.validate(input_val)
if not result:
flag=False
else:
self.data[name]=input_val
return flag
class LoginForm(BaseForm):
name=StringField()
email=EmailField()
app=Flask(__name__)
@app.route('/login',methods=['GET','POST'])
def login():
if request.method=='GET':
form=LoginForm()
return render_template('login.html',form=form)
else:
form=LoginForm()
if form.validate(request.form):
print('login success')
return 'hello'
return redirect('/login')
if __name__ == '__main__':
app.run()