tornado學習筆記:wtforms-tornado簡單介紹
阿新 • • 發佈:2019-02-12
由於專案需要使用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'}