Django中自动修改密码无法保存,求助解决方案
Django用户密码无法保存的排查与解决
先看你代码里的几个关键问题,逐个修正:
变量未定义/拼写错误:你直接使用了
datax但没给它赋值,代码里只有data = form.cleaned_data,如果是要从表单拿邮箱,得补上datax = data["email"](前提是表单里的邮箱字段名是email)。datax未定义的话,要么代码报错中断,要么拿不到正确的用户对象,密码自然存不进去。未处理用户不存在的异常:
User.objects.get(email=datax)如果找不到对应用户会抛出User.DoesNotExist,直接导致后续保存代码执行失败。可以用get_object_or_404快速处理,或者加try-except块捕获异常:from django.shortcuts import get_object_or_404 # 替换原获取用户的代码 us = get_object_or_404(User, email=datax)或者手动捕获异常:
try: us = User.objects.get(email=datax) except User.DoesNotExist: # 这里加用户不存在的处理逻辑,比如返回错误提示 pass确认表单字段有效性:检查表单里是否确实有
password字段,打印data看看cleaned_data里的键值对是否正确,确保data["password"]能拿到有效的新密码。
修正后的完整示例:
data = form.cleaned_data passw = data["password"] # 补充邮箱字段的获取,根据你表单的实际字段名调整 datax = data["email"] print(datax) try: us = User.objects.get(email=datax) us.set_password(passw) us.save() print("密码已成功更新") except User.DoesNotExist: print("未找到该邮箱对应的用户")
set_password()会自动哈希密码,只要前面的用户对象正确、字段取值无误,save()就能把修改同步到数据库。
内容的提问来源于stack exchange,提问作者MohammadAminGHS
相关产品推荐
相关产品推荐

