У меня есть очень простая веб-страница, которая просто читает текстовый файл со списком адресов электронной почты и записывает их в таблицу. Рядом с каждой строкой есть кнопка удаления, позволяющая удалить конкретное электронное письмо из списка. Также есть кнопка для сохранения данных таблицы в файл.
Я не могу заставить ее работать, поэтому могу добавить строки, которые являются полями ввода, где пользователи могут вводить новые адреса электронной почты и который будет сохранен в файл после того, как я нажму «Сохранить», и преобразует поле ввода в нередактируемое текстовое поле. По сути, я хочу, чтобы пользователь видел ту же страницу без полей ввода после того, как нажмет кнопку «Сохранить в файл», но добавленные строки должны быть включены в таблицу.
Это код:
from distutils.log import debug
from flask import *
app = Flask(__name__)
data_file = 'emails.txt'
@app.route("/save", methods=["POST"])
def saveEmails():
rows = json.loads(request.form["emails"])
with open(data_file, 'w') as f:
for row in rows:
f.write(row + '\n')
return render_template('index.html', emails=rows)
@app.route("/")
def showData():
data = ["tester@email.com", "user@email.com"]
return render_template("index.html", emails = data)
if __name__ == "__main__":
app.run(debug=True)
А это HTML:
Emails
Add row
Save to file
{% for i in range(emails | length) %}
{{emails}}
Delete
{% endfor %}
function deleteRow(index) {
var table = document.getElementById('data-table');
table.deleteRow(index);
}
function saveEmails() {
var table = document.getElementById('data-table');
var emails = [];
for (var i = 0; rows.length; i++) {
numbers.push(rows.cells[0].innerText);
}
var xhr = new XMLHttpRequest();
xhr.open('POST', '/save', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('action=save&emails=' + encodeURIComponent(JSON.stringify(emails)));
}
function addRow() {
var table = document.getElementById('data-table');
var row = table.insertRow(table.rows.length);
var cell1 = row.insertCell(0);
var input = document.createElement('input');
input.type = 'text';
cell1.appendChild(input);
var cell2 = row.insertCell(1);
var button = document.createElement('button');
button.textContent = 'Delete';
button.onclick = function() {
var index = table.rows.indexOf(rows);
deleteRow(index);
};
cell2.appendChild(button);
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -text-file