如何重置 Django 管理员密码?
Posted
技术标签:
【中文标题】如何重置 Django 管理员密码?【英文标题】:How to reset Django admin password? 【发布时间】:2011-09-15 12:39:21 【问题描述】:我正在使用 Django(1.3 版)并且忘记了管理员用户名和密码。如何重置两者?
是否可以将普通用户设置为admin,然后删除admin状态?
【问题讨论】:
请不要在一篇文章中问两个不同的问题。 【参考方案1】:python manage.py changepassword <user_name>
see docs
【讨论】:
刚刚意识到您说您忘记了用户名...“admin”作为我的答案中的用户名不会有太大帮助! @user794916 如果您不记得用户名,这是一个相当奇怪的选择。 :-) 您可以将用户名从“admin”更改为另一个正确的用户名。 :D django 是最好的。一切都那么简单 如果您忘记了用户名,您可以通过manage.py createsuperuser
创建第二个超级用户,然后查看用户列表以找到原始用户。然后以原来的身份登录并删除新的超级用户。【参考方案2】:
python manage.py createsuperuser
将创建另一个超级用户,您将能够登录管理员并记住您的用户名。
是的,为什么不呢。
要授予普通用户权限,请使用 python manage.py shell
打开 shell 并尝试:
from django.contrib.auth.models import User
user = User.objects.get(username='normaluser')
user.is_superuser = True
user.save()
【讨论】:
如果可以的话,怎么办? 用这种方法似乎用户无法访问django admin @LucaFabbri 你还需要设置user.is_staff = True
【参考方案3】:
您可以通过控制台尝试:
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()
然后你设置了一个新密码(:
【讨论】:
User.objects.filter(is_superuser=True)
pip install django-extensions
,将其添加到installed apps
并运行./manage.py shell_plus
。 User
课程将可用,您可以password-change
。
此方法允许用户设置任何密码,无需任何验证。因此,您可以设置一个非常简单的密码(仅用于测试目的),这是公认的答案方法不允许的。
非常感谢这对我有用!继续努力【参考方案4】:
您可以使用createsuperuser
命令创建一个新的超级用户。
【讨论】:
【参考方案5】:这是一个很好的问题。
python manage.py 更改密码用户名
示例:-
python manage.py changepassword mickey
【讨论】:
【参考方案6】:检索用户名和密码的最佳方法之一是查看和更新它们。用户模型提供了一种完美的方式。
在这种情况下,我使用的是 Django 1.9
导航到您的根目录,即使用您的控制台或其他应用程序(例如 Git)来查找“manage.py”文件所在的位置。
使用命令“python manage.py shell”检索 Python shell。
通过输入以下命令导入用户模型 “从 django.contrib.auth.models 导入用户”
输入以下命令获取所有用户 "users = User.objects.all()"
打印用户列表 对于 Python 2 用户,请使用命令“打印用户” 对于 Python 3 用户,请使用命令“print(users)” 第一个用户通常是管理员。
选择您希望更改密码的用户,例如
"user = users[0]"
设置密码
user.set_password('name_of_the_new_password_for_user_selected')
保存新密码
"user.save()"
启动服务器并使用用户名和更新后的密码登录。
【讨论】:
这种方法相对于manage.py changepassword
的优势在于您不受限制可以使用或不能使用的密码 - 不再类似于用户名废话。 (这是在我的开发环境中。我不提倡使用较弱的密码。您应该始终在产品中使用强密码。)【参考方案7】:
新设置应该首先运行python manage.py createsuperuser
来创建用户。似乎没有默认的用户名密码来登录管理员。
【讨论】:
【参考方案8】:两种方法:
changepassword
管理命令:
(env) $ python manage.py changepassword <username>
或者(扩展了几个答案,但适用于任何扩展的用户模型)使用 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()
将适用于您自己的自定义 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'
【讨论】:
这个答案是为现有用户设置通用/短密码的好方法。【参考方案9】:你可以试试这个:
1.在没有控制台的情况下更改超级用户密码
python manage.py changepassword <username>
2.通过控制台修改超级用户密码
【讨论】:
使用屏幕截图而不是编写代码是非常糟糕的做法。人们无法复制粘贴您的代码进行测试,并且它不可用于现场搜索【参考方案10】:除了@JamesO 回答说使用
python manage.py changepassword [username]
如果您不记得您的用户名:
1- 在项目的主目录中访问数据库(我使用的是 sqlite3):
sqlite3 db.sqlite3
2-列出auth_user
表的内容
SELECT * FROM auth_user ;
3- 查找拥有 is_superuser = 1
的用户,在我的情况下是管理员
screenshot of the command output (I don't have enough rep points)
【讨论】:
【参考方案11】:您可能还错误地回答了设置问题,并且员工人数为零。在这种情况下,请前往 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;
【讨论】:
【参考方案12】:如果您忘记了创建管理员用户,请先在 manage.py
上使用 createsuperuser
命令构建一个,然后更改密码。
【讨论】:
【参考方案13】:如果您不知道此处创建的用户名。您可以按照上面@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
【讨论】:
【参考方案14】:如果您忘记了您的管理员,那么您需要使用创建新用户
python manage.py createsuperuser <username>
对于密码,有 CLI 命令changepassword
让 django 更改用户密码
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()
【讨论】:
【参考方案15】:另一件值得注意的事情是将用户的状态is_staff
设置为活动状态。至少,这就是它对我有用的原因。有关更多详细信息,我创建了另一个superuser
,正如人们在上面解释的那样。然后我转到数据库表auth_user
并搜索该用户名以确保其is_staff
标志设置为1
。这终于让我可以登录admin
网站了。
【讨论】:
【参考方案16】:使用命令“python manage.py createsuperuser”创建一个新的超级用户。 以新的超级用户身份登录。点击“用户”链接。然后单击要删除的用户。单击表单页面末尾的删除用户。
注意 - 上述过程将更改该特定用户所做的活动日志。
【讨论】:
【参考方案17】:最好的方法是直接去你的终端输入
python manage.py createsuperuser
然后再次插入另一个密码和用户名 但在大多数情况下,您会丢失之前创建的一些个人资料。
【讨论】:
请不要遵循这个解决方案。【参考方案18】:只需在命令行中输入以下命令:
python manage.py changepassword yourusername
【讨论】:
【参考方案19】:python manage.py changepassword username
【讨论】:
【参考方案20】:使用
python manage.py 转储数据
然后看看最后你会发现用户名
【讨论】:
转储可能包含用户名,但密码使用单向哈希函数进行哈希处理,这对于恢复密码不应该(也不是)有用。此外,当用户可以访问正在运行的数据库并且可以通过适当的客户端连接到该数据库时,无需转储数据库进行浏览。【参考方案21】:我认为,更好的方法 在命令行中
python manage.py createsuperuser
【讨论】:
【参考方案22】:如果/admin/ website
中需要reset_password
链接,则可以这样做:
https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#adding-a-password-reset-feature
【讨论】:
【参考方案23】:如果您使用自定义用户模型
(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()
【讨论】:
【参考方案24】:获取用户名(以及大部分信息)的另一种方法是直接访问数据库并从表中读取信息。
【讨论】:
以上是关于如何重置 Django 管理员密码?的主要内容,如果未能解决你的问题,请参考以下文章