关于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')])

 

posted @ 2022-07-04 21:25  深海里的星星i  阅读(419)  评论(0)    收藏  举报