我有一个网站,为您提供随机笑话,问题是,有时它会经常显示相同的笑话。我有一个笑话模型,我想保存这些笑话的ID,并且每个访问者确保没有显示相同的笑话,比方说,20轮。但是,如何保存这些数据并传递它们呢? 以下是我的观点:
def random_good_joke_page(request):
"""If asked for a random joke, redirect to joke's page."""
return redirect('/jokes/%d/' % Joke.find_joke("Hot").id)
def random_cold_joke_page(request):
"""If asked for a random joke, redirect to joke's page."""
return redirect('/jokes/%d/' % Joke.find_joke("Cold").id)
现在,我需要保存已经显示的笑话的id并检查新的id(从find_joke函数给出,它接受一个笑话评级并返回一个随机的相应笑话),如果最近显示了这个笑话,那么选择一个新的id,直到有一个尚未显示。如何保存这些数据并将它们传递给Django?我想到了cookie,或者可能会为Joke模型添加这样的功能(虽然我不认为这对每个访问者来说都是如此,但对于所有访问者来说......)。对于这种情况,有一些默认的实用方法吗?谢谢
答案 0 :(得分:2)
您可以在用户的会话中存储看到的笑话:
seen_joke_ids = request.session.get('seen_joke_ids', [])
joke = Joke.objects.exclude(pk__in=seen_joke_ids).order_by('?')[0]
seen_joke_ids.append(joke.pk)
request.session['seen_joke_ids'] = seen_joke_ids[-20:]
# your logic to display/redirect
return redirect(reverse('joke', args=[joke.pk]))