当我尝试使用 manage.py syncdb 为我的 Django 应用程序创建一个初始数据库时,它在我要创建 super 用户的时候崩溃了, 输入电子邮件地址后:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getpass.py", line 114, in fallback_getpass
stacklevel=2)
getpass.GetPassWarning: Can not control echo on the terminal.
我试图解决的问题:
在
syncdb期间跳过 super 用户的创建并运行createsupercommand。这似乎解决了问题,因为创建了一个 super 用户,但无法使用该用户 ID 和密码登录到admin 站点。删除并重新创建数据库。
仔细检查数据库中的用户配置文件:用户名、密码、is_staff、is_active 的值均正确。
调试该过程,直到我真正看到正确的用户名和密码被传递到
authenticate函数中。已检查设置为 UTF-8 的数据库编码。
我使用 Django 1.6.5、Pycharm 和 MySQL。整个事情相当令人困惑,因为我的其他具有相同设置的项目工作完美无瑕。
关于可能导致这种情况的原因有什么想法吗?
编辑: 显然在 super 用户创建过程中,Django 以某种方式将密码标记为不可用(这是不可能检测到的,因为哈希存储在数据库中并且人类无法解释)。我设法通过在 Django 环境之外创建密码哈希并将其粘贴到数据库中来规避此问题。至少它允许我现在登录。问题还没有解决...
请您参考如下方法:
在 Ubuntu 上,getpass 库执行此操作
# Bind the name getpass to the appropriate function
try:
import termios
# it's possible there is an incompatible termios from the
# McMillan Installer, make sure we have a UNIX-compatible termios
termios.tcgetattr, termios.tcsetattr
except (ImportError, AttributeError):
try:
import msvcrt
except ImportError:
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = fallback_getpass
else:
getpass = AskPassword
else:
getpass = win_getpass
else:
getpass = unix_getpass
您的问题似乎是由于 getpass 库无法导入它想要用于以非回显方式读取用户输入的 3 个库之一。
我知道你使用的是 Mac,我不知道这是否会有所不同,但如果 getpass 和我的一样,你需要确保你有 terminos,安装了 msvcrt 或 EasyDialogs;
这post on stackoverflow告诉您如何在 Mac 上安装软件包。
您基本上可以运行以下命令:easy_install pip,然后是 pip install terminos(如果不行,请尝试安装 msvcrt 或 EasyDialogs)。
[编辑]msvcrt 库仅适用于 Windows,请不要介意。
