在Flask中使用random.randint

时间:2016-08-08 00:24:28

标签: python random

我正在玩Flask以更好地理解它。我有一个简单的应用程序查询大型数据库并返回一个随机元素。以下代码无效,但我确切知道它失败的地方。当random.randint()获取列表中的随机元素时,它失败了。但是我的日志中没有显示错误,这是什么原因?如果我使用硬编码值而不是随机int,它可以工作。我用curl来测试它。我剪断了数据库代码,因为它似乎是正确的。

from flask import Flask, render_template, request
import sqlite3
import random
app = Flask(__name__)
def show_home_page():
    return render_template("home.html")

def get_random_element():
    # <snipped>: Do some sql queries and populate a list called P_LIST
    r = random.randint(0, len(P_LIST)) # This line silently fails.
    r_e = P_LIST[r]  # Never seems to get here
    print "get_random_element", r_e  # Never prints this line!!
    return r_e

@app.route('/')
def server():
    return show_home_page()

@app.route('/element', methods=['POST', 'GET'])
def random():
    if request.method == 'GET':
        p = request.args.get('q', '')
        print "Request:", p
        if p == 'random' or p == '':
           p = get_random_element()
           print "Random element:", p
        else:
           print "Else:", p
        return render_template('random.html', element=p)
    return show_home_page()

if __name__ == '__main__':
    app.run()

2 个答案:

答案 0 :(得分:1)

您已通过定义名为random的函数重新定义random()

@app.route('/element', methods=['POST', 'GET'])
def random():
    ...

这会影响导入的模块,导致您看到的问题。当您import random再次get_random_element()时,您的代码可以访问模块 random而不是本地函数random()

通过重命名该函数来修复此问题,也许将其称为element(),因为这是路径名称。

答案 1 :(得分:0)

这是我不明白的事情,但这里正在发生的事情。我需要在random()函数中随机导入。否则全局“导入随机”声明似乎不够。不知道为什么。因此在random()中添加一个导入行使其工作。 如果有人能够解释这一点,我将不胜感激。

编辑:现在我明白发生了什么。函数名称random()导致某种冲突。如果我将它改为rand(),现在只需一次全局导入就可以正常工作。