我如何只使用一次python的选择?

时间:2012-12-30 18:43:55

标签: python list

请考虑以下事项:

我正在使用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%}“显示绘制结果”。

每次加载页面时,都会进行新的绘制。我如何做到这一点,它只是绘制一次,而不是给每个家庭成员不同的结果?

2 个答案:

答案 0 :(得分:2)

如果您没有使用数据库而只需要少量保存的结果,那么您可以将匹配文件挑选出来。然后在索引中只检查文件是否存在,如果存在,则读取该文件并返回该匹配项。否则,您将生成一个新的比赛,保存并返回结果。

答案 1 :(得分:1)

你需要有一个独立的方式来运行shuffle - 例如通过访问特定页面。该代码还应该将shuffle保存到数据库中。另一种方法是检查当前年份是否已经有一个shuffle,并且只有在没有的情况下才会生成并保存。

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