`
剑事
  • 浏览: 62966 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

为 sqlalchemy model 生成 html form

阅读更多

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,错误提示


分享到:
评论

相关推荐

    flask_sqlalchemy_eg.zip

    `render_template` 函数会将结果传入模板并生成 HTML 页面。 在前端,我们可以使用 AJAX 或者表单提交来实现对数据库的增删查改操作。例如,使用 jQuery 的 AJAX 发送 POST 请求: ```javascript $.ajax({ type: ...

    wtforms-alchemy:从sqlalchemy模型创建wtforms的工具

    WTForms-Alchemy 主要通过装饰器 @model_form 来实现将 SQLAlchemy 模型转化为 WTForms 表单。这个装饰器会分析 SQLAlchemy 模型的属性,自动为每个属性创建对应的 WTForms 字段。例如,如果一个模型有一个名为 `...

    围绕着flask,全面梳理web开发的各种技术.zip

    这里,`render_template`函数用于渲染模板文件,如HTML,生成动态内容。 模板引擎是Flask的一个重要组成部分,它允许我们在HTML中使用逻辑,如变量和条件语句。Flask默认使用Jinja2模板引擎。以下是一个简单的Jinja...

    flask示例代码集合

    Flask默认集成Jinja2模板引擎,允许开发者使用模板语言来动态生成HTML。在`templates`目录下创建`.html`文件,如`index.html`,然后在视图函数中返回模板名: ```python from flask import render_template @...

    flask框架学习笔记

    模板允许你在 HTML 文件中嵌入 Python 代码,从而动态生成内容。例如: ```html &lt;!-- templates/index.html --&gt; &lt;html&gt; &lt;h1&gt;{{ message }} {% for item in items %} &lt;li&gt;{{ item }} {% endfor %} &lt;/html...

    Python-Web自测试卷3(1).docx

    10. **Django内置组件**: Django包含Admin组件(用于后台管理)、model组件(处理数据库模型)和form组件(处理表单数据),但`unit`组件并非Django内置组件,可能是指unittest模块。 **填空题答案**: 1. ...

    Python flask.docx

    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...

    flaskDemo.zip

    Jinja2是Flask默认的模板引擎,用于生成动态HTML页面。在Flask应用中,我们创建`.html`模板文件,然后在视图函数中渲染它们。例如,一个简单的登录页面模板可能如下所示: ```html &lt;!-- templates/login.html --&gt; ...

    基于python+flask实现简单的考试系统源码.zip

    WSGI(Web Server Gateway Interface)是Python Web应用和服务器之间的一个接口标准,而Jinja2则是一个强大的、快速且设计灵活的模板语言,用于将数据和布局分离,方便网页的生成。 在创建考试系统的过程中,首先...

    Python基于Flask框架的房屋租赁系统源码.zip

    这个项目为初学者提供了实践Flask框架的绝佳机会,同时也为有经验的开发者提供了一个可扩展和定制的基础架构。通过研究源码,你可以深入了解Web应用开发流程,学习如何组织项目结构,以及如何使用Flask与其他Python...

    Flask web开发基础教程

    **Flask Web开发基础教程** Flask是一款轻量级的Python Web框架,...通过本教程,你将了解到Flask的核心概念和实践技巧,为构建自己的Python Web应用打下坚实的基础。现在,你可以着手实践,开启你的Flask开发之旅了。

    使用Flask开发的简易学生信息管理系统,选题源于大二实训作业

    1. **模型(Model)**: 在 Flask 中,通常使用 SQLAlchemy 扩展进行数据库操作。我们需要定义一个 Student 模型,包含姓名、学号、性别等字段,以及对应的 CRUD(创建、读取、更新、删除)操作。 2. **视图(View)...

    flask搭建个人博客

    Flask使用Jinja2模板引擎来动态生成HTML页面。 3. `static`:存放静态资源的目录,如CSS样式表、JavaScript文件和图片等。 4. `models.py`:可能包含数据库模型的定义,用于与数据库交互。 5. `database.sql`或`....

    Python基于Flask框架个人博客网站设计源码案例设计.zip

    4. **模板渲染**:Flask使用Jinja2模板引擎来动态生成HTML页面。在视图函数中,你可以使用`render_template()`返回一个模板,其中可以传递变量。 5. **数据库集成**:虽然Flask不自带数据库支持,但可以使用...

    基于MVC的留言板

    new_message = Message(request.form['content'], request.form['username']) save_message(new_message) # 调用模型层的方法保存留言 messages = fetch_messages() # 从模型层获取所有留言 return render_...

    基于flask的房屋租赁出售网站demo

    SQLAlchemy提供模型(Model)、会话(Session)和查询(Query)等概念,方便我们管理和操作数据。在房屋租赁网站中,可能包括User(用户)、House(房源)、Category(类别)等模型,每个模型对应数据库中的一个表。...

    flask_blog:用烧瓶制作的用于生产服务器的博客网站

    在`templates`目录下创建模板文件,利用变量、控制结构和继承来动态生成HTML: ```html &lt;!DOCTYPE html&gt; &lt;html lang="zh"&gt; &lt;title&gt;{{ title }} {% for post in posts %} &lt;h2&gt;{{ post.title }} &lt;p&gt;{{ post....

    RDBMS_PROJECT

    通常,这会包括使用HTML模板来展示数据,Flask支持Jinja2模板引擎,允许动态生成HTML页面。例如,显示所有用户: ```html &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;title&gt;Users &lt;h1&gt;Users {% for user in users ...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    Django之Form组件验证 作业 第23周 主机管理项目需求分析 主机管理项目架构设计 主机管理项目初始构建 主机管理项目编写插件基类 主机管理项目命令分发器 主机管理项目提取主机列表 主机管理项目提取yaml配置文件_...

    管理系统的功能要求使用技术数据库设计用户界面搭建概要设计.docx

    本章节将详细介绍如何构建一个员工信息管理系统(Employee Information Management System, EIMS),该系统旨在为组织提供一套完整的员工管理解决方案。它不仅能够实现员工基本信息的管理,还能够处理日常的考勤记录...

Global site tag (gtag.js) - Google Analytics