Как мне сохранить информацию о внешней кнопке на сервере Django? - PullRequest
0 голосов
/ 30 июня 2019

В основном я хочу сохранить службу кнопок на стороне сервера таким образом, чтобы она сохранялась при закрытии браузера и обновлении страницы.

Вот что пытается сделать пользователь

  1. Пользователь ищет в строке поиска список продуктов.
  2. Когда отображаются результаты, им отображается кнопка, которая запускает действие для каждого отдельного продукта. Им также показана мастер-кнопка, которая может запускать одно и то же действие для каждого продукта в списке.
  3. После нажатия кнопки я хочу отключить ее на 30 секунд, чтобы она сохранялась при обновлении страницы и закрытии браузера.

Что я сделал

В настоящее время у меня это реализовано с использованием вызовов AJAX на стороне клиента, но если страница обновляется, она сбрасывает кнопку, и они могут нажать ее снова. Поэтому я изучил использование функции localStorage в javascript, но в моей ситуации было бы лучше просто сохранить это на сервере.

То, что я думаю, должно произойти

  1. Создайте модель в моем приложении Django для кнопки. Его атрибутами будут его статус и, возможно, некоторые метаданные (последний щелчок и т. Д.).
  2. Всякий раз, когда клиент запрашивает список продуктов, представления отправляют список продуктов, и он может запрашивать в базе данных состояние соответствующей кнопки и внедрять отключенный атрибут непосредственно в шаблон.
  3. Если кнопка доступна для нажатия, то клиентская сторона выполнит вызов AJAX POST на сервер, а сервер проверит состояние кнопок. Если он доступен, он выполнит действие, обновит статус кнопок на отключенные на 30 секунд и отправит эту информацию обратно клиенту, чтобы отобразить ее в DOM.

Пара вопросов

  1. Это просто вопрос создания модели для кнопок и последующего запроса к базе данных, как обычно?
  2. Как мне Django обновить базу данных через 30 секунд, чтобы статус кнопки переключился с отключенного обратно на включенный?
  3. Когда пользователь нажимает кнопку, он отключает ее, но отключает только в базе данных. Как правильно отключить кнопку без обновления страницы на стороне клиента? Должен ли я просто отключить кнопку в javascript на 30 секунд, а затем, если они попытаются обновить страницу, то просмотры увидят запрос на список продуктов и проверит базу данных для статуса каждой кнопки, и она будет правильно обслуживать кнопку

Большое спасибо за помощь !!

1 Ответ

1 голос
/ 30 июня 2019

Это просто вопрос создания модели для кнопок, а затем запрашивает базу данных как обычно?

Модель может быть что-то вроде Button (_id, last_clicked as timestamp, user_id) При запросе вы можете просто отсортировать по timestamp и LIMIT 1, чтобы получить последний клик. Не перезаписывая оригинальное значение, это обеспечит немного более быструю запись.

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

Как мне Django обновить базу данных через 30 секунд, чтобы сделать статус кнопки перейти от отключенного обратно к включенному?

Я не изменяю базу данных без привязки запроса клиента к изменению. Это обеспечивает параллелизм и контроль доступа. А также имеет более высокую предсказуемость для текущего состояния данных. После этого я бы предложил не обновлять БД по истечении времени дельта (30 секунд).

Вместо этого вы можете просто сравнить last_clicked отметку времени и вычислить дельту на стороне сервера перед отправкой ответа или на стороне клиента.

Это решение может быть важным, рассмотрим сценарий, когда время клиента в его системе отличается от времени сервера.

Когда пользователь нажимает кнопку, он отключается, но это только сделает его отключенным в базе данных. Что является правильным способ фактически отключить кнопку без обновления страницы на сторона клиента? Должен ли я просто отключить кнопку в JavaScript для 30 секунд, а затем, если они попытаются обновить страницу, то представления будут посмотрите запрос на список продуктов, и он проверит база данных для состояния каждой кнопки, и она будет обслуживать кнопку правильно?

Вам нужно будет сделать запрос POST, чтобы связать метку времени нажатия кнопки с БД. Вам также необходимо убедиться, что запрос POST выполнен успешно, поскольку неудачный запрос не сохранит данные в случае закрытия браузера. После выполнения вышеупомянутых двух действий вы можете отключить кнопку только со стороны клиента, не пытаясь получить кнопку last_clicked timestamp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...