我正在寻找集合token authentification
,以便以安全的方式下载服务器文件并在到期后添加。
要求:
过程:
用户使用某些信息CustomerForm(email, ...)
填写表格,并且他必须选择一个或多个带有复选框的文档。
提交表单后,将发送一封带有生成令牌的电子邮件。该令牌具有到期延迟(为了进行一些测试,请在第一分钟内进行延迟)。
问题:
当用户单击我的链接时,它将显示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
你有什么主意吗?
答案 0 :(得分:2)
在首次导入模块时,将执行任何类或模块级别的代码,因此在该点上将设置该代码中设置的任何值。如果您需要在每个请求中更新值,则需要在方法中设置它们。在这段代码中,将now
的定义移到get_context_data
方法中即可完成您想要的工作。