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

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


当前回答

你可以试试这个:

1.在没有控制台的情况下修改超级用户密码

python manage.py changepassword <username>

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

其他回答

您可以通过控制台尝试:

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

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

如果你使用的是自定义用户模型

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

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

有两种方法:

changpassword管理命令:

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

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

(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()将适用于您自己的自定义用户模型。使用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'

你也可能回答了一个错误的设置问题,没有工作人员。在这种情况下,前往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;