Я пишу свою собственную систему кодирования для регистрации пользователей. Поэтому мне нужно создать подходящий URL для получения сгенерированных изображений с картинки. Поколение выглядит так:
_cipher = cipher.new(settings.CAPTCHA_SECRET_KEY, cipher.MODE_ECB)
_encrypt_block = lambda block: _cipher.encrypt(block + ' ' * (_cipher.block_size - len(block) % _cipher.block_size))
#...
a = (self.rightnum, self.animal_type[1])
serialized = pickle.dumps(a)
encrypted = _encrypt_block(serialized)
safe_url = urlsafe_b64encode(encrypted)
Но затем я пытаюсь получить этот ключ с помощью GET-запроса в функции представления, он завершается с ошибкой в функции urlsafe_b64decode () с ошибкой «сопоставление символов должно возвращать целое число, нет или Unicode»:
def captcha(request):
try:
key = request.REQUEST['key']
decoded = urlsafe_b64decode(key)
decrypted = _decrypt_block(decoded)
deserialized = pickle.loads(decrypted)
return HttpResponse(deserialized)
except KeyError:
return HttpResponseBadRequest()
Я обнаружил, что на выходе urlsafe_b64encode есть str, но GET-запрос возвращает объект Unicode (тем не менее, это правильная строка). Str () не помогло (возвращает ошибку декодирования глубоко внутри django), и если я использую ключ. repr , это работает, но расшифровщик не работает с ошибкой "Входные строки должны быть кратны 16 в длину ".
Внутри тестового файла вся эта конструкция работает отлично, я не могу понять, что не так?