0

考虑以下:

我正在使用 python 为我的家人制作一个明年的秘密圣诞老人脚本,虽然我已经知道如何绘制名字(见下面的代码),但我只需要执行一次。我打算使用烧瓶框架来创建一个页面倒计时直到抽奖的天数(我也想通了),但是我怎么做才能让它抽奖,只有一次,而不是每次有人登录到那个页面?明白我的意思吗?

无论如何,我会在这里向您展示我的代码:

# imports & initial Flask set up above

def do_matchup(names, draw, matches=None):
   if matches is None:
      matches = []

   while names:
       member = names.pop()
       recipient = choice(draw)

       if recipient != member:
           matches.append("%s=%s" % (member, recipient))
           draw.remove(recipient)
       else:
           names.append(member)

   return matches


@app.route("/")
def index():
    now = dt.datetime.now()
    draw_date = dt.datetime.strptime('10/1/2013', '%m/%d/%Y')
    days = draw_date - now
    family = ["member1", "member2", "member3", "member4", "member5", "Me"]
    hat_names = [name for name in family]
    matchup = do_matchup(family, hat_names)

    return render_template("base.html", now=now,
                                        draw_date=draw_date,
                                        days=days, 
                                        matchup=matchup)

该模板是一个基本的 html 页面,上面写着 {% if now < draw_date %} “距离抽奖还有 x 天”,{% else %} “显示抽奖结果”。

每次加载页面时,它都会进行新的绘制。我怎样才能让它只抽一次而不给每个家庭成员不同的结果?

4

2 回答 2

1

您需要有一种单独的方式来运行 shuffle - 例如通过访问特定页面。该代码还应该将洗牌保存到数据库中。另一种方法是检查当前年份是否已经存在随机播放,如果没有则仅生成并保存。

从根本上说,答案是将您的洗牌保存在例如数据库中。

于 2012-12-30T18:47:57.797 回答
1

如果您不使用数据库并且只需要少量保存的结果,则可以将匹配项腌制到文件中。然后在您的索引中,您只需检查该文件是否存在,如果存在,则读取该文件并返回该匹配项。否则,您将生成一个新的匹配,保存它并返回结果。

于 2012-12-30T18:49:51.710 回答