一、前端代码
(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 #返回密码错误的响应