首页 > 解决方案 > 一次只允许一个用户登陆页面

问题描述

我正在构建一个应用程序,用户可以在其中浏览Treasure对象页面。

每个宝藏页面都有一个Next按钮可以到达下一个可用的宝藏,按数据库上的 ID 排序。

我想只允许一个用户登陆特定的宝藏页面。一旦用户到达该页面,该Treasure实例就由该用户“拥有”(treasure.captured_by = user)。

因此,Next按钮应该返回一个从未被其他用户捕获的宝藏的页面。不幸的是,当连接多个用户时,有时会发生两个用户登陆同一个宝藏页面的情况。我怎样才能解决这个问题?

例子:


该按钮调用一个视图,该视图执行以下操作:

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。这将降低两个用户登陆同一页面的可能性。但是,我不能这样做,因为我需要保持宝物的秩序。

标签: django

解决方案


推荐阅读