首页 > 解决方案 > 如何在 django 中添加倒数计时器作为用户字段?

问题描述

我希望应用程序上的每个用户都有一个特定时间的字段,在使用网站时会用完。因此,如果您有一个 10 小时的帐户,则有一个字段可以倒计时这 10 小时。有没有现有的方法可以做到这一点并不断更新?

现在我有一个带有 time_left 字段的自定义模型:

class User(AbstractBaseUser, PermissionsMixin):
    """
    Custom user class which overrides the default user class.
    """

    email = models.EmailField(max_length=254, unique=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    time_left = models.TimeField(default=datetime.time(0, 0))

然后我有一个上下文处理器来显示 time_left:


def time_left(request):
    time = datetime.time(0, 0)
    if request.user.is_authenticated:
        user = User.objects.get(email=request.user.email)
        time = user.time_left
        print(time)

    return {'time_left': time}

编辑:考虑一下,更新页面本身剩余时间的唯一方法可能是 JQuery 和 AJAX。我在这个假设中正确吗?不过,仍然需要更新后端的号码。

标签: pythondjangodatetimedjango-modelspython-datetime

解决方案


如果您只想要 10 小时倒计时显示,我不认为每秒通过 AJAX 从后端请求时间是有效的 - 最简单的方法可能是获取该时间左变量一次(使用time_left服务器端的函数,然后使用 javascript在页面上倒计时。

您可以查看此页面https://www.w3schools.com/howto/howto_js_countdown.asp了解如何在 JS 中显示倒数计时器,然后只需替换该行

var countDownDate = new Date("Jan 5, 2021 15:37:25").getTime();

使用从服务器获取剩余时间的 ajax 代码。

但是,如果您想限制用户在网站上的停留时间,唯一的方法是使用 javascript(是的,每秒通过 GET/POST 请求使用 AJAX 更新它),但这可以绕过用户在创建帐户后使用网站时只需禁用 js。


推荐阅读