首页 > 解决方案 > 刷新页面时烧瓶网站重复返回值

问题描述

我有一个 python 程序 (port.py),它执行一些简单的 ETA 计算并将值列表返回给 Flask (app.py),然后将它们打印到基本的 html 页面 (index.html)

我遇到的问题是,当我重新加载页面时,上次计算中的所有现有数据仍然存在。它确实更新了新时间的计算,但它只是在前一个之后打印出来。

我花了一整天的时间试图让它清除以前的计算并将当前值返回到一个干净的 html 页面,而不仅仅是简单地重复它。

这一切都有效,但它只是格式化并在您每次访问正在摧毁我的网站时获得一个干净的网页。

这是我的 port.py 中的代码

import datetime
# from tabulate import tabulate
import timedelta
import sqlite3


class Port:
    def __init__(self, name, distance, sheet):
        self.name = name
        self.distance = distance
        self.sheet = sheet
        portlist.append(self)

    def time(self):
        i = ((48 - self.distance) / s * 3600)
        i = timedelta.Timedelta(seconds=i)
        return i

    def eta(self):
        k = self.time()
        # TODO: now needs changing to start time when inputting a start time
        k = k + start
        return k

    def tide(self):
        # connect to database
        conn = sqlite3.connect('pythonsqlite.db')
        conn.row_factory = sqlite3.Row
        # create a cursor
        c = conn.cursor()
        # round the times
        r = self.eta()
        approx = round(r.minute / 10.) * 10
        r = r.replace(minute=0)
        r += datetime.timedelta(seconds=approx * 60)
        rounded = r.time()

        date = r.strftime('%d-%m-%y')
        time = rounded.strftime('%H:%M')
        # this is where to search the excel/sql file
        # TODO change basedata2 for a table depending on the port location
        c.execute("SELECT rowid, * FROM basedata2 WHERE Date = '" + date + "'")
        f = c.fetchone()
        f = f[time]
        f = f / 100
        conn.commit()
        conn.close()
        return f

    def planned(self):
        p = self.eta()
        p = p.strftime("%H:%M")
        return p

    def ukc(self):
        u = self.tide() - d
        return u


s = 10

d = 5
# d = float(input('Draft: '))


start = datetime.datetime.now()
portlist = []


def createplan():
    Port("port1", 48.0, 'Sheet1')
    Port("port2", 42.9, 'Sheet1')
    Port("port3", 40.1, 'Sheet1')
    Port("port4", 38.0, 'Sheet1')
    Port("port5", 35.6, 'Sheet1')
    Port("port6", 33.4, 'Sheet1')
    Port("port7", 31.7, 'Sheet1')
    Port("port8", 31.4, 'Sheet1')
    Port("port9", 30.7, 'Sheet1')
    Port("port10", 27.7, 'Sheet1')
    Port("port11", 26.2, 'Sheet1')
    Port("port12", 24.7, 'Sheet1')
    Port("port13", 22.5, 'Sheet1')
    Port("port14", 19.7, 'Sheet1')
    Port("port15", 18.4, 'Sheet1')
    Port("port16", 11.8, 'Sheet1')
    Port("port17", 8.3, 'Sheet1')
    Port("port18", 6.3, 'Sheet1')
    Port("port19", 0, 'Sheet1')
    Port("port20", 5.2, 'Sheet1')
    Port("port21", 2.6, 'Sheet1')
    Port("port22", 1.7, 'Sheet1')
    Port("port23", 0, 'Sheet1')


# def createtable():
#     headers = ['Location', 'Time', 'Tide', 'UKC']
#     # TODO: rename these
#     tablename1 = []
#     tablename2 = []
#     tablename3 = []
#     tablename4 = []
#
#     for obj in portlist:
#         # print(obj.name, obj.planned(), obj.tide())
#         tablename1.append(obj.name)
#         tablename2.append(obj.planned())
#         tablename3.append(obj.tide())
#         tablename4.append(obj.ukc())
#
#     table = zip(tablename1, tablename2, tablename3, tablename4)
#     print(tabulate(table, headers=headers, tablefmt='github', floatfmt=".2f"))


def printportlist():
    createplan()
    location = []
    planned = []
    tidevalue = []
    ukc = []
    for obj in portlist:
        location.append(obj.name)
        planned.append(obj.planned())
        tidevalue.append(obj.tide())
        ukc .append(obj.ukc())
    return location, planned, tidevalue, ukc


def main():
    # createplan()
    # createtable()
    printportlist()


if __name__ == "__main__":
    main()

这是我的 app.py

from flask import Flask, render_template
from flask_moment import Moment
import datetime
import port

app = Flask(__name__)
moment = Moment(app)


@app.route('/')
def index():
    return render_template('index.html', current_time=datetime.datetime.utcnow())


@app.route('/user/<name>')
def user(name):
    return render_template('user.html', name=name)


@app.route('/port')
def runport():
    return render_template('index.html', content=[port.printportlist()])


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

这是我的 index.html 中的代码

<!doctype html>
<html lang="eng">
<head>
    <title>Port Page Testing</title>
    </head>
    <body>
        <h1>Port Page Testing!</h1>
        {% for x in content %}
            <p>{{ x }}</p>
        {% endfor %}

    </body>
</html>

真的很感激任何帮助..我似乎无法弄清楚这一点。

编辑:包括所有代码

标签: pythonpython-3.xflask

解决方案


推荐阅读