【发布时间】:2019-06-03 16:58:29
【问题描述】:
我有一个 django 应用程序,它将在特定时间开始的 24 小时窗口内检索并显示 3 条记录(问题)给应用程序的所有用户,例如每天 11:00。最好,我想随机化记录列表或只使用自动递增的问题 id。有超过 14,000 条记录。
我可以从数据库中检索记录并随机显示这些记录。但是,每个 http get 请求(刷新浏览器窗口)都会检索不同的问题 模型.py
from django.db import models
from django.contrib.auth.models import User
from django.conf import settings
class Questions(models.Model):
question = models.CharField(max_length=254, blank=True, null=True)
answer = models.CharField(max_length=254, blank=True, null=True)
question_used = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now_add=True)
Views.py
from django.shortcuts import render
from django.views.generic import CreateView, View
from .models import *
from wallet.models import UserWallet
class DailyDrawView(View):
template_name = 'daily_draw/daily_draw.html'
def get(self, request, *args, **kwargs):
que_attempt = DailyDraw.objects.filter(user=request.user, is_active=True).last()
question_objs = Questions.objects.all().order_by('?')[:3]
points = WinnerPoint.objects.last().amount
return render(request, self.template_name {'question_objs':question_objs, 'que_attempt':que_attempt, 'points':points })
在每天的特定时间,检索 3 条记录。在 24 小时内向所有用户显示这些记录。更新这 3 行,以便不再显示相同的记录。冲洗并重复。
【问题讨论】:
-
使用 Django 视图,您将有一组新的随机问题供请求。如果你想解决这个问题,你需要在某个时候缓存 3 个随机问题。这可能是某种文件或数据库记录。
-
您可以将
asked_at字段添加到您的Question模型并检查它是否已过期。 -
@EmettSpeer,缓存听起来是目前最好的选择。是否可以在超时值到期时填充缓存而不是等待客户端请求?
标签: javascript python django django-models