Django小技巧09: 创建修改密码视图

翻译整理自: simpleisbetterthancomplex.com

本篇讲述如何使用内置的PasswordChangeForm快速创建更改密码视图.

就此而言, 使用函数式视图更容易实现。 因为PasswordChangeForm不从ModelForm继承。并且其构造函数使用user参数.

以下实例,用于更改经过认证过后的用户密码的功能代码:

  • views.py

Python

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

message.success()message.error是可选的, 但最好让用户知道应用程序中他们应该知道的状态。

需要注意一点是, 保存表单后要调用update_session_auth_hash(), 否则身份验证会话将会失效,用户必须重新登录.

  • urls.py

Python

from django.conf.urls import url
from myproject.accounts import views

urlpatterns = [
    url(r'^password/$', views.change_password, name='change_password'),
]
  • change_password.html

Django/Jinja

<form method="post">
  {% csrf_token %}
  {{ form }}
  <button type="submit">Save changes</button>
</form>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

SpringBoot+Security 发送短信验证码在core模块下properties包中创建SmsCodeProperties在ValidateCodeProperties中new一个SmsCo

2926
来自专栏java小记

服务器ssh链接安全漏洞修复

对域名进行安全扫描时发现,域名的安全漏洞当中有一项是关于ssh的,名为SSH Weak Ciphers And Mac Algorithms Supported...

2280
来自专栏月牙寂

k8s源码分析-----kubectl(1)api.RESTMapper

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

4216
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Apache或Nginx加密Tomcat 8连接

Apache Tomcat是一个Web服务器和servlet容器,旨在为Java应用程序提供服务。Tomcat经常用于生产企业部署和较小的应用程序需求,既灵活又...

4313
来自专栏云计算教程系列

如何在Ubuntu 16.04上配置Redis复制

Redis是一个开源键值数据存储,使用内存存储模型和可选的磁盘写入来实现持久性。它具有事务,发布/订阅消息传递模式以及其他功能之间的自动故障转移功能。Redis...

2030
来自专栏黑泽君的专栏

linux下如何删除文件夹?

直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字 -r 就是向下递归,不管有多少级目录,一并删除; -f 就是直接强行删除,不作任何提示的意...

2511
来自专栏云计算教程系列

使用Apache或Nginx加密Tomcat流量

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Serv...

1716
来自专栏weixuqin 的专栏

Django 使用第三方服务发送电子邮件

1344
来自专栏武培轩的专栏

CentOS7.2下Nginx的使用

Nginx的启动 指定配置文件的方式启动 nginx -c /etc/nginx/nginx.conf 对于yum安装的nginx,使用systemctl命令启...

3175
来自专栏黑泽君的专栏

Ubuntu 16.04 LTS中没有.ssh文件,该如何解决呢?

sudo apt install openssh-server  或者  sudo apt-get install openssh-server

991

扫码关注云+社区

领取腾讯云代金券