创建超级用户时,Django manage.py sync_db崩溃

时间:2014-05-24 22:36:57

标签: python django pycharm

当我尝试使用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环境之外创建密码哈希并将其粘贴到数据库中来避免这种情况。至少它允许我现在登录。问题虽然尚未解决......

2 个答案:

答案 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与我的相同,你需要确保拥有terminosmsvcrt或已安装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