如何重设Django管理员密码?


447

我正在使用Django(1.3版),并且忘记了管理员用户名和密码。如何重置两者?

是否可以使普通用户成为管理员,然后删除管理员状态?

Answers:


777
python manage.py changepassword <user_name>

查看文件


7
只是意识到您说您忘记了用户名...'admin'是我的答案中的用户名,那么对您没有太大帮助!
JamesO 2011年

8
@ user794916如果您不记得用户名,那是一个很奇怪的选择。:-)
DrTyrsa 2011年

1
您可以将用户名从“ admin”更改为另一个正确的用户名。:D
mxi1

4
django是最好的。一切都那么简单
DMTintner

4
如果忘记了用户名,则可以manage.py createsuperuser创建第二个超级用户,然后查看“用户”列表以查找原始超级用户。然后以原始用户身份登录并删除新的超级用户。
shacker

173
  1. python manage.py createsuperuser 将创建另一个超级用户,您将能够登录admin并修改您的用户名。
  2. 是的,为什么不。

要赋予普通用户特权,请使用打开一个shell python manage.py shell并尝试:

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

如果可能,该怎么办?
IamH1kc 2011年

使用这种方法,似乎用户无法访问django admin
keul 2016年

3
@LucaFabbri,您还需要设置user.is_staff = True
Aaron

122

您可以尝试通过控制台:

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()

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


12
User.objects.filter(is_superuser=True)
DrTyrsa 2011年

pip install django-extensions,将其添加到installed apps并运行./manage.py shell_plus。该User课程将可用,您可以password-change
Timo

此方法允许用户设置任何密码,而无需任何验证。因此,您可以设置一个非常简单的密码(仅用于测试目的),该密码是公认的答案方法所不允许的。
Gautam J


14

这是一个很好的问题。

python manage.py changepassword user_name

例子:-

python manage.py changepassword mickey

11

新设置首先运行 python manage.py createsuperuser以创建用户。似乎没有默认的用户名密码可以登录admin。


9

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

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

  1. 导航到您的根目录,即 使用控制台或其他应用程序(例如Git)将“ manage.py”文件放置在何处。
  2. 使用命令“ python manage.py shell”检索Python shell。
  3. 通过键入以下命令“从django.contrib.auth.models import User”导入用户模型。
  4. 通过键入以下命令“ users = User.objects.all()”来获取所有用户。
  5. 打印用户列表对于Python 2用户,请使用命令“打印用户”。对于Python 3用户,请使用命令“ print(users)”。第一个用户通常是admin。

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

    "user = users[0]"

  7. 设定密码

    user.set_password('name_of_the_new_password_for_user_selected')

  8. 保存新密码

    "user.save()"

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


这种方法的优势manage.py changepassword在于,您不受限于可以使用或不能使用的密码-不再类似于用户名废话。(这是在我的开发环境中。我不主张使用弱密码。您应该始终在产品中使用强密码。)
Shashwat Black

5

您可能还回答了设置问题,并且职员人数为零。在这种情况下,请前往postgres:

obvioustest=# \c [yourdatabasename]
obvioustest=# \x
obvioustest=# select * from auth_user;
-[ RECORD 1 ]+-------------
id           | 1
is_superuser | f
is_staff     | f
...

要修复,请直接编辑:

update auth_user set is_staff='true' where id=1;

5

有两种方法可以做到这一点:

changepassword 管理命令

(env) $ python manage.py changepassword <username>

或者使用django-admin shell,如下所示(扩展了一些答案,但适用于任何扩展的User模型):

(env) $ python manage.py shell

这应该显示如下的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 Userthen User.objects.get(username='username')可能会引发以下错误:

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

4

如果您忘记了创建管理员用户,请先使用createsuperuseron命令建立一个用户,manage.py然后更改密码。


4

您可以尝试以下方法:

1.无需控制台即可更改超级用户密码

python manage.py changepassword <username>

2.通过控制台更改超级用户密码

在此处输入图片说明 在此处输入图片说明


1
使用屏幕截图而不是书面代码是非常不好的做法。Poeple无法复制粘贴您的代码以进行测试,并且无法用于现场搜索
FallenAngel

3

如果您不知道此处创建的用户名。您可以按照上面@FallenAngel所述获得用户。

python manage.py shell 
from django.contrib.auth.models import User
usrs = User.objects.filter(is_superuser=True)
#identify the user
your_user = usrs.filter(username="yourusername")[0]
#youruser = usrs.get(username="yourusername")
#then set the password

但是,如果您创建了独立的用户模型。一个简单的情况是,您想使用电子邮件作为用户名而不是默认用户名。在这种情况下,您的用户模型位于诸如your_accounts_app.models之类的地方,则上述解决方案将无法工作。在这种情况下,您可以改用get_user_model方法

from django.contrib.auth import get_user_model 
super_users = get_user_model().objects.filter(is_superuser=True)
#proceed to get identify your user
# and set their user password

3

如果您忘记了管理员,则需要使用创建新用户

python manage.py createsuperuser <username>

对于密码,有CLI命令changepassword 让django更改用户密码

python manage.py changepassword <username>

要么

django-admin changepassword <username>

或在Django env中运行此代码

from django.contrib.auth.models import User
u = User.objects.get(username='john')
u.set_password('new password')
u.save()

2

值得注意的另一件事是将用户的状态设置is_staff为活动。至少,这就是它对我有用的原因。更详细地讲,我创建了另一个superuser如上所述的人。然后,我进入数据库表auth_user并搜索该用户名,以确保其is_staff标志设置为1。最终,我得以登录到admin站点。


2

使用命令“ python manage.py createsuperuser”创建一个新的超级用户。以新的超级用户身份登录。点击“用户”链接。然后单击您要删除的用户。单击表单页面末尾的删除用户。

注意-上述过程将更改由该特定用户完成的活动日志。



1

采用

python manage.py dumpdata

然后看最后你会发现用户名


0

最好的方法是直接在终端上输入

python manage.py createsuperuser

并再次输入另一个密码和用户名,但是在大多数情况下,您会丢失一些之前创建的个人资料。



0

在您的命令行中键入此命令非常容易

python manage.py changepassword yourusername


-1

获取用户名(和大多数信息)的另一种方法是直接访问数据库并从表中读取信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.