Разрешить только одному пользователю одновременно заходить на страницу - PullRequest
0 голосов
/ 09 мая 2019

Я создаю приложение, в котором пользователи могут перемещаться по страницам Treasure объектов.

На каждой странице сокровищ есть кнопка Next для доступа к следующему доступному сокровищу, упорядоченному по идентификатору в базе данных.

Я хочу, чтобы позволял только одному пользователю приземлиться настраница конкретного сокровища .Как только пользователь достиг страницы, экземпляр Treasure «принадлежит» этому пользователю (treasure.captured_by = user).

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

Пример:

  • Пользователь A находится на странице treasures/1
  • Пользователь B находится на странице treasures/2
  • Оба пользователя нажимают Next в один и тот же момент.
  • Что я хочу: один из двух пользователей переходит на treasures/3, другой на treasures/4
  • Что происходит в реальности: оба пользователя перенаправлены на treasures/3, что неверно.

Кнопка вызывает представление, которое выполняет что-то вроде:

def get_next_available_treasure(request, current_treasure_id):
    """Retrieve the next unclaimed treasure."""

    treasure = Treasure.objects.filter(
        id__gt=current_treasure_id,  # Only consider Treasures that have been stored later on the db
        captured_by__isnull=True
    ).order_by('id').first()

    return redirect('treasure-page', treasure_id=treasure.id)

В urls.py:

url(r'^go-to-next/(?P<current_treasure_id>\d+)/$',
    views.go_to_next_available_treasure,
    name='next-treasure'),

В шаблоне:

<a href="{% url 'textool:next-treasure' treasure.pk %}">Next</a>

Вопрос: Как я могу исправить проблему и создать своего рода «замок» на странице / экземпляре сокровищ?


Порядок рандомизации

Я думал о рандомизации порядка сокровищ, когда пользователи нажимают Next.Это снизит вероятность того, что два пользователя попадут на одну и ту же страницу.Однако я не могу этого сделать, потому что мне нужно следить за порядком сокровищ.

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