我正在使用Django(版本1.3),忘记了管理员用户名和密码。如何重置两者?
还有没有可能将普通用户变为管理员,然后再取消管理员状态?
还有没有可能将普通用户变为管理员,然后再取消管理员状态?
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
命令首先创建一个,然后更改密码。
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()
(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()
如果您不知道在此处创建的用户名,可以按照@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
is_staff
设置为活动状态。至少对我来说,这是使其正常工作的原因。更详细地说,我像上面所解释的那样创建了另一个superuser
。然后我进入数据库表auth_user
并搜索该用户名,以确保其is_staff
标志已设置为1
。最终这使我能够登录到admin
站点。使用命令"python manage.py createsuperuser"创建新的超级用户。 以新的超级用户身份登录。点击“用户”链接。然后点击您想要删除的用户。在表单页面的末尾点击“删除用户”。
注意 - 上述过程将对该特定用户完成的活动日志进行更改。
python manage.py changepassword yourusername
最好的方法是直接打开终端并输入
python manage.py createsuperuser
您需要再次输入另一个密码和用户名,但在大多数情况下,您将失去之前创建的一些个人资料。