Làm thế nào để thiết lập lại mật khẩu quản trị viên Django?


448

Tôi đang sử dụng Django (phiên bản 1.3) và đã quên cả tên người dùng và mật khẩu quản trị viên. Làm thế nào để thiết lập lại cả hai?

Và có thể biến người dùng bình thường thành quản trị viên, sau đó xóa trạng thái quản trị viên không?

Câu trả lời:


781
python manage.py changepassword <user_name>

xem tài liệu


7
chỉ nhận ra rằng bạn đã quên tên người dùng ... 'quản trị viên' là tên người dùng trong câu trả lời của tôi sẽ không giúp được nhiều!
JamesO

8
@ user794916 Đó là lựa chọn khá lạ nếu bạn không nhớ tên người dùng. :-)
DrTyrsa

1
Bạn có thể thay đổi tên người dùng từ "quản trị viên" thành một tên người dùng thích hợp khác. : D
mxi1

4
django là tốt nhất. mọi thứ thật dễ dàng
DMTintner

5
Nếu bạn quên tên người dùng, bạn có thể thực hiện manage.py createsuperuserđể tạo siêu người dùng thứ 2 và sau đó xem danh sách Người dùng để tìm tên người dùng ban đầu. Sau đó đăng nhập như bản gốc và xóa siêu người dùng mới.
Shacker

173
  1. python manage.py createsuperuser sẽ tạo một siêu người dùng khác, bạn sẽ có thể đăng nhập vào quản trị viên và ghi nhớ tên người dùng của bạn.
  2. Vâng, tại sao không.

Để cung cấp một đặc quyền người dùng bình thường, hãy mở một trình bao với python manage.py shellvà thử:

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

Nếu có thể, làm thế nào để làm điều đó?
IamH1kc

Với cách tiếp cận này, dường như người dùng không thể truy cập quản trị viên django
keul

3
@LucaFabbri bạn cũng cần phải thiết lậpuser.is_staff = True
Aaron McMillin

122

Bạn có thể thử thông qua bảng điều khiển:

python manage.py shell

sau đó sử dụng đoạn script sau trong shell

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

sẽ liệt kê cho bạn tất cả siêu người dùng trên hệ thống. nếu bạn nhận ra tên người dùng của bạn từ danh sách:

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

và bạn đặt mật khẩu mới (:


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

pip install django-extensions, thêm nó vào installed appsvà chạy ./manage.py shell_plus. Các Userlớp học sẽ có sẵn và bạn có thể password-change.
Timo

Phương pháp này cho phép người dùng đặt bất kỳ mật khẩu nào mà không cần xác thực. Do đó, bạn có thể đặt mật khẩu rất đơn giản (chỉ dành cho mục đích thử nghiệm) mà phương thức trả lời được chấp nhận không cho phép.
Gautam J


14

Đây là câu hỏi rất hay.

python Manage.txt changepassword user_name

Thí dụ :-

python manage.py changepassword mickey

11

thiết lập mới đầu tiên nên chạypython manage.py createsuperuser để tạo người dùng. Có vẻ như không có mật khẩu tên người dùng mặc định để đăng nhập vào quản trị viên.


9

Một trong những cách tốt nhất để lấy lại tên người dùng và mật khẩu là xem và cập nhật chúng. Mô hình người dùng cung cấp một cách hoàn hảo để làm như vậy.

Trong trường hợp này, tôi đang sử dụng Django 1.9

  1. Điều hướng đến thư mục gốc của bạn i, e. nơi bạn đặt tệp "Manage.py" bằng bảng điều khiển hoặc ứng dụng khác, chẳng hạn như Git.
  2. Truy xuất shell Python bằng lệnh "python Manage.py shell".
  3. Nhập Mô hình Người dùng bằng cách nhập lệnh sau "từ django.contrib.auth.models Nhập Người dùng"
  4. Nhận tất cả người dùng bằng cách gõ lệnh sau "users = User.objects.all ()"
  5. In danh sách người dùng Đối với người dùng Python 2 sử dụng lệnh "người dùng in" Đối với người dùng Python 3 sử dụng lệnh "print (users)" Người dùng đầu tiên thường là quản trị viên.

  6. Chọn người dùng bạn muốn thay đổi mật khẩu của họ, vd

    "user = users[0]"

  7. Đặt mật khẩu

    user.set_password('name_of_the_new_password_for_user_selected')

  8. Lưu mật khẩu mới

    "user.save()"

Khởi động máy chủ và đăng nhập bằng tên người dùng và mật khẩu được cập nhật.


Ưu điểm của phương pháp manage.py changepasswordnày là bạn không bị hạn chế đối với những mật khẩu nào bạn có thể hoặc không thể sử dụng - không quá giống với tên người dùng. (Đây là trong môi trường nhà phát triển của tôi. Tôi không ủng hộ mật khẩu yếu hơn. Bạn nên luôn luôn sử dụng mật khẩu mạnh trong sản phẩm.)
Shashwat Black

5

Bạn cũng có thể đã trả lời sai một câu hỏi thiết lập và không có nhân viên. Trong trường hợp đầu đến postgres:

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

Để khắc phục, chỉnh sửa trực tiếp:

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

5

Hai cách để làm điều này:

Lệnh changepassword quản lý :

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

Hoặc (mở rộng theo một vài câu trả lời, nhưng hoạt động cho bất kỳ mô hình Người dùng mở rộng nào) bằng cách sử dụng trình bao django-admin như sau:

(env) $ python manage.py shell

Điều này sẽ đưa ra dấu nhắc lệnh shell như sau:

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

Sau đó, bạn sẽ muốn như sau:

>>> 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 Tại sao tôi đã trả lời câu hỏi này với câu trả lời này?

Bởi vì, như đã đề cập, User = get_user_model()sẽ làm việc cho các Usermô hình tùy chỉnh của riêng bạn . Sử dụng from django.contrib.auth.models import Usersau đó User.objects.get(username='username')có thể ném lỗi sau:

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

4

Nếu bạn quên tạo người dùng quản trị, trước tiên hãy xây dựng một createsuperuserlệnh bằng lệnh manage.pysau đó thay đổi mật khẩu.


4

Bạn có thể thử điều này:

1. Thay đổi mật khẩu Superuser mà không cần bàn điều khiển

python manage.py changepassword <username>

2. Thay đổi mật khẩu Superuser thông qua bảng điều khiển

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


1
Sử dụng ảnh chụp màn hình thay vì viết mã là thực tế rất xấu. Poeple không thể Sao chép-Dán mã của bạn để kiểm tra và nó không có sẵn cho tìm kiếm tại chỗ
FallenAngel

3

Trong trường hợp bạn không biết tên người dùng như được tạo ở đây. Bạn có thể có được những người dùng như được mô tả bởi @FallenAngel ở trên.

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

Tuy nhiên trong trường hợp bạn tạo mô hình người dùng độc lập. Một trường hợp đơn giản là khi bạn muốn sử dụng email làm tên người dùng thay vì tên người dùng mặc định. Trong trường hợp mô hình người dùng của bạn sống ở đâu đó như your_accounts_app.models thì giải pháp trên sẽ không hoạt động. Trong trường hợp này, bạn có thể sử dụng phương thức 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

nếu bạn quên quản trị viên thì bạn cần tạo người dùng mới bằng cách sử dụng

python manage.py createsuperuser <username>

và đối với mật khẩu, có lệnh CLI changepassword cho django để thay đổi mật khẩu người dùng

python manage.py changepassword <username>

HOẶC LÀ

django-admin changepassword <username>

HOẶC Chạy mã này trong Django env

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

2

Một điều đáng chú ý là đặt trạng thái người dùng của bạn is_stafflà hoạt động. Ít nhất, đó là những gì làm cho nó hoạt động với tôi. Để biết thêm chi tiết, tôi đã tạo một cái khác superusernhư mọi người đã giải thích ở trên. Sau đó, tôi đi đến bảng cơ sở dữ liệu auth_uservà tìm kiếm tên người dùng đó để đảm bảo is_staffcờ của nó được đặt thành 1. Điều đó cuối cùng đã cho phép tôi đăng nhập vào admintrang web.


2

Tạo một siêu người dùng mới với lệnh "python Manage.py createduperuser". Đăng nhập như siêu người dùng mới. Nhấp vào liên kết 'người dùng. Sau đó bấm vào người dùng bạn muốn xóa. nhấp vào xóa người dùng ở cuối trang mẫu.

Lưu ý - Quá trình trên sẽ thực hiện thay đổi đối với nhật ký hoạt động được thực hiện bởi người dùng cụ thể đó.



1

sử dụng

python manage.py dumpdata

sau đó nhìn vào cuối bạn sẽ tìm thấy tên người dùng


0

Cách tốt nhất là chỉ cần đi đến thiết bị đầu cuối của bạn và gõ

python manage.py createsuperuser

và chèn lại mật khẩu và tên người dùng khác nhưng bạn sẽ mất một số hồ sơ mà bạn đã tạo trước đó trong hầu hết các trường hợp.


0

Tôi nghĩ rằng, cách tốt hơn Tại dòng lệnh

python Manage.txt createduperuser


0

Rất dễ dàng chỉ cần gõ lệnh này trong dòng lệnh yout

python Manage.txt changepassword yourusername


-1

Một cách khác để có được tên người dùng (và hầu hết thông tin) là truy cập trực tiếp vào cơ sở dữ liệu và đọc thông tin từ các bảng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.