参考了网上的实现,最终实现的各代码如下:

 

changepwd.html模板文件:

DJANGO里让用户自助修改密码
{% extends "Prism/index.html" %}
{% load staticfiles %}

{% block title %} 修改密码 {% endblock %}

{% block heading %}

{% endblock %}

{% block content %}
   <div class="tm-middle">
        <div class="uk-container uk-container-center">
            <h3 class="tm-article-subtitle uk-margin-top">
                修改密码
            </h3>
           <hr class="uk-grid-divider">

            <div class="uk-panel uk-panel-box uk-container-center uk-width-1-3">
                <h3 class="uk-panel-title"><i class="uk-icon-user"></i>修改密码</h3>

                    <div class="uk-grid">
                    <div >
                         {% if changepwd_success %}
                            <div class="uk-alert">密码更改成功,请用新的密码登陆!</div>
                        {% endif%}
                    <form class="uk-form uk-form-horizontal uk-margin-top" action="" method="post">
                        {% csrf_token %}

                        <div class="uk-form-row">
                            <div class="uk-form-label">
                                {{ form.oldpassword.label_tag }}
                                {% for error in form.oldpassword.errors %}
                                    <span class="uk-badge uk-badge-danger">{{ error }}</span>
                                {% endfor %}
                                {% if oldpassword_is_wrong %}
                                    <span class="uk-badge uk-badge-danger">
                                        原密码不正确
                                    </span>
                                {% endif %}
                            </div>
                            <div class="uk-form-control">
                                {{ form.oldpassword }}
                            </div>
                        </div>
                        <div class="uk-form-row">
                            <div class="uk-form-label">
                                {{ form.newpassword1.label_tag }}
                                {% for error in form.newpassword1.errors %}
                                    <span class="uk-badge uk-badge-danger">{{ error }}</span>
                                {% endfor %}
                            </div>
                            <div class="uk-form-control">
                                {{ form.newpassword1 }}
                            </div>
                        </div>
                        <div class="uk-form-row">
                            <div class="uk-form-label">
                                {{ form.newpassword2.label_tag }}
                                {% for error in form.newpassword2.errors %}
                                    <span class="uk-badge uk-badge-danger">{{ error }}</span>
                                {% endfor %}
                            </div>
                            <div class="uk-form-control">
                                {{ form.newpassword2 }}
                            </div>
                        </div>
                        <div class="uk-form-row">
                            <input type="submit" value="确认修改" class="uk-button uk-button-primary">
                        </div>
                    </form>
                    </div>
                </div>
            </div>

        </div>
   </div>
{% endblock %}
DJANGO里让用户自助修改密码

Forms.py表单文件:

DJANGO里让用户自助修改密码
class ChangepwdForm(forms.Form):
    oldpassword = forms.CharField(
        required=True,
        label=u"原密码",
        error_messages={'required': u'请输入原密码'},
        widget=forms.PasswordInput(
            attrs={
                'placeholder': u"原密码",
                'rows': 1,
            }
        ),
    )
    newpassword1 = forms.CharField(
        required=True,
        label=u"新密码",
        error_messages={'required': u'请输入新密码'},
        widget=forms.PasswordInput(
            attrs={
                'placeholder': u"新密码",
                'rows': 1,
            }
        ),
    )
    newpassword2 = forms.CharField(
        required=True,
        label=u"确认密码",
        error_messages={'required': u'请再次输入新密码'},
        widget=forms.PasswordInput(
            attrs={
                'placeholder': u"确认密码",
                'rows': 1,
            }
        ),
    )

    def clean(self):
        if not self.is_valid():
            raise forms.ValidationError(u"所有项都为必填项")
        elif self.cleaned_data['newpassword1'] <> self.cleaned_data['newpassword2']:
            raise forms.ValidationError(u"两次输入的新密码不一样")
        else:
            cleaned_data = super(ChangepwdForm, self).clean()
        return cleaned_data
DJANGO里让用户自助修改密码

VIEWS.PY文件:

DJANGO里让用户自助修改密码
def changepwd(request):
    if request.method == 'GET':
        form = ChangepwdForm()
        return render_to_response('changepwd.html', RequestContext(request, {'form': form, }))
    else:
        form = ChangepwdForm(request.POST)
        if form.is_valid():
            username = request.user.username
            oldpassword = request.POST.get('oldpassword', '')
            user = authenticate(username=username, password=oldpassword)
            if user is not None and user.is_active:
                newpassword = request.POST.get('newpassword1', '')
                user.set_password(newpassword)
                user.save()
                return render_to_response('changepwd.html', RequestContext(request, {'changepwd_success': True}))
            else:
                return render_to_response('changepwd.html', RequestContext(request, {'form': form, 'oldpassword_is_wrong': True}))
        else:
            return render_to_response('changepwd.html', RequestContext(request, {'form': form, }))
DJANGO里让用户自助修改密码

urls.py

    url(r'^accounts/changepwd/$', login_required(changepwd), name="changepwd"),
    url(r'^accounts/changeemail/$', login_required(changeemail), name="changeemail"),

最后就当当当当~~~~~~~~

DJANGO里让用户自助修改密码

相关文章: