如何重置Django管理密码?

633
我正在使用Django(版本1.3),忘记了管理员用户名和密码。如何重置两者?
还有没有可能将普通用户变为管理员,然后再取消管理员状态?

请不要在一个帖子中提出两个不同的问题。 - Yaroslav Nikitenko
24个回答

1141

8
刚刚意识到你说你忘记了用户名……我的回答中提到的“admin”作为用户名可能没有什么帮助! - JamesO
9
如果你不记得用户名,那么选择这个用户名是相当奇怪的选择。 :-) - DrTyrsa
4
Django是最好的。一切都非常容易。 - DMTintner
28
如果您忘记了用户名,可以运行manage.py createsuperuser创建第二个超级用户,然后查看用户列表以找到原始用户。然后用原始用户登录并删除新的超级用户。 - shacker
1
如果您只是按照此答案中显示的命令输入而没有指定用户名,该命令将允许您更改当前系统用户的密码并在此过程中显示它。 - donyd
显示剩余2条评论

221
  1. python manage.py createsuperuser会创建另一个超级用户,您将能够登录管理员帐户并记住您的用户名。
  2. 是的,为什么不呢。

要给普通用户授予权限,请使用python manage.py shell打开shell并尝试:

from django.contrib.auth.models import User
user = User.objects.get(username='normaluser')
user.is_superuser = True
user.save()

如果可能的话,怎么做呢? - IamH1kc
使用这种方法似乎用户无法访问Django管理界面。 - keul
5
@LucaFabbri,您还需要设置 user.is_staff = True - Aaron McMillin

175

你可以尝试通过控制台:

python manage.py shell

然后在shell中使用以下脚本

from django.contrib.auth.models import User
User.objects.filter(is_superuser=True)

这将列出系统中的所有超级用户。如果您在列表中看到自己的用户名:

usr = User.objects.get(username='your username')
usr.set_password('raw password')
usr.save()

然后你设置了一个新密码 (:


14
User.objects.filter(is_superuser=True) - DrTyrsa
pip install django-extensions 安装,添加到 installed apps 并运行 ./manage.py shell_plusUser 类将可用,并且您可以进行 password-change - Timo
1
该方法允许用户设置任何密码,不进行任何验证。因此,您可以设置一个非常简单的密码(仅用于测试目的),而接受答案方法不允许这样做。 - Gautam J

26

26

除了@JamesO的答案提到使用

python manage.py changepassword [username]

如果你忘记了用户名:

1- 在你的项目主目录中访问数据库(我使用的是sqlite3):

sqlite3 db.sqlite3

2- 列出 auth_user 表的内容

SELECT * FROM auth_user ;

3- 找到 is_superuser = 1 的用户,以我的情况为例是admin。 命令输出的截图(我没有足够的声望点数)


18

这是一个非常好的问题。

python manage.py changepassword 用户名

例子:

python manage.py changepassword mickey

15

检索用户名和密码的最佳方法之一是查看并更新它们。用户模型提供了完美的方法。

在这种情况下,我使用的是Django 1.9

  1. 使用控制台或Git等应用程序导航到您的根目录,即“manage.py”文件所在位置。

  2. 使用命令“python manage.py shell”检索Python shell。

  3. 通过输入以下命令导入User Model “from django.contrib.auth.models import User”

  4. 通过输入以下命令获取所有用户 “users = User.objects.all()”

  5. 打印用户列表 对于Python 2用户,请使用“print users”命令 对于Python 3用户,请使用“print(users)”命令 第一个用户通常是管理员。

  6. 选择要更改其密码的用户,例如:

    "user = users[0]"

  7. 设置密码

    user.set_password('name_of_the_new_password_for_user_selected')

  8. 保存新密码

    "user.save()"

启动服务器并使用用户名和更新后的密码登录。


这种方法相比于“manage.py changepassword”的优点在于,您不受可以或不能使用的密码的限制 - 不再有与用户名太相似的垃圾密码。(这是在我的开发环境中。我不主张使用更弱的密码。在生产中,您应始终使用强密码。) - Shashwat Black

13

新的设置应该首先运行python manage.py createsuperuser来创建用户。似乎没有默认的用户名密码可以登录到管理员界面。


12
两种方法可以实现这一点:
1. 使用 changepassword 命令行工具进行操作。
2. 在 Django 的管理后台中,找到对应用户的账户信息页面,点击 "修改密码" 链接。
(env) $ python manage.py changepassword <username>

或者(这个方法适用于任何扩展的用户模型),使用django-admin shell执行以下操作:
(env) $ python manage.py shell

这将会在屏幕上呈现出命令行提示符,如下所示:
Python 3.7.2 (default, Mar 27 2019, 08:44:46) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

那么您需要以下内容:

>>> from django.contrib.auth import get_user_model
>>> User = get_user_model()
>>> user = User.objects.get(username='admin@hug.com')
>>> user.set_password('new password')
>>> user.save()
>>> exit()

注意:为什么我会用这个答案回答这个问题?

因为,正如提到的那样,User = get_user_model()适用于您自己的自定义User模型。使用 from django.contrib.auth.models import User 然后 User.objects.get(username='username') 可能会导致以下错误:

AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'

这个答案是为现有用户设置一个常见/简短密码的好方法。 - Gal Silberman

11
python manage.py changepassword username

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接