Flask ошибка времени выполнения ответа Работа вне контекста запроса - PullRequest
0 голосов
/ 10 января 2020

есть. Я получаю ошибку времени выполнения из контекста запроса flask. Пожалуйста, помогите мне в решении этого. Ниже мой код и подробное объяснение того, чего я пытаюсь достичь. Заранее спасибо.

Это app.py

from flask import Flask, render_template, Response, request
import time
import pandas as pd  
from googlesearch import search

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST','GET'])
def upload():
    global dataset
    file = request.files['inputFile']
    data_xls = pd.read_excel(file)
    dataset = data_xls.iloc[:,0].values
    return dataset

@app.route('/progress')
def progress():
    def generate():
        j = 0

        domainstrue = dataset
        websiteLinks= []

        for i in range(0,len(domainstrue)): 
            query = domainstrue[i]
            j=j+1                               # Calculates the progress and finds the percentage to display on localhost.
            y = (j/len(domainstrue))*100
            yield "data:" + str(y) + "\n\n"
            for every_link in search(query, tld="co.in", num=1, stop=1, pause=2): # This fetches the first link from the search result
                websiteLinks.append(every_link)
                time.sleep(4)

    return Response(generate(), mimetype= 'text/event-stream')

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

Это шаблоны / index. html

<!DOCTYPE html>
<html>
<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
    <script>
    var source = new EventSource("/progress");
    source.onmessage = function(event) {
        $('.progress-bar').css('width', event.data+'%').attr('aria-valuenow', event.data);
        $('.progress-bar-label').text(event.data+'%');
        if(event.data == 100){
            source.close()
        }
    }
    </script>
</head>
<body>
    <h1>Transform a file demo</h1>

        <form action="/upload" method="post" enctype="multipart/form-data">
            <input type="file" name="inputFile" /></br>
            <input type="submit" />
        </form>

    <div class='progress'style="width: 50%; margin: 50px;">
        <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
            <span class="progress-bar-label">0%</span>
        </div>
    </div>
</div>
</body>
</html>

Итак, чего я достиг до сих пор, так это того, что когда я запускаю код, я могу загрузить файл (excel) на локальный хост и обработать его по маршруту '/ upload'. Теперь я пытаюсь добиться того, что обработанный файл с маршрута загрузки должен быть получен методом прогресса, и, поскольку начинается с l oop, я должен видеть прогресс в html в форме прогресса. bar.

  1. Теперь есть 2 ошибки, которые я не могу здесь преодолеть:
  2. Во-первых, несмотря на объявление «набора данных» как глобального, я не могу прочитать «набор данных» в процессе метода. Это показывает и ошибка, что набор данных не определен
  3. Во-вторых, когда я запускаю код, я получаю ошибку во время выполнения. Пожалуйста, проверьте это сообщение об ошибке скриншот ошибки

Кроме того, я искал ошибку в Google, но не смог найти выход. Пожалуйста, помогите мне. Я потратил 5 дней на это, но все еще не смог решить. Спасибо

...