Django timezone.now () остается без изменений - PullRequest
0 голосов
/ 12 сентября 2018

Я ищу набор token authentification, чтобы загружать файлы сервера безопасным способом и добавлять по истечении времени.

Требования:

  • Джанго 1,11
  • Ubuntu 18.04
  • База данных PostgreSQL

Процесс:

Пользователь заполняет форму с некоторыми данными CustomerForm(email, ...), и он должен выбрать один или несколько документов с флажками.

Когда форма отправлена, электронное письмо отправляется с сгенерированным токеном. Этот токен имеет задержку истечения (1 минута в первой для выполнения некоторых тестов).

Выпуск:

Когда пользователь нажимает на мою ссылку, отображается, если token в списке или нет, datetime.now() и expiration_delay.

Но, если я нажму еще раз на ссылку (может быть, через 30 секунд после первой), datetime.now() все равно останется первой. Это должно измениться.

Я подозреваю, что cookie сохранит ценность внутри, но я не знаю, правильный ли это путь.

Мои файлы:

У меня есть класс, который позволяет заполнить форму, сгенерировать токен и отправить электронное письмо.

Затем у меня есть новый класс, который позволяет сравнивать token с базой данных и сравнивать expiration_time с now().

class TokenDownloadView(TemplateView):
    template_name = 'app/token.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['token'] = self.kwargs['token']
        token = context['token']
        print(token)
        download = Download.objects.get(token__iexact=token)

        if download and download.expiration_date > now:
            print("token valide jusqu'à : " + str(download.expiration_date))
            print("il est actuellement : " + str(now))
            print(' ==> Token existe et valide <==')

        if download and download.expiration_date < now:
            print("token valide jusqu'à : " + str(download.expiration_date))
            print("il est actuellement : " + str(now))
            print('==> Token existe mais a expiré <==')

        return context

И вот что я получаю в своем терминале, чтобы отобразить то, что я сказал:

d0ce9328a53032d4484cccff4c0bdd92ad701567
token valide jusqu'à : 2018-09-12 07:46:30.082915+00:00
il est actuellement : 2018-09-12 07:45:30.082915+00:00
 ==> Token existe et valide <==
[12/Sep/2018 09:45:42] "GET /crud/download/token/d0ce9328a53032d4484cccff4c0bdd92ad701567/ HTTP/1.1" 200 7447
[12/Sep/2018 09:45:42] "GET /static/css/common-8073709e.css HTTP/1.1" 404 1682
d0ce9328a53032d4484cccff4c0bdd92ad701567
token valide jusqu'à : 2018-09-12 07:46:30.082915+00:00
il est actuellement : 2018-09-12 07:45:30.082915+00:00
 ==> Token existe et valide <==
[12/Sep/2018 09:46:10] "GET /crud/download/token/d0ce9328a53032d4484cccff4c0bdd92ad701567/ HTTP/1.1" 200 7447
[12/Sep/2018 09:46:10] "GET /static/css/common-8073709e.css HTTP/1.1" 404 1682
d0ce9328a53032d4484cccff4c0bdd92ad701567
token valide jusqu'à : 2018-09-12 07:46:30.082915+00:00
il est actuellement : 2018-09-12 07:45:30.082915+00:00
 ==> Token existe et valide <==
[12/Sep/2018 09:46:30] "GET /crud/download/token/d0ce9328a53032d4484cccff4c0bdd92ad701567/ HTTP/1.1" 200 7447
[12/Sep/2018 09:46:30] "GET /static/css/common-8073709e.css HTTP/1.1" 404 1682
d0ce9328a53032d4484cccff4c0bdd92ad701567
token valide jusqu'à : 2018-09-12 07:46:30.082915+00:00
il est actuellement : 2018-09-12 07:45:30.082915+00:00
 ==> Token existe et valide <==
[12/Sep/2018 09:46:41] "GET /crud/download/token/d0ce9328a53032d4484cccff4c0bdd92ad701567/ HTTP/1.1" 200 7447
[12/Sep/2018 09:46:41] "GET /static/css/common-8073709e.css HTTP/1.1" 404 1682

У вас есть идеи?

1 Ответ

0 голосов
/ 12 сентября 2018

Любой код на уровне класса или модуля выполняется при первом импорте модуля, поэтому любые значения, которые установлены в этом коде, устанавливаются в этой точке.Если вам нужно, чтобы значения обновлялись при каждом запросе, они должны быть установлены внутри метода.В этом коде перемещение вашего определения now в метод get_context_data будет делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...