当我尝试使用 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 和密码登录管理站点
。删除并重新创建数据库。
仔细检查数据库中的用户配置文件:用户名、密码、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,不用介意。
关于python - 创建 super 用户时 Django manage.pysync_db 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23850307/