APIFlask 如何优雅的实现多用户注册

最近用APIFlask的时候遇到一个需求->多用户注册

具体描述:
前端提交多个用户注册的信息,格式如下

[
  {
    "email": "user@example.com",
    "group": 10,
    "password": "string",
    "username": "string"
  },
{
    "email": "user@example.com",
    "group": 10,
    "password": "string",
    "username": "string"
  }
]

后端需要根据用户名判断用户是否在数据库中, 但如果前端提交的数组中有重复的用户,应该如何处理比较好?

以下是我目前的处理:

for data in datas:
            user:User = User.query.filter(User.username == data['username']).count()
            if user:
                raise ValueError(f'{data["username"]}用户已存在')
            db.session.query
            user:User = User()
            user.email = data['email']
            user.username = data['username']
            user.set_password(data['password'])
            user.group = data['group']
            db.session.add(user)
            db.session.commit()

显然这样处理和数据库的联系过多了,想请教一下有没有更好的方法。

另外还有一个引申问题:

上面的代码中,前端返回的用户名、密码、邮箱等信息都需要手动填写。
想请问一下有没有办法写成类似js的解构一样的默认处理

e => {
let item = { ...{ username: ' ', text: ' ', attr: {}, option: null }, ...e}
}

Thx!

先写一些大概的想法。

  • 用户名一致性验证可以放到模式类的自定义验证方法里。
  • 传递数据时可以直接用字典:
user = User(**data)

这样会把 data 字典里的键值作为关键字参数传入。

不过前提是把密码字段改为使用 setter 来设置,而不是额外的方法。

你先自己试试。如果有时间再来补充示例代码。

感谢李大指路,经过学习与尝试目前初步成功,thx!
代码如下:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class Stu(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20))
    _password_hash = db.Column(db.String(128))

    def get_password(self):
        return self._password_hash
    
    def set_password(self, value):
        self._password_hash = value

    def del_password(self):
        del self._password_hash

    password = property(get_password, set_password)

data = {
    "id": 1,
    "username": "admin",
    "password": "admin"
}
try:
    stu = Stu(**data)
    print(stu.password)
except Exception as e :
    print(e)