Có ai có thể chỉ cho tôi mã nơi người dùng có thể thay đổi mật khẩu của họ trong Django không?
Có ai có thể chỉ cho tôi mã nơi người dùng có thể thay đổi mật khẩu của họ trong Django không?
Câu trả lời:
Django đi kèm với một hệ thống xác thực người dùng. Nó xử lý tài khoản người dùng, nhóm, quyền và phiên người dùng dựa trên cookie. Tài liệu này giải thích cách mọi thứ hoạt động.
Xem mật khẩu Thay đổi phần
Điều hướng đến dự án của bạn nơi manage.py
tệp nằm
$ python manage.py shell
gõ các tập lệnh dưới đây:
từ django.contrib.auth.models nhập Người dùng u = User.objects.get (username__exact = 'john') u.set_password ('mật khẩu mới') u.save ()
Bạn cũng có thể sử dụng manage.py
lệnh đơn giản :
manage.py changepassword *username*
Chỉ cần nhập mật khẩu mới hai lần.
từ phần Thay đổi mật khẩu trong tài liệu.
Nếu bạn có tài khoản django.contrib.admin
của mình INSTALLED_APPS
, bạn có thể truy cập: example.com/path-to-admin/password_change/
sẽ có biểu mẫu xác nhận mật khẩu cũ của bạn và nhập mật khẩu mới hai lần.
Nó mà không cần phải đi đến trình bao, nhập mật khẩu và nhập lại mật khẩu
python manage.py changepassword <username>
or
/manage.py changepassword <username>
Sử dụng vỏ
python manage.py shell
from django.contrib.auth.models import User
users=User.objects.filter(email='<user_email>')
#you can user username or etc to get users query set
#you can also use get method to get users
user=users[0]
user.set_password('__enter passwd__')
user.save()
exit()
urls.py
:
urlpatterns = [
url(r'^accounts/', include('django.contrib.auth.urls')),
Bản mẫu:
<a href="{% url 'password_change' %}">{% trans "Change password" %}</a>
Tài liệu tại: https://docs.djangoproject.com/en/1.9/topics/auth/default/#using-the-views
Hướng dẫn này chỉ ra cách thực hiện với các chế độ xem dựa trên chức năng:
Xem tài liệu:
from django.contrib import messages
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.forms import PasswordChangeForm
from django.shortcuts import render, redirect
def change_password(request):
if request.method == 'POST':
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
user = form.save()
update_session_auth_hash(request, user) # Important!
messages.success(request, 'Your password was successfully updated!')
return redirect('change_password')
else:
messages.error(request, 'Please correct the error below.')
else:
form = PasswordChangeForm(request.user)
return render(request, 'accounts/change_password.html', {
'form': form
})
Tệp url:
from django.conf.urls import url
from myproject.accounts import views
urlpatterns = [
url(r'^password/$', views.change_password, name='change_password'),
]
Và cuối cùng, mẫu:
<form method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Save changes</button>
</form>
Khi mẫu url được thêm vào như trong câu trả lời của Ciro Santilli, một cách nhanh chóng để cho phép người dùng thay đổi mật khẩu là cấp cho họ "quyền truy cập nhân viên" đối với các chức năng quản trị. Nếu bạn không thêm họ vào bất kỳ nhóm nào hoặc cấp cho họ quyền đặc biệt, họ vẫn có thể thay đổi mật khẩu của mình bằng cách truy cập trang example.com/admin. Quyền truy cập của nhân viên cho phép họ truy cập trang ngay cả khi trang đó trống; ở góc trên bên phải, họ có thể nhấp vào "thay đổi mật khẩu" và sử dụng quyền quản trị viên.
Đây là lệnh tôi đã sử dụng, đề phòng trường hợp bạn gặp sự cố trong lần ném đó AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'
.
python manage.py shell -c "from django.contrib.auth import get_user_model;
User = get_user_model();
u = User.objects.get(username='admin');
u.set_password('password123');
u.save()"
Theo tài liệu , sử dụng:
from django.contrib.auth.hashers import makepassword
Lý do chính để làm điều này là Django sử dụng mật khẩu băm để lưu trữ trong cơ sở dữ liệu.
password=make_password(password,hasher='default')
obj=User.objects.filter(empid=emp_id).update(username=username,password=password)
Tôi đã sử dụng kỹ thuật này cho mô hình người dùng tùy chỉnh có nguồn gốc từ AbstractUser
mô hình. Tôi xin lỗi nếu tôi viết sai kỹ thuật cho lớp và lớp con, nhưng kỹ thuật này hoạt động tốt.
Rất giống với câu trả lời của @ Ciro, nhưng cụ thể hơn cho câu hỏi ban đầu (mà không thêm tất cả các chế độ xem xác thực):
chỉ cần thêm urlpatterns
vào urls.py
:
url('^change-password/$', auth_views.password_change, {'post_change_redirect': 'next_page'}, name='password_change'),
Lưu ý rằng post_change_redirect
chỉ định url để chuyển hướng sau khi mật khẩu được thay đổi.
Sau đó, chỉ cần thêm vào mẫu của bạn:
<a href="{% url 'password_change' %}">Change Password</a>