关于flask中使用flask-form校验json数据的问题
from flask import Blueprint, request from utils.resp import resp from validators.user_validator import RegisterForm from werkzeug.datastructures import ImmutableMultiDict from utils.db import get_db from MySQLdb import MySQLError from middleware.login_required import login_required from utils.token import migrate_token user_bp = Blueprint('user_bp', __name__, url_prefix='/user') # 注册 @user_bp.route('/register', methods=['post']) def register(): db, cursor = get_db() json = request.json form = RegisterForm(ImmutableMultiDict(json)) if form.validate(): try: print('exe') username = json.get('username') password = json.get('password') sql_values = [username, password] sql = 'insert into tb_user(username, password, role) values(%s, %s, 2)' cursor.execute(sql, sql_values) db.commit() cursor.close() db.close() return resp(0) except MySQLError as e: print(e) db.rollback() cursor.close() db.close() return resp(4) else: return resp(0, form.errors) # 登录 @user_bp.route('/login', methods=['post']) def login(): db, cursor = get_db() username = request.json.get('username') password = request.json.get('password') if not username or not password: return resp(5) sql = 'select id from tb_user where username = %s and password = %s' cursor.execute(sql, [username, password]) user = cursor.fetchone() if user: token = migrate_token({"id_user": user.get('id')}) return resp(0, {'token': token}) else: return resp(6) # 获取用户信息 @user_bp.route('/get_info') @login_required def get_info(): return resp(0)
通过
ImmutableMultiDict
把json转换成表单结构, 就能直接使用表单校验了
from wtforms import Form, StringField, validators # 注册表单校验 class RegisterForm(Form): username = StringField('username', [validators.length(min=1, max=16)]) password = StringField('password', [validators.length(min=32, max=32)]) confirm_pwd = StringField('confirm_pwd', [validators.length(min=32, max=32), validators.EqualTo('password')])
本想把生活活成一首诗, 时而优雅 , 时而豪放 , 结果活成了一首歌 , 时而不靠谱 , 时而不着调