Флажок Восстановить таблицу отмечен другим SQL-запросом в бэкэнде Flask - PullRequest
1 голос
/ 09 мая 2019

У меня проблема с поиском правильного решения для моего веб-интерфейса: У меня есть таблица, созданная с помощью Datatables Framework. Внутренняя колба

По умолчанию таблица заполняется из БД Mysql с запросом SELECT * FROM test_table WHERE status != 'OK'

Но я хочу добавить флажок с именем Show all records. Установив этот флажок, бэкэнд должен использовать другой запрос для заполнения SELECT * FROM test_table В основном, выберите все.

Javascript код:

$('#main_table').DataTable({
    "processing": true,
    "ajax": {
        "url": "/index_get_data",
        "dataType": "json",
        "dataSrc": "data",
        "contentType": "application/json"
    },
    "columns": [{
            "data": "id"
        }, {
            "data": "version"
        }
    ]
});

Питон во фляге

@app.route('/index')
@app.route('/')
def index():
   return render_template('index.html')

@app.route('/index_get_data')
def main_info():
    if query_all is not None:
        sql_query = "SELECT * FROM test_table "
    else:
        sql_query = "SELECT * FROM test_table WHERE status != 'OK'"
    conn = mysql.connect()
    cursor = conn.cursor()
    cursor.execute(sql_query)
    conn.close()
    row_headers = [x[0] for x in cursor.description]
    rv = cursor.fetchall()
    json_data = []
    for result in rv:
        json_data.append(dict(zip(row_headers, result)))
    return_data = {'data': json_data}
    return json.dumps(return_data, indent=4, sort_keys=True, default=str)

Функция Javascript, которая перехватывает событие проверки флажка

const checkbox = document.getElementById('chkBox')
    checkbox.addEventListener('change', (event) => {
        if (event.target.checked) {
            $.post("/select_all", {
                select_all: "True"
            });
        }
    })

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

1 Ответ

0 голосов
/ 10 мая 2019

Для записи, вы могли бы достичь этой функции полностью на стороне клиента, загрузив полный набор данных при инициализации таблицы, имея скрытый столбец 'status' и выполнив search('OK') / search('') против этого столбца при Show all recordsне проверено / проверено.

Однако, если записи status = 'OK' занимают наименьшую часть вашего набора данных, а полный список записей требуется не так часто, на самом деле это будет быстрее на стороне сервера.

Для этого вам просто нужно вызвать ajax.reload() против вашей таблицы из-за обратного вызова POST:

const checkbox = document.getElementById('chkBox')
    checkbox.addEventListener('change', (event) => {
        if (event.target.checked) {
            $.post("/select_all", {
                select_all: "True",
                success: () => $('#main_table').DataTable().ajax.reload()
            });
        }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...