为了账号安全,请及时绑定邮箱和手机立即绑定

Flask-Sqlalchemy:每次提交模型的新实例时如何调用函数?

Flask-Sqlalchemy:每次提交模型的新实例时如何调用函数?

牧羊人nacy 2023-05-16 14:27:05
每次提交新用户时,我都想创建一个新的随机用户 ID。为此,我使用的格式是:USR-<token>令牌是由这个函数制作的:import stringimport secretsdef make_token():    set = string.ascii_letters+string.digits    while True:        token = ''.join(secrets.choice(set) for i in range(6))        if(any(c.islower() for c in token) and           any(c.isupper() for c in token) and           sum(c.isdigit() for c in token)>=3 ):           break    return token此函数将在此数据库模型中调用:class User(db.Model):    usrid = db.Column(db.String(10), primary_key=True,                        default="USR-{}".format(make_token()))    usrnm = db.Column(db.String(20), unique=True, nullable = False)我希望令牌每次都是新的。但是现在如果我提交两个用户对象,它会给我一个Constraint Failed : Unique错误。另外,我正在使用 SQLite 进行测试,如果这有什么不同的话。该模型比这更大,但对于这个问题,我认为只有这些部分是相关的。
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

我认为你需要将make_token函数作为default参数传递,而不是它的返回值。

所以你可以尝试让你的make_token函数在字符串前面加上“USR-”:

    # ...
    return "USR-" + token

然后将该函数作为default参数传递:

    usrid = db.Column(db.String(10), primary_key=True,
                        default=make_token)


查看完整回答
反对 回复 2023-05-16
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信