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

问题描述

我希望每次提交新用户时都创建一个新的随机用户ID。 为此,我使用的格式为:USR-<token>

令牌是通过此功能制成的:

import string
import secrets
def 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)

我希望令牌每次都是新的。但是现在,如果我提交两个User对象,它将给我一个Constraint Failed : Unique错误。另外,我正在使用SQLite进行测试,如果有什么不同的话。 该模型比这个模型更大,但是对于这个问题,我认为只有这些部分是相关的。

解决方法

我认为您需要将default参数传递给make_token函数,而不是返回值。

因此,您可以尝试将 # ... return "USR-" + token 函数的前缀“ USR-”添加到字符串:

default

然后将该函数作为 usrid = db.Column(db.String(10),primary_key=True,default=make_token) 参数传递:

{{1}}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...