【学习心得】Django框架自带的密码加解密方法

文章详细介绍了前端如何通过表单提交数据,包括原始密码的隐藏和密码输入框,以及后端Django中使用make_password进行密码加密和check_password进行密码验证的方法。着重展示了在学生注册和登录场景中的应用。
摘要由CSDN通过智能技术生成

一、前端代码

(1)保存原始密码(以学生注册为例)

<form action="{% url 'student:register' %}" method="post" id="form" >
    {% csrf_token %}
    <input type="text" name="stu_name" placeholder="输入学生姓名">
    <input type="text" name="stu_num" placeholder="输入学生学号">
    <input type="password" name="password" placeholder="输入密码">
    <button type="submit">注册</button>
</form>

(2)验证密码是否正确(以学生登录为例) 

<form action="{% url 'student:home' %}" method="post" id="form" >
    {% csrf_token %}
        
    <input type="text" name="stu_num" placeholder="学号">

    <input type="password" name="password" placeholder="输入密码">

    <button type="submit">登录</button>
</form>

二、后端代码

(1)Django自带的加密方法

① make_password()函数,用于对用户的原始密码进行安全哈希加密

        这个函数位于django.contrib.auth.hashers模块中,并且 Django 提供了多种哈希算法以增强安全性。

# 导入
from django.contrib.auth.hashers import make_password

# 简单使用
encrypt_pwd = make_password(request.POST.get('password'))

 ② 具体的一个views.py中的示例(以学生注册为例)

# views.py
# 导入
from django.contrib.auth.hashers import make_password, check_password

class RegisterView(View):
    """ 学生注册 """

    def get(self, request):
        """ get请求提供用户注册界面 """
        return render(request, 'register/student_register.html')

    def post(self, request):
        """ post请求实现学生注册业务逻辑 """
        # # 对密码加密
        encrypt_pwd = make_password(request.POST.get('password'))
        # 向数据库添加一条学生数据
        StudentModel.objects.create(stu_name=request.POST.get('stu_name'),
                                    password=encrypt_pwd,  # 开启密码加密
                                    stu_num=request.POST.get('stu_num'))

        result_data = {'code': 200}
        return JsonResponse(result_data)

(2)Django自带的解密方法

① check_password()函数,用于验证哈希加密的密码是否与原始密码的匹配

        当你需要验证用户登录时提供的密码是否正确时,就会使用这个函数。函数会自动识别存储密码使用的哈希算法和盐值,并进行相应的解密和对比操作。因此,即使存储的密码使用的是不同的哈希方式或者包含了额外的盐值信息,该函数也能正确地进行验证,无需开发者手动处理这些细节。

# 导入
from django.contrib.auth.hashers import check_password

# 前端接收到的密码
password = request.POST.get('password')

# # 验证用户输入的密码是否正确
if check_password(password, encrypt_pwd):
    print("密码正确")
else:
    print("密码错误")

 ② 具体的一个views.py中的示例(以学生登录为例)

class LoginView(View):
    """ 学生登录 """

    def get(self, request):
        """ get请求提供学生登录界面 """
        return render(request, 'login/student_login.html')

    def post(self, request):
        """ post请求实现学生登录业务逻辑 """
        stu_num = request.POST.get('stu_num')                               # 得到学号
        password = request.POST.get('password')                             # 根据原始密码

        # 根据学号找到相应的学生,并比较密码
        student = StudentModel.objects.get(stu_num=stu_num)
        encrypt_pwd = student.password

        if check_password(password, encrypt_pwd):   # 当密码正确时写入cookie          
            response = JsonResponse(result_data)
            return response  # 账号密码正确就进入系统
        else:
            result_data = {'code': 401}  # 错误的话返回401标识账号密码错误
            return response  #返回密码错误的响应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值