ValueError:尚未提供以下参数:电子邮件

2024-10-09 01:13:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下途径,在POST请求时执行特定任务&;将计数增加1

@blueprint.route("Calendar", methods=['GET', 'POST'])
def Calendar(): 
    count +=1
    email = request.json.get('email') 
    therestart(email)
    return email

我希望每个用户每24小时重置一次计数,因此我想到的最好方法是执行后台调度程序:

import atexit
from apscheduler.schedulers.background import BackgroundScheduler

def therestart(email):
        if email:
            user = User.query.filter_by(email=email).first()
            user.count = 0
        return 'no email'
    
scheduler = BackgroundScheduler()
scheduler.add_job(func=therestart, trigger="interval", seconds=200) #change to 86400 sec in prod
scheduler.start()

这会产生一个错误:

ValueError: The following arguments have not been supplied: email

这是有道理的,但同时,如果我把它改成这样:

def therestart(email):
    if email:
        scheduler()
def scheduler()
    scheduler = BackgroundScheduler()
    scheduler.add_job(func=therestart, trigger="interval", seconds=3) 
    scheduler.start()

然后,每当电子邮件被传递或激活时,scheduler()就会执行违背我目标的操作

如果有人能把我从困境中解救出来,我将不胜感激


Tags: importaddreturnifemaildefcountjob
2条回答

您需要在目标函数中为email参数传递一个值。因此,您需要使用argskwargs来实现这一点。因此,您可以这样做:

def therestart(*args):
    if len(args)>0:
        email = args[0]
        user = User.query.filter_by(email=email).first()
        user.count = 0
    return 'no email'

我最后做了:

def restart():
    users = User.query.all()
    for user in users:
        if user.stripeSubscriptionId is None:
            user.count = 1
            db.session.commit()
    return ''

相关问题 更多 >

    热门问题