2016-11-18

Django 1.10.3 Tutorial : 관리자 비밀번호 변경하기


  • 템플릿 디렉토리에 $PRJNAME/web/prjname/templates/mgmt/admin/password_form.html 파일을 생성한다.
    password_form.html
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
      <h4 class="modal-title">관리자 비밀번호 변경</h4>
    </div>
    <div class="modal-body">
      <form name="chg_passwd_form" action="/mgmt/admin/change_password" method="post">
        {% csrf_token %}
        <div class="form-group">
          <label>아이디</label>
          {{ form.userid }}
          {{ form.id }}
        </div>
        <div class="form-group">
          <label>별명</label>
          {{ form.nick }}
        </div>
        <div class="form-group">
          <label>비밀번호 <small>(필수)</small></label>
          {{ form.passwd1 }}
        </div>
        <div class="form-group">
          <label>비밀번호 확인 <small>(필수)</small></label>
          {{ form.passwd2 }}
        </div>
        <div class="form-group" style="text-align: right">
          <input class="btn btn-primary" type="submit" value="관리자 비밀번호 변경" />
        </div>
      </form>
    </div>
  • 폼($PRJNAME/web/prjname/forms/mgmt/admin.py)에 다음을 추가한다.
    ...
     
    class AdminPasswordForm(forms.Form):
        id      = forms.CharField(widget=forms.HiddenInput)
        userid  = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control', 'readonly':True, }))
        nick    = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control', 'readonly':True, }))
        passwd1 = forms.CharField(max_length=255, widget=forms.PasswordInput(attrs={'class':'form-control', 'pattern':'[a-zA-Z0-9]+', 'required':True, }))
        passwd2 = forms.CharField(max_length=255, widget=forms.PasswordInput(attrs={'class':'form-control', 'pattern':'[a-zA-Z0-9]+', 'required':True, }))
     
     
    ...
  • 뷰($PRJNAME/web/prjname/views/mgmt/admin.py)에 다음을 추가한다.
    ...
     
    # 비밀번호 수정 폼
    def password_form(request, id):
        admin = AdminModel.objects.get(id=id)
        data = {'id': admin.id,
                'userid': admin.userid,
                'nick': admin.nick }
        form = AdminPasswordForm(data)
        return render(request, 'mgmt/admin/password_form.html', {'form': form})
     
    ...
  • $PRJNAME/web/prjname/urls.py에 다음을 추가한다.
        url(r'^mgmt/admin/password_form/(?P<id>[0-9]+)$', mgmt_admin.password_form, name='mgmt_admin_password_form'),
  • 이제, 비밀번호변경 버튼을 클릭하면 비밀번호변경을 위한 모달 다이얼로그박스가 나타날 것이다.
  • 실제로 비밀번호를 변경하는 작업을 해보자. 뷰($PRJNAME/web/prjname/views/mgmt/admin.py)에 다음을 추가한다.
    ...
     
    # 비밀번호 수정 폼
    def change_password(request):
        form = AdminPasswordForm(request.POST)
        if form.is_valid():
            id      = form.cleaned_data['id']
            passwd1 = form.cleaned_data['passwd1']
            passwd2 = form.cleaned_data['passwd2']
            if passwd1 != passwd2 :
                messages.add_message(request, messages.INFO, '새로운 비밀번호와 다시 입력한 비밀번호가 일치하지 않습니다.')
                return redirect('mgmt_admin_index')
     
            admin = AdminModel.objects.get(id=id)
            admin.password = passwd1
            admin.save()
            messages.add_message(request, messages.INFO, '관리자 비밀번호가 정상적으로 수정되었습니다.')
        else:
            messages.add_message(request, messages.INFO, '입력 데이터가 올바르지 않습니다. 다시 변경해주세요.')
        return redirect('mgmt_admin_index')
     
    ...
  • $PRJNAME/web/prjname/urls.py에 다음을 추가한다. 다음을 추가한다.
        url(r'^mgmt/admin/change_password$', mgmt_admin.change_password, name='mgmt_admin_change_password'),
  • 비밀번호를 변경해보고, DB의 내용이 잘 반영되었는지 확인해보자.
    $ cd $PRJNAME
    $ sqlite3 db.sqlite3
    SQLite version 3.15.0 2016-10-14 10:20:30
    Enter ".help" for usage hints.
    sqlite> select * from tb_admin;
    1|testid1|passwd1|nick1|010-1111-1111|2016-11-16|
    2|testid2|passwd2|nick2|010-2222-2222|2016-11-16|
    3|testid3|passwd3|nick3|010-3333-3333|2016-11-16|
    4|testid4|passwd4|nick4|010-4444-4444|2016-11-16|
    5|testid5|passwd5|nick5|010-5555-5555|2016-11-16|
    6|userid6|passwd6|nick6|010-6666-6666|2016-11-16|
    sqlite> select * from tb_admin where id = 1;
    1|testid1|modified|nick1|010-1111-1111|2016-11-16|
    sqlite> .quit

댓글 없음:

댓글 쓰기