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

changepwd.html模板文件:

{% 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 %}

Forms.py表单文件:

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

VIEWS.PY文件:

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, }))

urls.py

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

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

DJANGO里让用户自助修改密码的更多相关文章

  1. DJANGO里让用户自助修改邮箱地址

    因为在部署过程中会涉及用户邮件发送,如果有的同事不愿意收到太多邮件,则可以自己定义为不存在的邮箱. 我们在注册的时候,也不会写用户邮箱地址,那么他们也可以在这里自己更改. changeemail.ht ...

  2. Ubuntu Server忘记密码后,单用户模式修改密码进去不了桌面的无奈

    俗话说的好,好记性不如烂笔头.有时候脑子一热,就想不起来之前设置过的密码是什么了.我可怜地忘了我的Ubuntu Server的密码,回忆了n种组合都不行,于是只能进行单用户模式的修改密码了. 以下的操 ...

  3. linux 查看用户上次修改密码的日期【转】

    1.找到以下文件: cat /etc/shadow 第三段字符就是最近一次密码修改的天数,此数字是距离1970年1月1日的天数.   2.用以下命令计算: date -u -d "1970- ...

  4. linux添加用户、修改密码

    1.在root下添加用户用 adduser 命令 # 添加用户 admin [root@flm] #sudo adduser admin 2.添加用户登录密码 # 为用户 admin 修改密码 [ro ...

  5. 记一次CentOS7进单用户模式修改密码的失败经历(faild to load SELinux policy freezing)

    背景:Cent SO7.4root用户密码忘记,根据https://www.linuxidc.com/Linux/2016-08/134034.htm提供的放法修改完密码之后系统启动后一直停留在转圈的 ...

  6. Ubuntu 18.04 进入单用户模式修改密码

    Ubuntu 18.04 使用单用户模式修改密码 操作步骤 启动Ubuntu 18.04 ,长按 Shift 键(有的可能按 Esc 键:绝大多数按 Shift 键)进入单用户视图,选中 Ubuntu ...

  7. Linux目录终章,单用户模式修改密码、环境变量、第三方软件安装

    目录 今日内容概要 内容详细 解析映射文件 磁盘挂载文件 开机加载脚本 系统启动级别 使用单用户模式修改密码 变量加载文件 登录提示信息 第三方软件安装目录(编译安装目录) 系统日志目录 保存系统运行 ...

  8. linux单用户模式修改密码与系统启动级别

    目录 一:系统启动级别 二:单用户模式修改密码 一:系统启动级别 系统启动级别: 0 关机 1 单用户模式(无法通过xshell方式使用)(虚拟机操作)(系统云服务商后台) 2 多用户无网络模式 3 ...

  9. 5、Linux基础--etc(文件系统)、启动模式、单用户模式修改密码、安装目录、日志目录、状态目录

    笔记 1.晨考 1.存放系统配置文件的目录 /etc 2.存储系统实时运行状态的目录 /proc 3.存储系统硬件接口的目录 /dev 4.查看系统挂载情况的命令 df -h 5.系统网卡文件路径 / ...

随机推荐

  1. js软键盘

    <<!DOCTYPE html><html><head>  <title></title></head><body& ...

  2. 认识JS的基础对象,定义对象的方法

    JS的基础对象: 1.window       //窗口对象 2.document   //文档对象 3.document.documentElement      //html对象 4.docume ...

  3. HDU 1054 Hungary

    Strategic Game Problem Description Bob enjoys playing computer games, especially strategic games, bu ...

  4. RFC1867 HTTP file upload

    RFC1867 HTTP file upload RFC1867 is the standard definition of that "Browse..." button tha ...

  5. Android媒体解码MediaCodec MediaExtractor学习

    Android提供了MediaPlayer播放器播放媒体文件,其实MediaPlyer只是对Android Media包下的MediaCodec和MediaExtractor进行了包装,方便使用.但是 ...

  6. word中选择嵌入式时图片被遮住,只显示小部分的解决方法

    选中图片,点击如下 选择  行距选项 将行距改为单位行距即可.

  7. 图像局部显著性—点特征(GLOH)

    基于古老的Marr视觉理论,视觉识别和场景重建的基础即第一阶段为局部显著性探测.探测到的主要特征为直觉上可刺激底层视觉的局部显著性--特征点.特征线.特征块. 相关介绍:局部特征显著性-点特征(SIF ...

  8. SQL基本概述

    DBMS的种类: 层次数据库HDB 面向对象数据库OODB XML数据库XMLDB 键值存储系统KVS 关系数据库RDB RDBMS(关系数据库管理系统),主要5有种: Oracle Database ...

  9. uni-app的专属强大自适应单位upx,但是这个这是一个大坑,不能动态赋值解决办法

    uni-app 使用 upx 作为默认尺寸单位, upx 是相对于基准宽度的单位,可以根据屏幕宽度进行自适应.uni-app 规定屏幕基准宽度750upx. 开发者可以通过设计稿基准宽度计算页面元素 ...

  10. 使用.Net Core RT 标准动态库

    这个文档可以引导你如何通过CoreRT生成一个原生标准的系统动态库让其他编程语言调用. CoreRT 可以构建静态库, 这些库可以在编译时链接或者也可以构建运行时所需的共享库, 创建一个支持CoreR ...