Если вы не ожидаете получить высокую скорость отклика, вам следует попытаться сохранить все данные в самом 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']
В ваше электронное письмо включите URL-адрес, который имеет значения hash и enc (должным образом URL-кавычки). В вашей функции просмотра используйте эти два значения с decode_data для извлечения исходных данных.
zlib.compress может быть не очень полезен, в зависимости от ваших данных, вы можете поэкспериментировать, чтобы выяснить, что лучше для вас работает.