Como redefinir a senha de administrador do Django?


448

Estou usando o Django (versão 1.3) e esqueci o nome de usuário e a senha do administrador. Como redefinir os dois?

E é possível transformar um usuário normal em administrador e remover o status de administrador?

Respostas:


782
python manage.py changepassword <user_name>

ver documentos


7
acabei de perceber que você disse que esqueceu o nome de usuário ... 'admin' sendo o nome de usuário na minha resposta não será de muita ajuda!
JamesO

8
@ user794916 Essa é uma escolha bastante estranha se você não se lembra do nome de usuário. :-)
DrTyrsa 15/06

1
Você pode alterar o nome do usuário de "admin" para outro nome de usuário adequado. : D
mxi1 4/15

4
Django é o melhor. tudo é tão fácil
DMTintner

5
Se você esqueceu o nome de usuário, pode manage.py createsuperusercriar um segundo superusuário e exibir a lista de Usuários para encontrar o original. Em seguida, efetue login como o original e exclua o novo superusuário.
Shacker 14/05/19

173
  1. python manage.py createsuperuser criar outro superusuário, você poderá fazer login no admin e lembrar seu nome de usuário.
  2. Sim, porque não.

Para conceder privilégios normais a um usuário, abra um shell python manage.py shelle tente:

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

Se possível, como fazê-lo?
IamH1kc

Com esta abordagem parece que o usuário não pode acessar o Django admin
Keul

3
@LucaFabbri você também precisa setuser.is_staff = True
Aaron McMillin

122

Você pode tentar através do console:

python manage.py shell

use o seguinte script no shell

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

listará todos os superusuários do sistema. se você reconhecer seu nome de usuário da lista:

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

e você define uma nova senha (:


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

pip install django-extensions, adicione-o installed appse execute ./manage.py shell_plus. A Useraula estará disponível e você poderá password-change.
Timo

Este método permite ao usuário definir qualquer senha, sem qualquer validação. Assim, você pode definir uma senha muito simples (apenas para fins de teste), que o método de resposta aceito não permite.
Gautam J


14

Esta é uma pergunta muito boa.

python manage.py changepassword user_name

Exemplo: -

python manage.py changepassword mickey

11

nova configuração deve ser executada primeiro python manage.py createsuperuser para criar o usuário. Parece que não há uma senha de nome de usuário padrão para fazer login no admin.


9

Uma das melhores maneiras de recuperar o nome de usuário e a senha é visualizá-los e atualizá-los. O modelo de usuário fornece uma maneira perfeita de fazer isso.

Nesse caso, estou usando o Django 1.9

  1. Navegue para o diretório raiz i, e. onde o arquivo "manage.py" está localizado usando seu console ou outro aplicativo como o Git.
  2. Recupere o shell do Python usando o comando "python manage.py shell".
  3. Importe o Modelo do Usuário digitando o seguinte comando "from django.contrib.auth.models import User"
  4. Obtenha todos os usuários digitando o seguinte comando "users = User.objects.all ()"
  5. Imprimir uma lista dos usuários Para usuários do Python 2, use o comando "usuários de impressão". Para usuários do Python 3, use o comando "print (users)". O primeiro usuário geralmente é o administrador.

  6. Selecione o usuário que você deseja alterar sua senha, por exemplo

    "user = users[0]"

  7. Defina a senha

    user.set_password('name_of_the_new_password_for_user_selected')

  8. Salve a nova senha

    "user.save()"

Inicie o servidor e efetue login usando o nome de usuário e a senha atualizada.


A vantagem desse método manage.py changepasswordé que você não está restrito a quais senhas você pode ou não pode usar - não muito semelhante à porcaria de nome de usuário. (Isto é, em meu ambiente dev Eu não estou defendendo senhas mais fracas Você deve sempre usar senhas fortes na prod...)
Shashwat Preto

5

Você também pode ter respondido a uma pergunta incorreta e ter zero membros da equipe. Nesse caso, vá para o postgres:

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

Para corrigir, edite diretamente:

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

5

Duas maneiras de fazer isso:

O changepassword comando de gerenciamento :

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

Ou (que amplia algumas respostas, mas funciona para qualquer modelo de usuário estendido) usando o shell django-admin da seguinte maneira:

(env) $ python manage.py shell

Isso deve exibir o prompt de comando do shell da seguinte maneira:

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

Então você deseja o seguinte:

>>> 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 que respondi a esta pergunta com esta resposta?

Porque, como mencionado, User = get_user_model()funcionará para seus próprios Usermodelos personalizados . Usar from django.contrib.auth.models import Userentão User.objects.get(username='username')pode gerar o seguinte erro:

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

4

Se você esqueceu de criar usuário administrador, primeiro crie um com o createsuperusercomando ativado manage.pye altere a senha.


4

Você pode tentar o seguinte:

1.Alterar senha do superusuário sem console

python manage.py changepassword <username>

2.Altere a senha do superusuário através do console

insira a descrição da imagem aqui insira a descrição da imagem aqui


1
Usar capturas de tela em vez de código escrito é uma prática muito ruim. O pessoal não pode copiar e colar o seu código para testar e ele não está disponível para pesquisa no site
FallenAngel 17/03

3

Caso você não conheça os nomes de usuário criados aqui. Você pode obter os usuários conforme descrito por @FallenAngel acima.

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

No entanto, no caso em que você criou seu modelo de usuário independente. Um caso simples é quando você deseja usar o email como um nome de usuário em vez do nome de usuário padrão. Nesse caso, seu modelo de usuário mora em algum lugar como your_accounts_app.models, a solução acima não funcionará. Nesse caso, você pode usar o 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

Se você esquecer seu administrador, precisará criar um novo usuário usando

python manage.py createsuperuser <username>

e para senha existe o comando da CLI changepassword para o django mudar a senha do usuário

python manage.py changepassword <username>

OU

django-admin changepassword <username>

OU Execute este código no Django env

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

2

Outra coisa que vale a pena notar é definir o status do seu usuário is_staffcomo ativo. Pelo menos, é isso que faz funcionar para mim. Para mais detalhes, criei outro superusercomo as pessoas explicaram acima. Então vou à tabela do banco de dados auth_usere procuro esse nome de usuário para garantir que seu is_staffsinalizador esteja definido como 1. Isso finalmente me permitiu entrar no adminsite.


2

Crie um novo superusuário com o comando "python manage.py createduperuser". Faça o login como o novo superusuário. Clique no link 'usuários'. Em seguida, clique no usuário que você deseja excluir. clique em excluir usuário no final da página do formulário.

Nota - O processo acima fará alterações nos logs de atividades feitos por esse usuário específico.



1

usar

python manage.py dumpdata

então olhe para o final, você encontrará o nome de usuário


0

A melhor maneira é simplesmente ir ao seu terminal e digitar

python manage.py createsuperuser

e insira outra senha e nome de usuário novamente, mas você perderá parte do seu perfil que você criou antes na maioria dos casos.


0

Eu penso: o melhor caminho Na linha de comando

python manage.py cria superusuário


0

É muito fácil digitar este comando na sua linha de comando

python manage.py changepassword yourusername


-1

Outra maneira de obter o nome de usuário (e a maioria das informações) é acessar o banco de dados diretamente e ler as informações das tabelas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.