如何重置Django管理密码?

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

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

7
您可以尝试以下方法:
1. 在不使用控制台的情况下更改超级用户密码。
python manage.py changepassword <username>

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

在此输入图片描述 在此输入图片描述


3
使用截图代替编写代码是非常不好的做法。人们无法复制粘贴您的代码进行测试,也无法在网站内搜索到该代码。 - FallenAngel

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

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


5
如果您忘记了管理员密码,则需要使用以下方法创建新用户:
python manage.py createsuperuser <username>

而对于密码,Django 提供了命令行界面(CLI)命令 changepassword 以便更改用户的密码。

python manage.py changepassword <username>

或者

django-admin changepassword <username>

或在Django环境中运行此代码

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

4

如果您正在使用自定义用户模型

(venv)your_prj $ ./manage.py shell
>>> from customusers.models import CustomUser
>>> CustomUser.objects.filter(is_superuser=True)
>>> user = CustomUser.objects.get(email="somesuper@sys.com")
>>> user.set_password('@NewPwd')
>>> user.save()
>>> exit()

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

2
值得注意的另一件事是将用户的状态is_staff设置为活动状态。至少对我来说,这是使其正常工作的原因。更详细地说,我像上面所解释的那样创建了另一个superuser。然后我进入数据库表auth_user并搜索该用户名,以确保其is_staff标志已设置为1。最终这使我能够登录到admin站点。

2

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

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


1
只需在命令行中输入以下命令:

python manage.py changepassword yourusername

1

最好的方法是直接打开终端并输入

python manage.py createsuperuser

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


请不要采用这个解决方案。 - Gal Silberman

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