猿问

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)

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


牧羊人nacy
浏览 111回答 1
1回答

森林海

我认为你需要将make_token函数作为default参数传递,而不是它的返回值。所以你可以尝试让你的make_token函数在字符串前面加上“USR-”:&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"USR-"&nbsp;+&nbsp;token然后将该函数作为default参数传递:&nbsp;&nbsp;&nbsp;&nbsp;usrid&nbsp;=&nbsp;db.Column(db.String(10),&nbsp;primary_key=True, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default=make_token)
随时随地看视频慕课网APP

相关分类

Python
我要回答