사용자가 Django에서 자신의 암호를 변경할 수있는 코드를 알려줄 수 있습니까?
사용자가 Django에서 자신의 암호를 변경할 수있는 코드를 알려줄 수 있습니까?
답변:
Django는 사용자 인증 시스템과 함께 제공됩니다. 사용자 계정, 그룹, 권한 및 쿠키 기반 사용자 세션을 처리합니다. 이 문서는 작동 방식을 설명합니다.
암호 변경 섹션을 참조하십시오.
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/
이전 암호를 확인하고 새 암호를 두 번 입력 할 수있는 형태를 가질 것이다.
쉘로 이동할 필요없이 passwd를 입력하고 passwd를 다시 입력합니다.
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()
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
이 튜토리얼 에서는 함수 기반 뷰로 수행하는 방법을 보여줍니다.
파일보기:
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>
당 설명서 , 사용 :
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>