教程集 www.jiaochengji.com
教程集 >  Python编程  >  Python 框架  >  正文 django登录后怎么修改密码

django登录后怎么修改密码

发布时间:2021-01-10   编辑:jiaochengji.com
教程集为您提供django登录后怎么修改密码等资源,欢迎您收藏本站,我们将为您提供最新的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教程是什么意思
django登录后怎么修改密码
12306网站登录密码忘记找回方法
为什么我学会了Django/Flask,还是不会做Web开发?
哔哩哔哩忘记密码找回方法
django怎么创建超级用户
django 项目怎么创建超级用户
php怎么不登录不能访问
django admin怎么查看用户名和密码
django怎么用

[关闭]
~ ~