使用类创建的数据无法通过烧瓶应用程序显示到 html 中

Posted

技术标签:

【中文标题】使用类创建的数据无法通过烧瓶应用程序显示到 html 中【英文标题】:Data created with class failes to be displayed with flask app into html 【发布时间】:2020-10-28 14:30:17 【问题描述】:

我正在尝试为我在实习中创建的工具制作一个烧瓶应用程序。我有一个可以生成熊猫数据框的活动类,我希望使用烧瓶将其显示到 html 中的表格中。我测试了一个简单的例子,它工作得很好并显示给定的数据框,但是一旦我尝试对 Activites 类做同样的事情,它就不起作用了。代码本身不会导致内核出现任何错误,但是当我转到 http://localhost:5000/ 时,我的网络浏览器(Chrome)说 localhost 不允许连接:ERR_CONNECTION_REFUSED。仅创建数据就需要 15 分钟的课程,我在想 Chrome 可能不喜欢等待这么长时间而只是拒绝连接? 我是 Flask 的新手,所以我很困惑。谢谢你的帮助:)

这是简单的工作代码:

import pandas as pd
from flask import Flask, redirect, url_for, request, render_template

app = Flask(__name__) 

df = pd.DataFrame('A': [0, 1, 2, 3, 4],
                   'B': [5, 6, 7, 8, 9],
                   'C': ['a', 'b', 'c', 'd', 'e'])

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

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

@app.route('/handle_data', methods=['POST'])
def handle_data():
    return render_template('simple.html', tables=[df.to_html(classes='data')], titles=df.columns.values)

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

这是我正在尝试做的,但不起作用:

import pandas as pd
from flask import Flask, redirect, url_for, request, render_template
from activities import Activities

app = Flask(__name__) 

activities = Activities()

activities.load_data()

df = activities.raw_data.head()

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

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

@app.route('/handle_data', methods=['POST'])
def handle_data():
    return render_template('simple.html', tables=[df.to_html(classes='data')], titles=df.columns.values)

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

【问题讨论】:

【参考方案1】:

我用于需要时间返回客户端的数据的方法是 AJAX 以获取数据发布页面加载。

    更改了 /handle_data 路由以响应 GET 并移动 heavy 将数据框架提升到其中(逻辑上) 使用Response()flask对象返回数据框的html 使用 JQuery 对 /handle_data 路由进行 AJAX 调用以获取表的 HTML

app.py

import pandas as pd
from flask import Flask, redirect, url_for, request, render_template, Response

app = Flask(__name__)

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

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

@app.route('/handle_data')
def handle_data():
    df = pd.DataFrame('A': [0, 1, 2, 3, 4],
                       'B': [5, 6, 7, 8, 9],
                       'C': ['a', 'b', 'c', 'd', 'e'])
    return Response(df.to_html())

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

home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
    <title>Example</title>
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"
            integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
            crossorigin="anonymous"></script>
</head>
<body>
    <header>
        <h1>Header 1</h1>
    </header>
    <main id="main">
        <section id="data-section">
            <h2>Data</h2>
            <div id="data"/>
        </section>
    </main>
</body>
<script>
    function apicall(url) 
        $.ajax(
            type:"GET",
            url:url,
            success: (data) => 
                $("#data").html(data);
            
        );
    

  window.onload = function () 
    apicall("/handle_data");
  
</script>
</html>

【讨论】:

我对 JQuery 或 AJAX 不熟悉,您有其他解决方案吗?或者有一个学习基础知识的链接?谢谢你的帮助。 我提供的 home.html 示例是您使用两者所需的一切。用我提供的 app.py 试试,这是我描述的完整示例 我应该在 handle_data() 中调用我的类吗?因为当我在应用程序之外创建它时,它会在后台一遍又一遍地运行。 就是这个想法 - 这是一个长期运行的过程。如果运行时间很长,您应该考虑定期在烧瓶应用程序之外进行计算,保存下来然后在 handle_data() 中重新加载。 定期运行是什么意思?

以上是关于使用类创建的数据无法通过烧瓶应用程序显示到 html 中的主要内容,如果未能解决你的问题,请参考以下文章

无法导入名称'日期时间'python烧瓶sqlalchemy

使用来自 SQLAlchemy 对象的数据在烧瓶中预填充 WTforms

无法使用烧瓶邮件python将附件添加到邮件

无法使用带有两个按钮的烧瓶从 sqlite db 中删除记录

无法使用获取API将表单数据发布到烧瓶

如何使用 flask_pymongo 将数据从 mongodb 显示到烧瓶模板?