class Servicelog(Base):
__tablename__ = 'k_servicelog'
id = Column(Integer, primary_key=True)
question = Column(String(360),index=True)
answer = Column(String(300))
solution = Column(String(300))
createime = Column(DATETIME,default=datetime.datetime.now(),index=True)
endtime= Column(DATETIME,index=True)
feedback = Column(BOOLEAN,index=True)
servicestatus = Column(Integer,index=True)
def __init__(self,question='',answer='',feedback=0,servicestatus=0):
self.question = answer
self.answer = answer
self.solution = ''
self.feedback = feedback
self.servicestatus = servicestatus
def fieldtypes(self):
list = {'question':FormTextarea('question',label='Question',need=True),
'answer':FormTextarea('answer',label='Answer'),
'solution':FormTextarea('solution',label='Solution'),
'feedback':FormCheckbox('feedback',label='Service status'),
'servicestatus':FormRadio('servicestatus',{'none':'0','need':'1','tk':'2'}),
}
return list
def fieldtypes(self) 是附加的方法 定义了要生成form 的字段 包括验证信息
class toform:
fields = {}
param = {}
types = {}
def __init__(self,model):
self.param = model.__dict__
self.types = model.fieldtypes()
try:
for f in self.types:
if self.types.has_key(f):
self.types[f].value = self.param[f]
self.fields[f] = self.types[f]
else:
self.fields[f] = '<input type="text" name="%s" value="%s">'%(f,self.param[f])
except Exception,error:
print error
def as_l(self):
aslabel = ''
for k in self.fields:
#print type(self.fields[k]),type(self.types[k].label)
aslabel += '<label><b>%s:</b> %s<br/></label>'%(''.join(self.types[k].label),self.fields[k])
return aslabel
def valid(self):
ok = True
for k in self.fields:
self.fields[k].valid()
if self.fields[k].error:
ok = False
return ok
class FormText:
name = ''
value = ''
label = ''
error = ''
kwargs = {}
def __init__(self,name,label = '',**kwargs):
self.name = name
self.label = label
self.kwargs = kwargs
def render(self):
return u'<input type="text" name="%s" value="%s"> '%(self.name,self.value or '')
def __unicode__(self):
return self.render()
def withlabel(self):
return u'<label for="%s"><b>%s:</b><input type="text" name="%s" value="%s"><br/> %s</label>'%(self.name,self.label,self.name,self.value or '',self.error)
def valid(self):
if self.kwargs.get('need',False) and self.value=='':
self.error = _('This field is required.')
return
if self.kwargs.has_key('minlength'):
if(len(self.value)<self.kwargs.get('minlength')):
self.error = _('This field min length is.')
return
if self.kwargs.has_key('maxlength'):
if(len(self.value)<self.kwargs.get('maxlength')):
self.error = _('This field min length is.')
return
class FormTextarea:
name = ''
value = ''
label = ''
error = ''
cols = 10
rows = 5
kwargs = {}
def __init__(self,name,cols=10,rows=5,label = '',**kwargs):
self.name = name
self.cols = cols
self.rows = rows
self.label = label
self.kwargs = kwargs
def render(self):
return u'<textarea name="%s" cols="%s" rows="%s">%s</textarea>'%(self.name,self.cols,self.rows,self.value)
def valid(self):
if self.kwargs.get('need',False) and self.value=='':
self.error = _('This field is required.')
return
if self.kwargs.has_key('minlength'):
if(len(self.value)<self.kwargs.get('minlength')):
self.error = _('This field min length is.')
return
if self.kwargs.has_key('maxlength'):
if(len(self.value)<self.kwargs.get('maxlength')):
self.error = _('This field min length is.')
return
def __unicode__(self):
return self.render()
def withlabel(self):
return u'<label for="%s"><b>%s:</b>%s<br/> %s</label>'%(self.name,self.label,self.render(),self.error)
class FormCheckbox:
name = ''
value = ''
error = ''
kwargs = {}
def __init__(self,name,label = '',**kwargs):
self.name = name
self.label = label
self.kwargs = kwargs
def render(self):
check = ''
if int(self.value) == 1:
check = 'checked'
return '<input type="checkbox" name="%s" value="1" %s>'%(self.name,check)
def valid(self):
if self.kwargs.get('need',False) and self.value=='':
self.error = _('This field is required.')
def __unicode__(self):
return self.render()
class FormRadio:
name = ''
value = ''
label = ''
error = ''
option = {}
kwargs = {}
def __init__(self,name,option,label = '',**kwargs):
self.name = name
self.option = option
self.label = label
self.kwargs = kwargs
def render(self):
check = ''
html = ''
for k in self.option:
if self.value == self.option[k]:
check = 'checked'
else:
check = ''
html += '<label><input class="f-radio" type="radio" name="%s" value="%s" %s> %s</label>'%(self.name,self.option[k],check,k)
return html
def valid(self):
if self.kwargs.get('need',False) and self.value=='':
self.error = _('This field is required.')
def __unicode__(self):
return self.render()
使用起来如下
form = toform(Servicelog())
form.valie() #验证数据
form.as_l #输出form内各元素
form.fields.question #输出单个字段 并带 label
form.fields.question.withlabel #输出单个字段 并带 label,错误提示