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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个使用Python Flask框架实现的简单注册页面后端代码,仅供参考: ```python from flask import Flask, render_template, request, redirect, url_for import sqlite3 app = Flask(__name__) # 数据库连接配置 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 用户数据模型 class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50), unique=True) password = db.Column(db.String(255)) email = db.Column(db.String(50), unique=True) def __init__(self, username, password, email): self.username = username self.password = password self.email = email # 注册页面路由 @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': # 获取表单数据 username = request.form['username'] password = request.form['password'] email = request.form['email'] # 表单验证 if not username or not password or not email: return render_template('register.html', error='请填写完整注册信息') # 检查用户名和邮箱是否已被注册 if User.query.filter_by(username=username).first(): return render_template('register.html', error='用户名已被注册,请重新输入') if User.query.filter_by(email=email).first(): return render_template('register.html', error='该邮箱已被注册,请重新输入') # 创建用户对象并存储到数据库 user = User(username=username, password=password, email=email) db.session.add(user) db.session.commit() # 注册成功,重定向到登录页面 return redirect(url_for('login')) # GET请求,渲染注册页面 return render_template('register.html') if __name__ == '__main__': app.run(debug=True) ``` 以上代码中,我们使用了Python Flask框架来实现注册页面后端,使用SQLite作为数据库。在这个例子中,我们创建了一个User类作为用户数据模型,使用Flask的路由装饰器来处理注册页面的GET和POST请求。在POST请求中,我们获取表单数据并进行表单验证,然后创建用户对象并存储到数据库中。最后重定向到登录页面,注册完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值