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,错误提示
分享到:
相关推荐
`render_template` 函数会将结果传入模板并生成 HTML 页面。 在前端,我们可以使用 AJAX 或者表单提交来实现对数据库的增删查改操作。例如,使用 jQuery 的 AJAX 发送 POST 请求: ```javascript $.ajax({ type: ...
WTForms-Alchemy 主要通过装饰器 @model_form 来实现将 SQLAlchemy 模型转化为 WTForms 表单。这个装饰器会分析 SQLAlchemy 模型的属性,自动为每个属性创建对应的 WTForms 字段。例如,如果一个模型有一个名为 `...
这里,`render_template`函数用于渲染模板文件,如HTML,生成动态内容。 模板引擎是Flask的一个重要组成部分,它允许我们在HTML中使用逻辑,如变量和条件语句。Flask默认使用Jinja2模板引擎。以下是一个简单的Jinja...
Flask默认集成Jinja2模板引擎,允许开发者使用模板语言来动态生成HTML。在`templates`目录下创建`.html`文件,如`index.html`,然后在视图函数中返回模板名: ```python from flask import render_template @...
模板允许你在 HTML 文件中嵌入 Python 代码,从而动态生成内容。例如: ```html <!-- templates/index.html --> <html> <h1>{{ message }} {% for item in items %} <li>{{ item }} {% endfor %} </html...
10. **Django内置组件**: Django包含Admin组件(用于后台管理)、model组件(处理数据库模型)和form组件(处理表单数据),但`unit`组件并非Django内置组件,可能是指unittest模块。 **填空题答案**: 1. ...
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) # 与数据库交互 new_user = User(username='JohnDoe') db.session.add...
Jinja2是Flask默认的模板引擎,用于生成动态HTML页面。在Flask应用中,我们创建`.html`模板文件,然后在视图函数中渲染它们。例如,一个简单的登录页面模板可能如下所示: ```html <!-- templates/login.html --> ...
WSGI(Web Server Gateway Interface)是Python Web应用和服务器之间的一个接口标准,而Jinja2则是一个强大的、快速且设计灵活的模板语言,用于将数据和布局分离,方便网页的生成。 在创建考试系统的过程中,首先...
这个项目为初学者提供了实践Flask框架的绝佳机会,同时也为有经验的开发者提供了一个可扩展和定制的基础架构。通过研究源码,你可以深入了解Web应用开发流程,学习如何组织项目结构,以及如何使用Flask与其他Python...
**Flask Web开发基础教程** Flask是一款轻量级的Python Web框架,...通过本教程,你将了解到Flask的核心概念和实践技巧,为构建自己的Python Web应用打下坚实的基础。现在,你可以着手实践,开启你的Flask开发之旅了。
1. **模型(Model)**: 在 Flask 中,通常使用 SQLAlchemy 扩展进行数据库操作。我们需要定义一个 Student 模型,包含姓名、学号、性别等字段,以及对应的 CRUD(创建、读取、更新、删除)操作。 2. **视图(View)...
Flask使用Jinja2模板引擎来动态生成HTML页面。 3. `static`:存放静态资源的目录,如CSS样式表、JavaScript文件和图片等。 4. `models.py`:可能包含数据库模型的定义,用于与数据库交互。 5. `database.sql`或`....
4. **模板渲染**:Flask使用Jinja2模板引擎来动态生成HTML页面。在视图函数中,你可以使用`render_template()`返回一个模板,其中可以传递变量。 5. **数据库集成**:虽然Flask不自带数据库支持,但可以使用...
new_message = Message(request.form['content'], request.form['username']) save_message(new_message) # 调用模型层的方法保存留言 messages = fetch_messages() # 从模型层获取所有留言 return render_...
SQLAlchemy提供模型(Model)、会话(Session)和查询(Query)等概念,方便我们管理和操作数据。在房屋租赁网站中,可能包括User(用户)、House(房源)、Category(类别)等模型,每个模型对应数据库中的一个表。...
在`templates`目录下创建模板文件,利用变量、控制结构和继承来动态生成HTML: ```html <!DOCTYPE html> <html lang="zh"> <title>{{ title }} {% for post in posts %} <h2>{{ post.title }} <p>{{ post....
通常,这会包括使用HTML模板来展示数据,Flask支持Jinja2模板引擎,允许动态生成HTML页面。例如,显示所有用户: ```html <!DOCTYPE html> <html lang="en"> <title>Users <h1>Users {% for user in users ...
Django之Form组件验证 作业 第23周 主机管理项目需求分析 主机管理项目架构设计 主机管理项目初始构建 主机管理项目编写插件基类 主机管理项目命令分发器 主机管理项目提取主机列表 主机管理项目提取yaml配置文件_...
本章节将详细介绍如何构建一个员工信息管理系统(Employee Information Management System, EIMS),该系统旨在为组织提供一套完整的员工管理解决方案。它不仅能够实现员工基本信息的管理,还能够处理日常的考勤记录...