当我尝试使用manage.py
syncdb
为我的Django应用创建初始数据库时,在输入电子邮件地址后,它将在我即将创建超级用户的位置崩溃:< / p>
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
期间跳过超级用户的创建并运行createsupercommand
。这似乎可以解决问题,因为创建了超级用户但是无法使用该用户ID和密码登录admin site
。
删除并重新创建数据库。
仔细检查数据库中的用户配置文件:用户名,密码,is_staff,is_active都具有正确的值。
调试进程,直到我实际看到正确的用户名和密码被传递到authenticate
函数。
检查数据库编码,设置为UTF-8。
我使用Django 1.6.5,Pycharm和MySQL。整个事情是相当令人困惑的,因为我的其他相同设置的项目完美无瑕。
关于可能导致这种情况的任何想法?
编辑: 显然,在拙劣的超级用户创建期间,Django以某种方式将密码标记为不可用(由于散列存储在数据库中并且无法解释为人类,因此无法检测到)。我设法通过在Django环境之外创建密码哈希并将其粘贴到数据库中来避免这种情况。至少它允许我现在登录。问题虽然尚未解决......
答案 0 :(得分:2)
在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,不介意。
答案 1 :(得分:0)
对于该线程的未来读者:
在Django 2.06,Python 3.6.1,Win 7 SP1和PyCharm 2018.1中也发现了此问题。
部分回溯:
File "..\django\contrib\auth\management\commands\createsuperuser.py", line 145, in handle password = getpass.getpass()
File "C:\Program Files (x86)\Python36-32\lib\getpass.py", line 122, in fallback_getpass
getpass.GetPassWarning: Can not control echo on the terminal.
该问题是根据@ vlad-ardelean在此线程前面的建议而解决的:
(i)打开Windows终端(在PyCharm内就可以了)
(ii)cd到包含manage.py的Django项目目录
(iii)manage.py createsuperuser