Django 사용자 관리 ------- 비밀번호 수정

3185 단어 공부 해요.
Django에 내장된 응용 프로그램이 매우 많기 때문에 사용자 비밀번호를 수정할 때 우리는 자체적인 방법으로 수정할 수도 있고 해당하는 방법을 써서 수정할 수도 있다.여기에서 각각 두 가지 방법을 나열해 낸다.
하나.우선django가 자체로 가지고 있는 사용자 비밀번호를 수정합니다.
관련 원본이django에 저장되었습니다.contrib.auth의views에서.마찬가지로django가 자체로 가지고 있는login과logout 함수도 여기에 있습니다.그중에 정의된 패스워드change 메서드와 passwordchange_done 방법, 하나는 우리가 비밀번호를 수정하는 방법, 하나는 우리가 수정한 후에 처리하는 방법.
django가 우리에게 이미 적어 주었기 때문에,views에서 다시 설정할 필요가 없습니다.urls를 직접 정의합니다.다음과 같습니다.
from django.contrib.auth import views as auth_views
urlpatterns = [
    url(r'password-change/$', auth_views.password_change, {
        'template_name': "account/password_change_form.html",
        'post_change_redirect': '/account/password-change-done'}, name='password_change'), 
    url(r'password-change-done/$', auth_views.password_change_done, {
        'template_name': "account/password_change_done.html"}, name='password_change_done'),
]

왜냐하면 자체 패스워드가...change의 템플릿은registration/password 에 대응합니다change_form.html, 우리는settings에서templates 경로를 자신이 설정한 경로로 바꾸었다고 말했기 때문에 여기서 우리는 직접 자신이 쓴 템플릿을 매개 변수 형식으로 전송한다.원본 코드를 보면 우리가 점프 경로를 정하지 않으면password 로 자동으로 점프할 수 있습니다change_done, 하지만 우리가 쓴 패스워드change_done는 자신이 만든 사용자 관리 앱에 저장되어 있으며 경로 앞에 계정이 많아졌기 때문에 이 이동 경로를 직접 전달해야 합니다.
같은 이치,passwordchange_done도 마찬가지입니다. 단지 템플릿 인용 이름은password 입니다.change_done.html
둘.그 다음은 사용자 수정 함수를 스스로 설정하는 것이다
갓 배운 흰둥이는 앞의 표에서 암호의 입력 값을 직접 얻어서 데이터베이스에 저장된 값과 비교해서는 안 된다는 것을 주의해야 한다.데이터베이스 중의 암호는 알고리즘을 통해 암호화된 해시 값이고 밀문이기 때문에 직접 비교할 수 없다.django 공식 문서를 배우면django가 자체로 가지고 있는 암호에 대한 검증 함수를 알 수 있습니다.
django.contrib.auth.hashers 모듈은 산열 암호를 만들고 검증하는 함수를 제공합니다. 비교적 좋은 것은 User 모델에 독립해서 사용할 수 있습니다. 즉, 우리는 사용자 대상을 연결하지 않고 직접 가져와서 사용할 수 있습니다.다음과 같은 세 가지 함수가 있습니다.
check_password(password, encoded)
                                ,        check_password()。       :         ,             password       ,      ,    True,     False。

make_password(password, salt=None, hasher='default')
                 。         :    。  ,          (PASSWORD_HASHERS         ),              。             ,        。        None,         (check_password()        )。

is_password_usable(encoded_password)
                check_password()           。
여기서 체크password, 그리고makepassword, 잘 소개했어요.나는 나의 간단한 코드를 내려놓았다.
def change_pwd(request):
    if request.method == 'POST':
        form = ChangepwdForm(request.POST)
        if form.is_valid():
            user = User.objects.get(username=request.POST.get('username'))
            if user:
                if check_password(request.POST.get('password'), user.password):
                    user.password = make_password(request.POST.get('new_password'))
                    user.save()
                    return ...
                return ...
            return ...
        else:
            return ...
    form = ChangepwdForm()
    return render(request, 'account/changepwd.html', {'form': form})

마지막으로 urls 설정 잊지 마세요.
 
  

좋은 웹페이지 즐겨찾기