Может ли кто-нибудь указать мне код, в котором пользователи могут изменять свои пароли в Django?
Может ли кто-нибудь указать мне код, в котором пользователи могут изменять свои пароли в Django?
Ответы:
Django поставляется с системой аутентификации пользователей. Он обрабатывает учетные записи пользователей, группы, разрешения и пользовательские сеансы на основе файлов cookie. Этот документ объясняет, как все работает.
См. Раздел « Смена паролей ».
Переход к вашему проекту, где manage.py
лежит файл
$ python manage.py shell
введите ниже скрипты:
из django.contrib.auth.models импортировать пользователя u = User.objects.get (username__exact = 'john') u.set_password ('новый пароль') u.save ()
Вы также можете использовать простую manage.py
команду:
manage.py changepassword *username*
Просто введите новый пароль дважды.
из раздела « Смена паролей » в документации.
Если у вас есть django.contrib.admin
в вашем INSTALLED_APPS
, вы можете посетить: example.com/path-to-admin/password_change/
где будет форма для подтверждения вашего старого пароля и ввода нового пароля дважды.
Вы также можете просто использовать django.contrib.auth.views.password_change
представление в своем URLconf. Он использует форму и шаблон по умолчанию; поставлять свои собственные необязательно.
Его без необходимости идти в оболочку, введите пароль и повторно введите пароль
python manage.py changepassword <username>
or
/manage.py changepassword <username>
Использование оболочки
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()
В этом руководстве показано, как это сделать с помощью представлений на основе функций:
Посмотреть файл:
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
})
URL-файл:
from django.conf.urls import url
from myproject.accounts import views
urlpatterns = [
url(r'^password/$', views.change_password, name='change_password'),
]
И наконец, шаблон:
<form method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Save changes</button>
</form>
urls.py
:
urlpatterns = [
url(r'^accounts/', include('django.contrib.auth.urls')),
Шаблон:
<a href="{% url 'password_change' %}">{% trans "Change password" %}</a>
Документировано по адресу: https://docs.djangoproject.com/en/1.9/topics/auth/default/#using-the-views
После добавления шаблона URL-адреса, как показано в ответе Чиро Сантилли, быстрый способ разрешить пользователям изменять пароли - предоставить им «доступ персонала» к функциям администратора. Если вы не добавите их ни в какие группы или не дадите им особые разрешения, они все равно смогут изменить свой пароль, перейдя на страницу example.com/admin. Доступ персонала позволяет им переходить на страницу, даже если она пуста; в правом верхнем углу они могут нажать «сменить пароль» и использовать функции администратора.
Я использовал эту команду на всякий случай, если у вас возникли проблемы с этим броском 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()"
Согласно документации , используйте:
from django.contrib.auth.hashers import makepassword
Основная причина этого в том, что Django использует хешированные пароли для хранения в базе данных.
password=make_password(password,hasher='default')
obj=User.objects.filter(empid=emp_id).update(username=username,password=password)
Я использовал этот метод для пользовательской модели пользователя, которая является производной от AbstractUser
модели. Прошу прощения, если я допустил техническую ошибку в классе и подклассе, но техника сработала хорошо.
Очень похоже на ответ @Ciro, но более конкретно для исходного вопроса (без добавления всех представлений аутентификации):
просто добавьте urlpatterns
в urls.py
:
url('^change-password/$', auth_views.password_change, {'post_change_redirect': 'next_page'}, name='password_change'),
Обратите внимание, что post_change_redirect
указывает URL-адрес для перенаправления после изменения пароля.
Затем просто добавьте в свой шаблон:
<a href="{% url 'password_change' %}">Change Password</a>