Django的密码操作

小编 2026-06-21 阅读:421 评论:0
一 关于密码操作的思维导图 二 修改密码内置函数源码 @sensitive_post_parameters() @csrf_protect @login_required @deprecate_c...

一 关于密码操作的思维导图

\"\"

二 修改密码内置函数源码

@sensitive_post_parameters()
@csrf_protect
@login_required
@deprecate_current_app
def password_change(request,
                    # 修改密码模板默认位置
                    template_name=\'registration/password_change_form.html\',
                    post_change_redirect=None,
                    password_change_form=PasswordChangeForm,
                    extra_context=None):
    if post_change_redirect is None:
        post_change_redirect = reverse(\'password_change_done\')
    else:
        # 根据传入参数重新定义重定向ULR
        post_change_redirect = resolve_url(post_change_redirect)
    if request.method == \"POST\":
        form = password_change_form(user=request.user, data=request.POST)
        if form.is_valid():
            form.save()
            # Updating the password logs out all other sessions for the user
            # except the current one.
            update_session_auth_hash(request, form.user)
            return HttpResponseRedirect(post_change_redirect)
    else:
        form = password_change_form(user=request.user)
    context = {
        \'form\': form,
        \'title\': _(\'Password change\'),
    }
    if extra_context is not None:
        context.update(extra_context)

    return TemplateResponse(request, template_name, context)


@login_required
@deprecate_current_app
def password_change_done(request,
                         # 密码修改完成模板默认位置
                         template_name=\'registration/password_change_done.html\',
                         extra_context=None):
    context = {
        \'title\': _(\'Password change successful\'),
    }
    if extra_context is not None:
        context.update(extra_context)

    return TemplateResponse(request, template_name, context)

三 修改URL

from django.conf.urls import url
from . import views
from django.contrib.auth import views as auth_views

urlpatterns = [
    # 自定义登录
    # url(r\'^login/$\', views.user_login, name=\'user_login\'),
    # django内置的登录
    url(r\"^login/$\", auth_views.login, name=\"user_login\"),
    url(r\"^new-login/$\", auth_views.login, {\"template_name\": \"account/login.html\"}),
    url(r\'^logout/$\', auth_views.logout, {\"template_name\": \"account/logout.html\"}, name=\'user_logout\'),
    url(r\'^register/$\', views.register, name=\"user_register\"),
    # 给password_change方法传入post_change_redirect参数
    url(r\'^password-change/$\', auth_views.password_change, {\"post_change_redirect\": \"/account/password-change-done\"},
        name=\'password_change\'),
    url(r\'^password-change-done/$\', auth_views.password_change_done, name=\'password_change_done\'),
]

四 新增模板

1 mysite/templates/registration/password_change_form.html

{% extends \"base.html\" %}
{% block title %}修改密码{% endblock %}
{% block content %}
<div class=\"row text-center vertical-middle-sm\">
    <h1>修改密码</h1>
    <p>为了安全起见,请输入您的旧密码,然后输入您的新密码两次,以便我们能够验证您输入的密码是否正确。</p>
    {% if form.new_password1.help_text %}
    <div class=\"text-left\" style=\"margin-left:400px\">
        <p>{{ form.new_password1.help_text|safe }}</p>
    </div>
    {% endif %}
    <form class=\"form-horizontal\" action=\".\" method=\"post\">{% csrf_token %}
        <div class=\"form-group\">
            <label class=\'col-md-5 control-label text-right\'>{{ form.old_password.label_tag }}</label>
            <div class=\"col-md-6 text-left\">{{ form.old_password }}</div>
        </div>

        <div class=\"form-group\">
            <label class=\'col-md-5 control-label text-right\'>{{ form.new_password1.label_tag }}</label>
            <div class=\"col-md-6 text-left\">{{ form.new_password1 }}</div>
        </div>

        <div class=\"form-group\">
            <label class=\"col-md-5 control-label text-right\">{{ form.new_password2.label_tag }}</label>
            <div class=\"col-md-6 text-left\">{{ form.new_password2 }}</div>
        </div>
        <input type=\"submit\" value=\"修改密码\" class=\"btn btn-primary btn-lg\" />
    </form>
</div>
{% endblock %}

2 mysite/templates/registration/password_change_done.html

{% extends \"base.html\" %}
{% block title %}密码修改完成{% endblock %}
{% block content %}
<div class=\"row text-center vertical-middle-sm\">
    <p>密码修改完成</p>
</div>
{% endblock %}

五 增加修改密码入口,修改mysite/templates/header.html

<!--模板中声明引入静态文件的标签,只有使用它,static标签才能使用-->
{% load staticfiles %}
<div class=\"container\">
    <nav class=\"navbar navbar-default\" role=\"navigation\">
        <div class=\"navbar-header\">
            <a class=\"navbar-brand\" href=\"https://blog.csdn.net/chengqiuming\"><img src=\"{% static \'/images/logo.png\' %}\" width=\"100px\"></a>
        </div>
        <div>
            <ul class=\"nav navbar-nav\" role=\"navigation\">
                <!--blog是urlpatterns中定义的namespace,blog_title是视图函数-->
                <li><a href=\"{% url \'blog:blog_title\' %}\">记录我的点点滴滴</a></li>
            </ul>
            <ul class=\"nav navbar-nav navbar-right\" style=\"margin-right:10px\">
                {% if user.is_authenticated %}
                <li>
                    <div class=\"dropdown\" style=\"margin-top:8px\">
                        <button class=\'btn btn-default dropdown-toggle\' type=\'button\' id=\'dropdownMenu\' data-toggle=\'dropdown\'>{{ user.username }}<span class=\'caret\'></span></button>
                        <ul class=\"dropdown-menu\">
                            <li><a href=\"{% url \'account:password_change\' %}\">修改密码</a></li>
                        </ul>
                    </div>
                </li>
                <li><a href=\"#\">{{ user.username }}</a></li>
                <li><a href=\"{% url \'account:user_logout\' %}\">退出</a></li>
                {% else %}
                <li><a href=\"{% url \'account:user_login\' %}\">登录</a></li>
                {% endif %}
            </ul>
        </div>
    </nav>
</div>

<script src=\"{% static \'js/jquery.js\'%}\"></script>
<script src=\"{% static \'js/bootstrap.js\' %}\"></script>

六 测试效果

\"\"

\"\"

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表