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

2024-04-25 13:50:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个类似于https://www.howmanypeopleareinspacerightnow.com/功能的网站,在那里我有一个网站信息显示,定期刷新显示流经城镇的河流的水流。我正在使用Beautiful Soup抓取数据,并希望创建一个网站,使用我的python处理的数据生成预先确定的网站内容(例如,“现在的水很高,它的流速为XXX/s”或“现在的水很低”)。你知道吗

据我所知,我可以创建一个托管在heroku上的Python应用程序,但是我必须在程序中创建一个GUI,对吗?如何将程序转换为html页面的信息源,而不必让用户运行程序?你知道吗

我觉得这是一个名字,但我的谷歌搜索到目前为止还没有发现任何东西:(


Tags: 数据https程序功能com信息网站www
3条回答

听起来你想建立一个动态SPA(单页应用程序)。你知道吗

您将希望和app server托管后端,后端将处理路由和提供动态内容(水流量)。你知道吗

然后需要一些前端代码来呈现一个漂亮的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)

上面我们创建了两条路线。一个服务于主页,另一个服务于只返回水位的api端点。此端点将用于允许前端自动轮询后端的水位,而无需重新呈现(或刷新)整个页面。 另外,假设您的web scraper将水位保存在“/file/where/data/is”文件中/存储.txt'

然后创建.html文件(索引.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,但是模板引擎允许我们有效地将应用服务器的python代码中的water_level对象传递到html文档中。你知道吗

另外,html页面中有一些javascript,可以每X分钟获取一次水位,并更新页面。因此,如果用户访问你的页面并停留10分钟,页面将自动刷新每分钟。你知道吗

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

*注意,我实际上没有运行此代码,但它应该给您一个很好的起点。 另外,将css、javascript和html组织在不同的文件中也是一种很好的做法,但是对于这样一个小的应用程序,为了保持简单,所有内容都显示在一个文件中。你知道吗

查看Flask,您可以通过python生成内容,并使用Flask轻松地显示内容。你知道吗

Django是用Python创建网页的常用方法—它有一个相当全面的tutorial,并将处理所有的后端内容。你仍然需要弄清楚托管;云服务(如AWS或Azure)可以很好地使用Django,或者你可以从自己的计算机托管。你知道吗

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

相关问题 更多 >