如何将信息从Python代码传递到Web信息显示?

我想建立一个功能类似于https://www.howmanypeopleareinspacerightnow.com/的网站,在那里我有一个网站信息显示,该信息定期刷新以显示流经城镇的河流的水流量。我正在使用Beautiful Soup抓取数据,并想创建一个网站,该网站使用经过python处理的数据来生成预定的网站内容(例如,“水位很高,流速为XXX / s”,或者“现在水很低”。

根据我的阅读,我可以创建一个在heroku上托管的Python应用程序,但是随后我必须在程序中制作一个GUI,对吗?如何在无需用户运行程序的情况下将程序变成html页面的信息源?

我觉得有个名字,但到目前为止,我的Google搜寻还没有打开任何东西:(

l5600666 回答:如何将信息从Python代码传递到Web信息显示?

查看Flask,您可以通过python生成内容,并使用Flask轻松显示它。

,

Django是使用Python创建网页的首选方法-它具有非常全面的tutorial,并且可以处理所有后端内容。您仍然需要弄清楚托管。云服务(例如AWS或Azure)可以与Django很好地配合使用,或者您可以从自己的计算机上托管。

对于前端开发,可以使用WYSIWYG(所见即所得)设计器,该设计器允许您拖放以创建页面。然后,您可以导出页面并将其用作Django中的模板。如果您的网站比较复杂,则需要学习一些基于文本的基本HTML技能。

,

听起来您想构建一个动态SPA(单页应用程序)。

您需要由应用服务器托管后端,该后端将处理路由并提供动态内容(水流量)。

然后,您需要一些前端代码来呈现漂亮的UI并显示后端提供的内容。

听起来像您想使用python(根据问题标签)。

实现此目标的快速方法是创建python Flask应用。 Flask将允许您构建应用服务器。另外Flask有一个“模板引擎” Jinja2,它允许您通过组合HTML和python对象来创建UI。

例如:

创建一个名为waterprojectwaterproject/templates/的文件夹 然后创建2个文件,waterproject/app.pywaterproject/templates/index.html

# waterproject/app.py
from flask import Flask,render_template
import json

app = Flask(__name__)

def read_water_level():
    with open('/file/where/data/is/stored.txt') as file:
        water_level = file.read()

    return water_level

@app.route('/index',methods=['GET'])
def index():

    render_template('index.html',water_level=read_water_level())

@pp.route('/waterlevel',methods=['GET'])
def get_water_level():
    return json.dumpss({'waterlevel': read_water_level()})

if __name__ == "__main__":
    app.run(host='localhost',debug=True)

以上我们创建了2条路线。一个用于服务主页,另一个用于仅返回水位的api端点。该端点将用于允许前端自动轮询后端的水位,而不必重新渲染(或刷新)整个页面。 另外,假设您的网页抓取工具将水位保存在文件“ /file/where/data/is/stored.txt”中

然后,您将在上述路线渲染中创建.html文件(index.html)。

# in /waterproject/templates/index.html
<!DOCTYPE html> 
<html> 

<head> 
<script src="jquery-3.4.1.min.js"></script>

    <title>Water Level of River</title> 
    <style> 
        body { 
            text-align: center; 
        } 

        #water { 
            color: blue; 
        } 
    </style> 

    <script>
        var get_water_level = function() {
            $.get( "/waterlevel",function( data ) {
              $( "#water" ).html( data['waterlevel'] );
            });
        };
        var interval = 1000 * 60 * X; // where X is your every X minutes

        setInterval(get_water_level,interval);

    </script>
</head> 

<body>
    <div id="water">
        {{water_level}}
    </div>
</body> 

</html> 

请注意,此html文件是如何将{{water_level}}对象嵌入到html中的。这不是正确的html,但是Flask使用的模板引擎允许我们有效地将water_level对象从应用服务器的python代码传递到html文档中。

此外,.html页面中包含一些javascript,以便每X分钟获取水位并更新页面。因此,如果用户访问您的页面并在页面上停留10分钟,则该页面将每分钟自动刷新一次。

要部署该应用程序,请查看Flask的文档,那里有一些不错的选项和说明,包括有关Heroku的说明。 https://flask.palletsprojects.com/en/1.0.x/deploying/

*注意,我实际上并未运行此代码,但它应该为您提供一个良好的起点。 将您的css,javascript和html组织在不同的文件中也是一种很好的做法,但是对于一个如此小的应用程序,为了保持简单起见,所有内容都显示在一个文件中。

本文链接:https://www.f2er.com/3134771.html

大家都在问