0

今天早上在用户创建/登录的项目站点上工作。该代码在本地主机上运行良好。我将代码推送到我的 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()由于已弃用的消息。

我完全糊涂了,因为它工作正常,除了尝试解决它之外,我没有对该代码进行任何更改。

4

1 回答 1

0

在这一点上,passlib.hash() 的工作方式仍然超出了我的范围。但是,最好是它失败并引发了这个问题。答案来自 Python discord 服务器(谢谢 Scott 和 XX),提醒您回到原始文档,不要总是依赖可能会过时的教程视频。

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-hashes

为了澄清为什么我使用了不正确的代码,我收到了

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.hash() 正在工作并突然停止。我想更好,但它正在工作并停止的事实,这让我感到困惑。但是,与文档重新对齐是一个更合适的方向。

于 2020-01-27T15:53:03.780 回答