最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • django登录后怎么修改密码

    正文概述    2020-03-05   324

    django登录后怎么修改密码

    Django内置的应用非常多,对于修改用户密码,我们可以用自带的方法去修改,也可以通过自己写对应的方法去修改.这里来分别将两种方法罗列出来.

    一.首先是用django自带的修改用户密码

    相关的源码被保存在django.contrib.auth的views中.同样的,django自带的login和logout函数也在这里.其中有一个定义的password_change方法和password_change_done方法,一个是我们修改密码的方法,一个是我们修改完成后处理的方法.

    由于django已经给我们写好了,我们不需要在views中再配置,直接定义urls.如下:

    from django.contrib.auth import views as auth_views
    urlpatterns = [
    	url(r'password-change/$', auth_views.password_change, {
            'template_name': "account/password_change_form.html",
            'post_change_redirect': '/account/password-change-done'}, name='password_change'), 
        url(r'password-change-done/$', auth_views.password_change_done, {
            'template_name': "account/password_change_done.html"}, name='password_change_done'),
    ]

    因为自带的password_change的模板对应于registration/password_change_form.html,我们在settings里已经讲templates路径改为自己设置的路径,所以这里我们直接将自己写好的模板通过参数形式传入.通过看源码可只如果我们没有给定跳转路径,则会自动跳转到password_change_done,但是我们写的password_change_done是保存在自己创建的用户管理app里,路径前面多了个account,因此,我们需要自己将这个跳转路径传入.

    同理,password_change_done也是一样的,只不过它的模板引用名称为password_change_done.html

    二.其次是自己设置一个用户修改函数

    刚学的小白要注意,不能直接从前段表单里获取密码的输入值,然后与数据库中存放的值做比较.因为数据库中的密码是经过算法加密后的哈希值,是密文,无法直接做比较.通过学习django官方文档可以知道,django自带的有关密码的验证函数.

    在django.contrib.auth.hashers模块提供一组函数来创建和验证散列密码,比较好的是可以独立于User模型来使用,也就是说我们不必绑定用户对象,可以直接拿来使用.其中有三个函数,方法及介绍如下:

    check_password(password, encoded)
    如果要通过将纯文本密码与数据库中的散列密码进行比较来手动验证用户,请使用方便功能 check_password()。它需要两个参数:
    要检查的纯文本密码,以及数据库中要检查的用户 password 字段的完整值,如果它们匹配,则返回 True,否则返回 False。
    make_password(password, salt=None, hasher='default')
    以此应用程序使用的格式创建散列密码。它需要一个强制参数:明文密码。或者,如果您不想使用默认值(PASSWORD_HASHERS 设置的
    第一个条目),您可以提供盐和散列算法来使用。有关每个哈希算法的算法名称,请参见 包括哈希。如果密码参数是 None,则返回
    不可用的密码(check_password() 不会接受的密码)。
    is_password_usable(encoded_password)
    检查给定的字符串是否是具有针对 check_password() 验证的机会的哈希密码。

    这里我们可以用到check_password,以及make_password,介绍的很清楚了.我将我简单的代码放下:

    def change_pwd(request):
        if request.method == 'POST':
            form = ChangepwdForm(request.POST)
            if form.is_valid():
                user = User.objects.get(username=request.POST.get('username'))
                if user:
                    if check_password(request.POST.get('password'), user.password):
                        user.password = make_password(request.POST.get('new_password'))
                        user.save()
                        return ...
                    return ...
                return ...
            else:
                return ...
        form = ChangepwdForm()
        return render(request, 'account/changepwd.html', {'form': form})

    起源地下载网 » django登录后怎么修改密码

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元