Проблема связывания между скриптом python, flask framework и html

У меня странная проблема с передачей правильных данных из моего скрипта Python в график (highcharts) в моем html. Я использую веб-фреймворк Flask и сервер Ubuntu. У меня есть две идентичные веб-страницы html по структуре, но они различаются передаваемыми им данными (данные происходят из двух отдельных баз данных). Каждая веб-страница имеет несколько графиков (высоких диаграмм), один конкретный график на второй веб-странице возвращает неверные точки данных. Он возвращает точки данных, предназначенные для первой веб-страницы. Эта проблема не проявляется, когда я тестирую на своем локальном хосте, только при работе на сервере (да, я правильно скопировал файлы на свой сервер). Поскольку вы, возможно, не сможете точно определить проблему, любые идеи относительно устранения неполадок или причин, по которым мой сервер Ubuntu не обновляется должным образом, очень приветствуются. Прошу прощения, если этот вопрос неясен, это не самая простая проблема передать через текст. Вот пример кода... Я запускаю скрипты на python на своем сервере, и они передаются на мой html через мой файл инициализации фляги.

СЦЕНАРИЙ НА PYTHON

import os, sqlite3, datetime, pandas as pd, numpy as np

PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
DATABASE = os.path.join(PROJECT_ROOT, 'folder', 'my.db') 
conn = sqlite3.connect(DATABASE) 
c = conn.cursor()

averages_lm = (pd.read_sql("SELECT AVG(points_for) AS points_for, AVG(points_against) AS points_against, \
                          AVG(num_moves) AS moves, AVG(num_trades) AS trades, AVG(wins) AS wins, AVG(losses) AS losses, \
                          manager_name FROM standings WHERE curweek > 14 GROUP BY manager_name", conn))

averages_ex = (pd.read_sql("SELECT AVG(points_for) AS points_for, AVG(points_against) AS points_against, \
                          AVG(num_moves) AS moves, AVG(num_trades) AS trades, AVG(wins) AS wins, AVG(losses) AS losses, \
                          manager_name FROM standings_ex WHERE curweek > 14 GROUP BY manager_name", conn))


def averages_LM():
    global averages_lm
    return averages_lm

def averages_EX():
    global averages_ex
    return averages_ex

ИНИТ-ФАЙЛ

from flask import Flask, render_template, session, request, jsonify, json
import requests
import os, sys

PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(PROJECT_ROOT, 'Yahoo_Fantasy'))

from stats_fantasy import *

app = Flask(__name__)

@app.route('/html1')
def LowerMerion():

    averages = averages_lm()
    len_averages = len(averages['managers'])
    return render_template("html-1.html", title="title", averages=averages, len_averages=len_averages)

@app.route('/html2')
def SimgaChi():

    averages = averages_ex()
    len_averages = len(averages['managers'])
    return render_template("html-2.html", title="title", averages=averages, len_averages=len_averages)


if __name__ == "__main__":

    app.run(debug=True)

HTML (фрагмент)

<script>
$(function () {
    $('#chart-4').highcharts({
        chart: {
            type: 'column'
        },
        title: {
            text: 'Career Averages Per Season '
        },
        subtitle: {
            text: 'Regular Season'
        },
        xAxis: {
            categories: [ {% for i in range(len_managers) %} '{{ averages.manager_name[i] }}', {% endfor %}

            ],
            crosshair: true
        },
        yAxis: {
            min: 0,
            title: {
                text: 'Total Per Season'
            }
        },
        tooltip: {
            headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
            pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
                '<td style="padding:0"><b>{point.y:.1f} pts</b></td></tr>',
            footerFormat: '</table>',
            shared: true,
            useHTML: true
        },
        plotOptions: {
            column: {
                pointPadding: 0.2,
                borderWidth: 0
            }
        },
        series: [{
            name: 'Avg Wins',
            data: [{% for i in range(len_managers) %} {{ averages.wins[i] }}, {% endfor %}]

        }, {
            name: 'Avg Losses',
            data: [{% for i in range(len_managers) %} {{ averages.losses[i] }}, {% endfor %}]

        }, {
            name: 'Avg Moves',
            data: [{% for i in range(len_managers) %} {{ averages.moves[i] }}, {% endfor %}]

        }, {
            name: 'Avg Trades',
            data: [{% for i in range(len_managers) %} {{ averages.trades[i] }}, {% endfor %}]

        }, {
            name: 'Avg Draft Pick',
            data: [{% for i in range(len_managers) %} {{ draft_pos.pick[i] }}, {% endfor %}]

        }, ]
    });
});
</script>

Опять же, происходит что-то странное... поскольку сценарий будет меняться, когда я изменяю текст для графиков, но по какой-то причине передаваемые ему данные - это данные из функции Averages_LM(). Я думаю, что я неправильно передал ему эти данные с самого начала, и теперь они, похоже, не хотят меняться.


person Ceej    schedule 17.07.2015    source источник
comment
Я сократил код, чтобы попытаться включить только важные факторы из-за его длины. Пожалуйста, дайте мне знать, если есть какая-либо соответствующая информация, которую я не представил или представил должным образом в первый раз. Спасибо   -  person Ceej    schedule 18.07.2015
comment
Не могли бы вы показать, что генерируется на стороне клиента (html) в следующих местах: {% for i in range(len_managers) %} {{ draft_pos.pick[i] }}, {% endfor %} ?   -  person Paweł Fus    schedule 21.07.2015
comment
Поскольку он работал на моем локальном хосте, я в основном удалил все со своего сервера и заменил его средой рабочего стола, и теперь все работает.   -  person Ceej    schedule 22.07.2015


Ответы (1)


После первого взгляда на ваш код кажется, что вы возвращаете одни и те же данные в двух представлениях. Линия:

averages = averages_LM()

одинаково на обоих представлениях, не должно ли одно из них быть

averages = averages_EX()

?

Кроме того, если ваши два HTML-шаблона идентичны, вам не нужно создавать две отдельные страницы, вы можете просто иметь один шаблон для обоих представлений, содержимое шаблона будет зависеть от данных, которые вы передаете из представления.

person tagette    schedule 19.07.2015
comment
Прошу прощения, это была ошибка в моем сообщении. Я исправил, чтобы файл инициализации возвращал правильные функции. Я могу попробовать вернуть один HTML-шаблон и посмотреть, как это может помочь. Однако у меня есть похожие функции и сценарии, которые отлично работают в тех же сценариях Python и html, поэтому я не уверен, что это исправит ситуацию. Это больше похоже на выборку или отправку данных, некоторые вещи, кажется, обновляются мгновенно, в то время как другие модификации python/init не имеют никакого эффекта. - person Ceej; 19.07.2015
comment
Нет проблем. Наличие только одного шаблона не должно помочь решить вашу проблему, но просто упрощает поддержку кода. Ваш javascript находится внутри вашего html-файла или в отдельном файле? - person tagette; 19.07.2015