Ошибка типа: объект _PasslibRegistryProxy не может быть вызван Passlib / Python ошибка на веб-сайте - PullRequest
0 голосов
/ 27 января 2020

Работа над сайтом проекта с созданием / входом пользователя сегодня утром. Код работал нормально на localhost. Я вставил код в свою учетную запись heroku и ушел на день. Этим вечером я вернулся домой и начал тестирование сайта. Я получал исключение, к которому я не был готов. Запустил localhost и воссоздал проблему TypeError: '_PasslibRegistryProxy' object is not callable, и теперь я понятия не имею, как ее решить. Похоже, что в процессе git добавления, фиксации и отправки я сломал файлы passlib. Тем не менее, я не редактировал исходный код для passlib. Кроме того, я воссоздал ошибку с минимальным кодом в совершенно новом рабочем пространстве. Новый жесткий диск полностью, новая папка, запускается pip install passlib -t . (принудительная установка в этот каталог). Я запустил следующие 3 строки кода и продолжал получать ту же ошибку:

import passlib.hash
a = passlib.hash('magic15!')
print(a)

В моей основной рабочей области я попытался pip install passlib --upgrade -t ., и это не решило мою проблему. И я использую passlib.hash() вместо sha256_encrypt() из-за устаревшего сообщения.

Я совершенно сбит с толку, потому что это работало нормально, и я не сделал никаких изменений в этом коде, кроме попыток решить.

1 Ответ

0 голосов
/ 27 января 2020

То, как когда-либо работал passlib.ha sh (), на данный момент мне не под силу. Тем не менее, лучше всего, что это не удалось и подстегнул этот вопрос. Ответ пришел с сервера разногласий Python (спасибо, Скотт и ХХ) и является напоминанием go к исходной документации, не всегда опираясь на учебные видеоролики, которые могут устареть.

Документация для passlib никогда не объявляет, что использование passlib.hash() так, как я сделал, должно работать. Вместо этого на момент написания этого ответа код должен быть следующим:

from passlib.hash import pbkdf2_sha256
a = pbkdf2_sha256.hash('magic15!')
print(a)

. Для всех, кто сталкивается с этой ошибкой, убедитесь, что вы используете правильный код на основе самой последней документации:

https://passlib.readthedocs.io/en/stable/narr/hash-tutorial.html

Хотя я предлагаю также прочитать эту статью: https://passlib.readthedocs.io/en/stable/narr/quickstart.html#recommended - хэши

Чтобы выяснить, почему Я использовал неправильный код, я получил

DeprecationWarning: the method passlib.handlers.sha2_crypt.sha256_crypt.encrypt() is deprecated as of Passlib 1.7, and will be removed in Passlib 
2.0, use .hash() instead.

Я получил это при использовании sha256_crypt.encrypt (), как было показано в обучающей серии видеороликов. Использование passlib.ha sh () работало и внезапно прекратилось. Наверное, к лучшему, но тот факт, что он работал и прекратился, сбил меня с толку. Однако приведение в соответствие с документацией является гораздо более подходящим направлением для продолжения.

...