【发布时间】:2011-09-15 12:39:21
【问题描述】:
我正在使用 Django(1.3 版)并且忘记了管理员用户名和密码。如何重置两者?
是否可以将普通用户设置为admin,然后删除admin状态?
【问题讨论】:
-
请不要在一篇文章中问两个不同的问题。
标签: django authentication permissions passwords
我正在使用 Django(1.3 版)并且忘记了管理员用户名和密码。如何重置两者?
是否可以将普通用户设置为admin,然后删除admin状态?
【问题讨论】:
标签: django authentication permissions passwords
python manage.py changepassword <user_name>
【讨论】:
manage.py createsuperuser 创建第二个超级用户,然后查看用户列表以找到原始用户。然后以原来的身份登录并删除新的超级用户。
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()
【讨论】:
user.is_staff = True
您可以通过控制台尝试:
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。
您可以使用createsuperuser 命令创建一个新的超级用户。
【讨论】:
这是一个很好的问题。
python manage.py 更改密码用户名
示例:-
python manage.py changepassword mickey
【讨论】:
检索用户名和密码的最佳方法之一是查看和更新它们。用户模型提供了一种完美的方式。
导航到您的根目录,即使用您的控制台或其他应用程序(例如 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 的优势在于您不受限制可以使用或不能使用的密码 - 不再类似于用户名废话。 (这是在我的开发环境中。我不提倡使用较弱的密码。您应该始终在产品中使用强密码。)
新设置应该首先运行python manage.py createsuperuser来创建用户。似乎没有默认的用户名密码来登录管理员。
【讨论】:
两种方法:
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'
【讨论】:
除了@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)
【讨论】:
您可能还错误地回答了设置问题,并且员工人数为零。在这种情况下,请前往 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;
【讨论】:
如果您忘记了创建管理员用户,请先在 manage.py 上使用 createsuperuser 命令构建一个,然后更改密码。
【讨论】:
如果您不知道此处创建的用户名。您可以按照上面@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
【讨论】:
如果您忘记了您的管理员,那么您需要使用创建新用户
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()
【讨论】:
另一件值得注意的事情是将用户的状态is_staff 设置为活动状态。至少,这就是它对我有用的原因。有关更多详细信息,我创建了另一个superuser,正如人们在上面解释的那样。然后我转到数据库表auth_user 并搜索该用户名以确保其is_staff 标志设置为1。这终于让我可以登录admin 网站了。
【讨论】:
使用命令“python manage.py createsuperuser”创建一个新的超级用户。 以新的超级用户身份登录。点击“用户”链接。然后单击要删除的用户。单击表单页面末尾的删除用户。
注意 - 上述过程将更改该特定用户所做的活动日志。
【讨论】:
最好的方法是直接去你的终端输入
python manage.py createsuperuser
然后再次插入另一个密码和用户名 但在大多数情况下,您会丢失之前创建的一些个人资料。
【讨论】:
只需在命令行中输入以下命令:
python manage.py changepassword yourusername
【讨论】:
python manage.py changepassword username
【讨论】:
使用
python manage.py 转储数据
然后看看最后你会发现用户名
【讨论】:
我认为,更好的方法 在命令行中
python manage.py createsuperuser
【讨论】:
如果/admin/ website 中需要reset_password 链接,则可以这样做:
https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#adding-a-password-reset-feature
【讨论】:
(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()
【讨论】:
获取用户名(以及大部分信息)的另一种方法是直接访问数据库并从表中读取信息。
【讨论】: