Skip to main content
 首页 » 编程设计

python之创建 super 用户时 Django manage.py sync_db 崩溃

2024年11月01日20zfyouxi

当我尝试使用 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,请不要介意。