¿Cómo restablecer la contraseña de administrador de Django?


449

Estoy usando Django (versión 1.3) y he olvidado el nombre de usuario y la contraseña de administrador. ¿Cómo restablecer ambos?

¿Y es posible convertir a un usuario normal en administrador y luego eliminar el estado de administrador?

Respuestas:


783
python manage.py changepassword <user_name>

ver documentos


77
acabo de darme cuenta de que dijiste que olvidaste el nombre de usuario ... 'admin' siendo el nombre de usuario en mi respuesta no será de mucha ayuda.
JamesO

8
@ user794916 Esa es una elección bastante extraña si no recuerda el nombre de usuario. :-)
DrTyrsa

1
Puede cambiar el nombre de usuario de "admin" a otro nombre de usuario apropiado. : D
mxi1

44
Django es el mejor. todo es tan fácil
DMTintner

55
Si ha olvidado el nombre de usuario, puede manage.py createsuperusercrear un segundo superusuario y luego ver la lista de Usuarios para encontrar el original. Luego inicie sesión como el original y elimine el nuevo superusuario.
Shacker

173
  1. python manage.py createsuperuser creará otro superusuario, podrá iniciar sesión en admin y recordar su nombre de usuario.
  2. Si por qué no.

Para otorgar privilegios de usuario normales, abra un shell con python manage.py shelle intente:

from django.contrib.auth.models import User
user = User.objects.get(username='normaluser')
user.is_superuser = True
user.save()

Si es posible, ¿cómo hacerlo?
IamH1kc

Con este enfoque parece que el usuario no puede acceder al administrador de django
keul

3
@LucaFabbri también deberías configuraruser.is_staff = True
Aaron McMillin el

122

Puedes probar a través de la consola:

python manage.py shell

luego use el siguiente script en shell

from django.contrib.auth.models import User
User.objects.filter(is_superuser=True)

te listará a todos los súper usuarios en el sistema. si reconoce su nombre de usuario de la lista:

usr = User.objects.get(username='your username')
usr.set_password('raw password')
usr.save()

y estableces una nueva contraseña (:


12
User.objects.filter(is_superuser=True)
DrTyrsa

pip install django-extensions, agrégalo installed appsy ejecuta ./manage.py shell_plus. La Userclase estará disponible y tú puedes password-change.
Timo

Este método permite al usuario establecer cualquier contraseña, sin ninguna validación. Por lo tanto, puede establecer una contraseña muy simple (solo para fines de prueba), que el método de respuesta aceptado no permite.
Gautam J


14

Esta es una muy buena pregunta.

python manage.py changepassword nombre_usuario

Ejemplo:

python manage.py changepassword mickey

11

La nueva configuración debe ejecutarse primero python manage.py createsuperuser para crear un usuario. Parece que no hay una contraseña de nombre de usuario predeterminada para iniciar sesión en admin.


9

Una de las mejores formas de recuperar el nombre de usuario y la contraseña es verlos y actualizarlos. El modelo de usuario proporciona una manera perfecta de hacerlo.

En este caso, estoy usando Django 1.9

  1. Navegue a su directorio raíz i, e. donde se encuentra el archivo "manage.py" utilizando su consola u otra aplicación como Git.
  2. Recupere el shell de Python con el comando "python manage.py shell".
  3. Importe el modelo de usuario escribiendo el siguiente comando "desde django.contrib.auth.models import User"
  4. Obtenga todos los usuarios escribiendo el siguiente comando "users = User.objects.all ()"
  5. Imprima una lista de los usuarios. Para los usuarios de Python 2, use el comando "usuarios de impresión". Para los usuarios de Python 3, use el comando "imprimir (usuarios)". El primer usuario suele ser el administrador.

  6. Seleccione el usuario al que desea cambiar su contraseña, p. Ej.

    "user = users[0]"

  7. Establecer la contraseña

    user.set_password('name_of_the_new_password_for_user_selected')

  8. Guarda la nueva contraseña

    "user.save()"

Inicie el servidor e inicie sesión con el nombre de usuario y la contraseña actualizada.


La ventaja de este método manage.py changepasswordes que no está restringido a las contraseñas que puede o no puede usar, ya no es demasiado similar a la basura del nombre de usuario. (Esto está en mi entorno de desarrollo. No estoy abogando por contraseñas más débiles. Siempre debes usar contraseñas seguras en prod.)
Shashwat Black

5

También es posible que haya respondido mal una pregunta de configuración y que no tenga ningún miembro del personal. En cuyo caso, dirígete a postgres:

obvioustest=# \c [yourdatabasename]
obvioustest=# \x
obvioustest=# select * from auth_user;
-[ RECORD 1 ]+-------------
id           | 1
is_superuser | f
is_staff     | f
...

Para arreglar, edite directamente:

update auth_user set is_staff='true' where id=1;

5

Dos formas de hacer esto:

El changepassword comando de gestión :

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

O (que se expande con algunas respuestas, pero funciona para cualquier modelo de Usuario extendido) usando el shell django-admin de la siguiente manera:

(env) $ python manage.py shell

Esto debería mostrar el símbolo del sistema de la siguiente manera:

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

Entonces querrías lo siguiente:

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

NB ¿Por qué he respondido esta pregunta con esta respuesta?

Porque, como se mencionó, User = get_user_model()funcionará para sus propios Usermodelos personalizados . Usar from django.contrib.auth.models import Userentonces User.objects.get(username='username')puede arrojar el siguiente error:

AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'

4

Si olvidó crear un usuario administrador, primero cree uno con el createsuperusercomando activado y manage.pyluego cambie la contraseña.


4

Puedes probar esto:

1.Cambie la contraseña del superusuario sin consola

python manage.py changepassword <username>

2.Cambie la contraseña del superusuario a través de la consola

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí


1
Usar capturas de pantalla en lugar de código escrito es una muy mala práctica. Poeple no puede copiar y pegar su código para probarlo y no está disponible para la búsqueda en el sitio
FallenAngel

3

En caso de que no conozca los nombres de usuario tal como se crean aquí. Puede obtener los usuarios como se describe anteriormente en @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

Sin embargo, en caso de que haya creado su modelo de usuario independiente. Un caso simple es cuando desea utilizar el correo electrónico como nombre de usuario en lugar del nombre de usuario predeterminado. En cuyo caso su modelo de usuario vive en algún lugar como your_accounts_app.models, la solución anterior no funcionará. En este caso, puede utilizar el método 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

3

si olvida a su administrador, entonces necesita crear un nuevo usuario usando

python manage.py createsuperuser <username>

y para la contraseña hay un comando CLI changepassword para que django cambie la contraseña del usuario

python manage.py changepassword <username>

O

django-admin changepassword <username>

O Ejecute este código en Django env

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

2

Otra cosa que vale la pena señalar es establecer el estado de su usuario is_staffcomo activo. Al menos, eso es lo que hace que funcione para mí. Para más detalles, creé otro superusercomo la gente explicó anteriormente. Luego voy a la tabla de la base de datos auth_usery busco ese nombre de usuario para asegurarme de que su is_staffbandera esté configurada 1. Eso finalmente me permitió iniciar sesión en el adminsitio.


2

Cree un nuevo superusuario con el comando "python manage.py createduperuser". Inicie sesión como el nuevo súper usuario. Haga clic en el enlace 'usuarios'. Luego haga clic en el usuario que desea eliminar. haga clic en eliminar usuario al final de la página del formulario.

Nota: El proceso anterior realizará cambios en los registros de actividad realizados por ese usuario en particular.



1

utilizar

Python manage.py dumpdata

luego mira al final encontrarás el nombre de usuario


0

La mejor manera es ir a su terminal y escribir

python manage.py createsuperuser

e inserte otra contraseña y nombre de usuario nuevamente, pero perderá parte de su perfil que ha creado antes en la mayoría de los casos.


0

Creo que la mejor manera en la línea de comando

python manage.py createuperuser


0

Es muy fácil simplemente escriba este comando en su línea de comando

python manage.py changepassword yourusername


-1

Otra forma de obtener el nombre de usuario (y la mayoría de la información) es acceder a la base de datos directamente y leer la información de las tablas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.