1. 程式人生 > >tornado學習筆記:wtforms-tornado簡單介紹

tornado學習筆記:wtforms-tornado簡單介紹

由於專案需要使用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'}