Если Google заставил нас искать ответы вместо того, чтобы думать о них, stackoverflow заставляет нас запрашивать ответы, а не даже искать их.
sykora
2
-1 для 'plzsendmetehcodes'. Кстати, вы должны принять правильный ответ на свои вопросы.
Cat Plus Plus,
8
Да, я много пользовался Google и до сих пор использую. Но так проще и быстрее, и вы можете участвовать в обсуждениях и слышать альтернативные ответы. Пока есть такие люди, как Светлозер Ангелов и другие, которые готовы вкладывать свое время (и зарабатывать баллы), отвечая на простые вопросы, ну, вот для чего существует SO.
DOK
7
Django имеет настолько исчерпывающую и легкодоступную документацию, что постоянные попытки воспроизвести всю документацию, когда-либо содержащуюся в ответах SO, не могут добавить никакой ценности.
Бен Джеймс
3
@ Бен Джеймс: такой хороший момент. Собственно, поэтому вместо того, чтобы переписывать документацию в своих ответах, я просто даю базовую информацию и ссылаюсь на документацию.
cethegeek
Ответы:
161
Django поставляется с системой аутентификации пользователей. Он обрабатывает учетные записи пользователей, группы, разрешения и пользовательские сеансы на основе файлов cookie. Этот документ объясняет, как все работает.
Если у вас есть django.contrib.adminв вашем INSTALLED_APPS, вы можете посетить: example.com/path-to-admin/password_change/где будет форма для подтверждения вашего старого пароля и ввода нового пароля дважды.
Я не думаю, что это помогает создавать страницы, на которых пользователи могут изменять свои собственные пароли - просто администратор делает это.
Мика Уолтер
25
Вы также можете просто использовать 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()
После добавления шаблона 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()"
Я использовал этот метод для пользовательской модели пользователя, которая является производной от AbstractUserмодели. Прошу прощения, если я допустил техническую ошибку в классе и подклассе, но техника сработала хорошо.
Ответы:
Как изменить пароли Django
См. Раздел « Смена паролей ».
Переход к вашему проекту, где
manage.py
лежит файл$ python manage.py shell
введите ниже скрипты:
Вы также можете использовать простую
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>
источник