TypeError:IntegrityError类型的对象不是JSON serializab

2024-09-27 04:20:04 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里,我有一个简单的web api来注册一个用户,flask-restfulmarshmallow作为序列化程序

class UserRegistration(Resource):
    def post(self):
        data = request.get_json(force=True)

        if not data:
            return {'message':'No input data provided'}, 400

        data2 = user_schema.load(user_schema.dump(data))
        print('data2')
        print(data2)
        print(data['username'])

        if UserModel.find_by_username(data['username']):
            return {'message': 'User {} already exists'.format(data['username'])}

        print('passed')
        print(UserModel.generate_hash(data['password']))

        new_user = UserModel(
            username = data['username'],
            password = UserModel.generate_hash(data['password']),
            user_role = data['user_role']
        )

        try:
            print('inside try')
            new_user.save_to_db()
            print('passed2')
            return { 'message': 'User {} was created'.format(data['username']) }

        except Exception as e:
            return {'message': 'Something went wrong','error': e}, 500


当我像这样通过邮递员输入用户信息时

{
 "username":"test2",
 "password":"test2pswd",
 "user_role":"admin"
}

它在控制台上返回以下错误

data2
{'user_role': 'admin', 'password': 'test2pswd', 'username': 'test2'}
test2
passed
$pbkdf2-sha256$29000$vZdSak2pNcb4P.dc671XKg$s0ZAL.HcwzNDMs1po2FN4jmyJfGLNHxT9yANs1arZBc
inside try
127.0.0.1 - - [16/Sep/2019 16:27:05] "POST /registration HTTP/1.1" 500 -
.
.
.
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type IntegrityError is not JSON serializable

UserModel.py类中有save_to_db()方法

class UserModel(db.Model):
    __tablename__ = 'users'

    id            = db.Column(db.Integer, primary_key = True)
    username      = db.Column(db.String(120), unique = True, nullable = False)
    password      = db.Column(db.String(120), nullable = False)
    user_role     = db.Column(db.String(10), nullable = False)
    access_token  = db.Column(db.String(120), unique = True, nullable = True, default='as' )
    refresh_token = db.Column(db.String(120), unique = True, nullable = True, default='as' )

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()

我能够将一个条目保存到db中,但是当第二次由于这个错误而失败时,我不知道代码发生了什么。你知道吗

提前谢谢


Tags: truemessagedbdatastringreturnusernamecolumn
1条回答
网友
1楼 · 发布于 2024-09-27 04:20:04

我想出来了

access_tokenrefresh_token设置为unique = True,并将默认值设置为as, 所以下一个值对access_tokenrefresh_token都有相同的值,因为它设置为unique,所以抛出IntegrityError。你知道吗

相关问题 更多 >

    热门问题