사용자가 Django에서 자신의 비밀번호를 변경하도록 허용하는 방법은 무엇입니까?


84

사용자가 Django에서 자신의 암호를 변경할 수있는 코드를 알려줄 수 있습니까?


15
구글이 답을 생각하는 대신 검색하도록 만들었다면, stackoverflow는 우리가 답을 검색하는 대신 답을 요청하게 만듭니다.
sykora 2009

2
-1은 'plzsendmetehcodes'입니다. BTW, 질문에 대한 정답을 수락해야합니다.
Cat Plus Plus

8
예, Google을 많이 사용했지만 여전히 사용합니다. 그러나 SO는 더 쉽고 빠르며 토론에 참여하고 대체 답변을들을 수 있습니다. Svetlozer Angelov와 같은 사람들이 간단한 질문에 답하기 위해 기꺼이 시간을 투자 (그리고 포인트를 획득)하는 한, 그것이 바로 SO의 목적입니다.
DOK

7
Django에는 포괄적이고 쉽게 액세스 할 수있는 문서가 있으므로 SO 답변에서 모든 문서를 복제하려는 지속적인 시도가 가치를 추가 할 수 없습니다.
Ben James

3
@Ben James : 좋은 지적입니다. 실제로 내 답변에서 문서를 다시 작성하는 대신 기본적인 정보와 문서에 대한 링크를 제공하는 이유입니다.
cethegeek 2009

답변:


159

Django는 사용자 인증 시스템과 함께 제공됩니다. 사용자 계정, 그룹, 권한 및 쿠키 기반 사용자 세션을 처리합니다. 이 문서는 작동 방식을 설명합니다.

Django 비밀번호를 변경하는 방법

암호 변경 섹션을 참조하십시오.

  1. manage.py파일이있는 프로젝트로 이동

  2. $ python manage.py shell

  3. 아래 스크립트를 입력하십시오.

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/이전 암호를 확인하고 새 암호를 두 번 입력 할 수있는 형태를 가질 것이다.


14
이것은 사용자가 자신의 암호를 변경할 수있는 페이지를 만드는 데 도움이되지 않는다고 생각합니다. 관리자 만 수행 할 수 있습니다.
Micah Walter

25

django.contrib.auth.views.password_changeURLconf 에서 보기를 사용할 수도 있습니다 . 기본 양식과 템플릿을 사용합니다. 자신을 제공하는 것은 선택 사항입니다.


4

쉘로 이동할 필요없이 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()


2

이 튜토리얼 에서는 함수 기반 뷰로 수행하는 방법을 보여줍니다.

파일보기:

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>

1

Ciro Santilli의 답변에 표시된대로 URL 패턴이 추가되면 사용자가 암호를 변경할 수있는 빠른 방법은 관리자 기능에 대한 "직원 액세스"를 제공하는 것입니다. 그룹에 추가하지 않거나 특별한 권한을 부여하지 않아도 example.com/admin 페이지로 이동하여 비밀번호를 변경할 수 있습니다. 직원 액세스를 사용하면 비어있는 경우에도 페이지로 이동할 수 있습니다. 오른쪽 상단에서 "비밀번호 변경"을 클릭하고 관리자 기능을 사용할 수 있습니다.


1

이것은 내가 사용한 명령 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()"

1

설명서 , 사용 :

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. 기술적으로 클래스와 하위 클래스의 철자가 틀렸다면 미안하지만 기술은 잘 작동했습니다.


0

@Ciro의 답변과 매우 유사하지만 원래 질문에 더 구체적입니다 (모든 인증보기를 추가하지 않음).

다만 추가 urlpatternsurls.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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.