Обновите веб-страницу с помощью cURL и flask - PullRequest
0 голосов
/ 16 июня 2020

Я начал изучать flask для веб-разработки и экспериментировать с ним, так как у меня в голове есть веб-сайт, который я хотел бы создать.

Моя мысль заключалась в том, чтобы создать домашнюю страницу, показывающую некоторые данные, которые будут обновляется с помощью cURL или библиотеки запросов python. У меня есть другой код python, который генерирует данные для отображения, и я хотел бы использовать запрос POST для отправки словаря с сгенерированной информацией на сервер и обновления домашней страницы этой новой информацией.

Довольно упрощенная c, но исчерпывающая версия того, что я пробовал до сих пор:

from flask import Flask, redirect, url_for, render_template, request

app = Flask(__name__)

@app.route("/", methods=["POST", "GET"])
def home():
    if request.method == "POST":
        data = request.form["data"]
        return render_template("index.html", content=data)
    else:
        return render_template("index.html", content="initial_data")


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

Код для индекса. html

<!doctype html>
<html>
<head>
    <title>Home Page</title>
    </head>
    <body>
        {{content}}
    </body>
</html>

Итак, я хотел бы отправить Запрос POST с некоторыми новыми данными на сервер и обновление веб-страницы этими новыми данными.

import requests
payload = {'data': 'new_data'}
r = requests.post("http://localhost:5000/", data=payload)

Все вышеперечисленное не позволяет обновить данные на веб-странице, когда я отправляю запрос, это просто остается такой же. Я совсем сбился с курса? Возможно ли это даже так, как я задумал?

Любые комментарии приветствуются, спасибо.

1 Ответ

1 голос
/ 16 июня 2020

data остается прежним, потому что он каждый раз переназначается как локальная переменная. Когда происходит запрос POST, переменная создается, передается в шаблон, а затем уничтожается, когда выходит за пределы области видимости.

Попробуйте это в качестве эксперимента, чтобы показать, как переменная может сохраняться между загрузками страницы, но только до тех пор, пока сервер перезагружается:

from flask import Flask, redirect, url_for, render_template, request

app = Flask(__name__)

app_state = {
    'data': 'Initial Data'
}


@app.route("/", methods=["POST", "GET"])
def home():
    if request.method == "POST":
        app_state['data'] = request.form['data']
    return render_template("index.html", content=app_state['data'])


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

В этом примере вы создаете глобальный словарь app_date и обновляете в нем ключ каждый раз, когда пользователь отправляет запрос POST на / с формой полезная нагрузка data.

Затем мы возвращаем шаблон с содержанием элемента словаря.

Несколько заметок

  • Реализация, которую я предоставил, все равно быть уязвимым к условиям гонки , если два человека вносят изменения одновременно.
  • Для такого рода вещей вам обычно требуется более постоянное решение, например, база данных.
...