Django: Как автоматически сбросить логическое поле на значение по умолчанию через некоторое время (например, 6 месяцев), чтобы сделать полный доступ к странице истекшим - PullRequest
0 голосов
/ 21 мая 2018

Я новичок в django, и у меня проблема с созданием полного доступа к сайту.Пользователь должен предоставить некоторую дополнительную информацию, чтобы получить полный доступ после регистрации.Я хочу, чтобы полный доступ автоматически истекал через 6 месяцев.Я определил пользовательскую модель пользователя с дополнительным условием:

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    full_name = models.CharField(blank=True, max_length=255)
    has_full_access = models.BooleanField(default=False)
    #some other stuff

После ввода некоторых данных для получения полного доступа, пользователь перенаправляется в это представление, которое устанавливает логическое значениев true:

views.py

def data_gathered_done(request):
    current_user = CustomUser.objects.get(id=request.user.id)
    current_user.has_full_access = True
    current_user.save()
    #some other stuff

Я хочу, чтобы это логическое поле автоматически сбрасывалось до значения по умолчанию (False) через 6 месяцев после предоставления полного доступа.Как я могу это сделать?

1 Ответ

0 голосов
/ 21 мая 2018

Я бы сделал это со свойством модели.

from datetime import datetime, timedelta
from django.db import models
from django.contrib.auth.models import AbstractUser

expire_after = timedelta(days=180)

class CustomUser(AbstractUser):
    full_name = models.CharField(blank=True, max_length=255)
    full_access_since = models.DatetimeField(auto_add_now=True)
    #some other stuff

    @property
    def has_full_access(self):
        return datetime.now() - expire_after < self.full_access_since

Тогда вы можете использовать логическое значение обычно

from django.http import HttpResponseForbidden

user = CostumUser.objects.get(pk=123)
if not user.has_full_access:
    return HttpResponseForbidden()
...