簡體   English   中英

Django 正在運行 Python Function 以更新頁面而無需刷新

[英]Django Running Python Function to Update Page w/o Refresh

我正在制作一個跟蹤人口統計數據的網站。 該站點需要大約每 5 秒更新一次最新信息。

以下是在頁面上顯示 pandas df 的相關代碼(在名為“home.html”的文件中):

{% block content %}
    <h1>Population Tracker</h1>
        {% for index, label,data in pop_df.itertuples %}
            <div class = "row__data">
                <p>{{label}}: {{data}}</p>
            </div>
        {% endfor %}
{% endblock content %}

這是我的刮刀的代碼(在一個名為“scraper.py”的單獨文件中)

class Scraper():

    def __init__(self):
        self.URL = "https://countrymeters.info/en/Japan"

    def scrape(self):
        "Scrapes the population data once"
        page = requests.get(self.URL)
        soup = BeautifulSoup(page.content,'html.parser')

        data_div = soup.find_all('div',class_="data_div")[0]
        table = data_div.findAll("table")[0]

        tr = table.findAll('tr')

        labels = []
        numbers = []

        for n, i in enumerate(tr):
            number = i.findAll('td',{"class":"counter"})[0].text # numbers
            label = i.findAll('td',{"class":"data_name"})[0].text # labels

            labels.append(label)
            numbers.append(number)

        pop_df = pd.DataFrame(
            {
                'Labels':labels,
                'Data': numbers
            }
        )
        return pop_df

在我的 views.py 文件中,這是我所做的:

from django.shortcuts import render
from bsoup_tracker.scraper import Scraper

scraper = Scraper()
df = scraper.scrape()

def home(request):
    context = {
        'pop_df':df
    }
    return render(request,'tracker/home.html',context)

基本上,我希望能夠每 5 秒調用一次渲染到我的 home.html 頁面來重新更新頁面,而無需刷新。 我試圖尋找其他地方,發現 Ajax 可以提供幫助; 但是我不知道從哪里開始。

Instead of using Django to render the page, create API and call every after 5 minutes and after getting the results, refresh the HTML content using JavaScript.

如果您需要更多信息,請告訴我。

AJAX代表“異步 JavaScript 和 XML”,因此您認為如果您需要從后端獲取數據並刷新界面,這將是 go 的方式。

在原版 JavaScript 中的XmlHttpRequest object 中執行此操作的基本組件。 但是,我強烈建議使用像 jQuery 這樣的庫,對我來說它真的更容易使用。 使用 vanilla JS、jQuery 或您選擇的任何其他庫,您可以修改 DOM 以公開從后端獲取的數據。 主要缺點是您最終可能會得到不那么干凈的代碼,這將變得越來越難以維護。

現在最常見的解決方案是使用djangorestframework (不是強制性的,你也可以使用 django 的JsonResponse )來創建一個 API 以及像 React 或 VueJS 這樣的 nodeJS 框架來使用 API 的數據創建你的界面。 這樣,您將對界面進行更多控制。

最后,如果您需要某種實時網站(每 5 秒拉取數據和刷新界面對我來說似乎是一種糟糕的設計模式),您應該在前端使用 websockets,在后端使用 ASGI(而不是 WSGI)。 Django-channel 是一個不錯的 package 這樣做,但只需谷歌“django websockets”,你會發現很多文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM