tornado学习笔记:wtforms-tornado简单介绍

4 篇文章 0 订阅
2 篇文章 0 订阅

由于项目需要使用tornado做开发,文鱼这几天认真看了下tornado的文档和之前项目现在的代码,但我看到之前项目里对post的验证逻辑,文鱼表示蛋很疼也表示理解。众所周知,tornado和django的理念完全不同:一个精悍,一个大而全。不想django中有forms这个表单类,所以验证需要自己去写

示例一下原项目代码:

def validate(self, data):
    if type(data['msg']) != 'str':
        return self.response_msg(ERROR, 'msg必须是字符串')
    ....

目测了下有二十多行-_-p,顿时一亿匹草泥马路过

所以打算重构下此部分代码,重构方案有三种:

1.自己封装forms类
2.移植下django中的forms类
3.找个轮子

第一种方案果断pass,第二方案当我读了下django源码瞬间感觉亚历山大(不得不说,django的封闭给我们提供了开发的便捷也限制了我们转其他框架的成本)。于是乎就google和github里找了下,突然想起以前看flask文档时里提到了WTForms的东东, 瞬间觉得这个世界的爱我又可以相信了。好了,说了太多废话,上干活。

#安装
pip install wtforms-tornado

基于django的习惯,建了个forms.py文件

#forms code
#wtforms文档参见http://wtforms.readthedocs.org/en/latest/

import wtforms
from wtforms import validators
from wtforms.validators import ValidationError
from wtforms_tornado import Form

class TestForm(Form)
    msg = wtforms.StringField('msg',  [validators.Length(min=4, max=23)])

    def validate_msg(self, field):
        if field.data != 'hello world':
             raise ValidationError(u'Must be hello world') 

下一步就是将form和handler结合了

from forms import TestForm

class TestFormHandler(tornado.web.RequestHandler):
    def get(self):
        pass

    def post(self):
        form = TestForm(self.request.arguments)

        if form.validate():
            self.write('ok')
        else:
            self.write(form.errors)

瞬间感觉代码简洁了多,顺便一说,在跑demo的是发现了一个件事,在此做个备忘吧

form_data = self.request.arguments #form_data数据是{'msg': ['helle world']}
form = TestForm(self.request.arguments) #form.data数据是{'msg': 'helle world'}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值