想知道是否有很好的方法可以生成在X天内到期的临时URL。希望通过电子邮件发送一个URL,收件人可以单击该URL以访问站点的一部分,然后在一段时间后无法通过该URL访问该站点的一部分。不知道如何使用Django,Python或其他方式执行此操作。
最佳答案
如果您不希望获得很高的响应率,则应尝试将所有数据存储在URL本身中。这样,您无需在数据库中存储任何内容,并且将与响应(而不是发送的电子邮件)成比例地存储数据。
已更新:假设您有两个对于每个用户都是唯一的字符串。您可以打包它们并使用保护性哈希将它们解包,如下所示:
import hashlib, zlib
import cPickle as pickle
import urllib
my_secret = "michnorts"
def encode_data(data):
"""Turn `data` into a hash and an encoded string, suitable for use with `decode_data`."""
text = zlib.compress(pickle.dumps(data, 0)).encode('base64').replace('\n', '')
m = hashlib.md5(my_secret + text).hexdigest()[:12]
return m, text
def decode_data(hash, enc):
"""The inverse of `encode_data`."""
text = urllib.unquote(enc)
m = hashlib.md5(my_secret + text).hexdigest()[:12]
if m != hash:
raise Exception("Bad hash!")
data = pickle.loads(zlib.decompress(text.decode('base64')))
return data
hash, enc = encode_data(['Hello', 'Goodbye'])
print hash, enc
print decode_data(hash, enc)
这将产生:
849e77ae1b3c eJzTyCkw5ApW90jNyclX5yow4koMVnfPz09JqkwFco25EvUAqXwJnA==
['Hello', 'Goodbye']
在您的电子邮件中,包含一个既具有哈希值又具有enc值的URL(正确引用了URL)。在您的 View 函数中,将这两个值与解码_数据一起使用以检索原始数据。
zlib.compress可能没有那么大的帮助,根据您的数据,您可以尝试查看哪种方法最适合您。
关于django - 如何在Django中生成临时URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1360101/