使用Flask在Python文件中调用函数

时间:2017-06-07 09:06:14

标签: python flask

我有一个名为testing_file.py的python文件:

    from datetime import datetime
    import MySQLdb

    # Open database connection
    class DB():
        def __init__(self, server, user, password, db_name):
            db = MySQLdb.connect(server, user, password, db_name )
            self.cur = db.cursor()

        def time_statistic(self, start_date, end_date):

            time_list = {}

            sql = "SELECT activity_log.datetime, activity_log.user_id FROM activity_log"
            self.cur.execute(sql)
            self.date_data = self.cur.fetchall()
            for content in self.date_data:

                timestamp = str(content[0])
                datetime_object = datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S')
                timestamps = datetime.strftime(datetime_object, "%Y-%m-%d")

                if start_dt <= timestamps and timestamps <= end_dt:
                    if timestamps not in time_list:
                        time_list[timestamps]=1
                    else:
                        time_list[timestamps]+=1

                    return json.dumps(time_list)

    start_date = datetime.strptime(str('2017-4-7'), '%Y-%m-%d')
    start_dt = datetime.strftime(start_date, "%Y-%m-%d")
    end_date = datetime.strptime(str('2017-5-4'), '%Y-%m-%d')
    end_dt = datetime.strftime(end_date, "%Y-%m-%d")        

    db = DB("host","user_db","pass_db","db_name")
    db.time_statistic(start_date, end_date)

我想使用Flask通过API访问结果(time_list)。这是我到目前为止所写的,不起作用,我也尝试过另一种方式:

    from flask import Flask
    from testing_api import *

    app = Flask(__name__)

    @app.route("/")
    def get():
        db = DB("host","user_db","pass_db","db_name")
        d = db.time_statistic()
        return d

    if __name__ == "__main__":
        app.run(debug=True)

问题:这是我第一次使用API​​和Flask。任何人都可以通过这个来帮助我。任何提示都表示赞赏。谢谢

我有空列表作为结果{}

2 个答案:

答案 0 :(得分:1)

你做的事情有很多不妥之处。

1&GT; def get(self, DB)为什么self?此功能不属于某个类。它不是实例函数。 self是调用实例方法时类实例的引用。这里不仅不需要,而且简单而且简单错误。

2&GT;如果您稍微研究一下flask的路由声明,您将看到如何使用参数声明路由。这是link。从本质上讲你应该是这样的

@app.route("/path/<variable>")
def route_func(variable):
    return variable

3&GT;最后,还有一件事我想提一下,请不要调用常规python文件test_<filename>.py,除非您打算将它用作单元测试文件。这非常令人困惑。

哦,你已经从你的模块中导入了DB,不需要将它作为参数传递给函数。无论如何它应该在里面可用。

答案 1 :(得分:0)

在你的代码中有很多错误(从“无用和不清楚”到“完全错误”)。

wrt / TypeError:正如错误消息所示,您的get()函数需要两个不会被Flask传递的参数(selfDB) - 并且实际上并没有在函数中使用。删除这两个参数,你将摆脱这个错误 - 只是为了发现你现在在NameError函数的第一行有一个get()(显然,因为你没有导入{{1} }也未定义time_statisticstart_date)。