问题描述
我希望每次提交新用户时都创建一个新的随机用户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}}