Django注册用户后出现密码格式无效/哈希算法未知问题求助
问题解决:Django注册用户后Admin显示密码格式无效
问题根源:直接通过ModelForm保存User模型的password字段时,会将明文密码存入数据库,但Django要求用户密码必须经过哈希处理,因此Admin面板会提示密码格式无效。
以下是两种可行的解决方案:
方案一:在表单类中处理密码哈希
修改forms.py,自定义密码输入控件并重写save方法,利用Django内置的密码哈希逻辑处理密码:
from django import forms from django.contrib.auth.models import User class SignupForm(forms.ModelForm): # 把密码字段设为密码输入框,提升前端体验 password = forms.CharField(widget=forms.PasswordInput) class Meta: model = User fields = ['username', 'email', 'password','first_name','last_name'] def save(self, commit=True): # 创建用户实例但暂不提交到数据库 user = super().save(commit=False) # 调用set_password自动哈希密码 user.set_password(self.cleaned_data["password"]) if commit: user.save() return user
views.py无需修改,保持原有逻辑即可。
方案二:在视图中处理密码哈希
如果不想修改表单类,也可以在views.py中拦截保存操作,手动处理密码哈希:
from django.shortcuts import render, redirect from .forms import SignupForm def signup(req): if req.method == 'POST': form = SignupForm(req.POST) if form.is_valid(): # 获取未保存的用户实例 user = form.save(commit=False) # 对密码进行哈希处理 user.set_password(form.cleaned_data['password']) user.save() return redirect('/') form = SignupForm() return render(req,'signup.html',{'form':form})
关键说明
两种方案的核心都是调用user.set_password()方法,该方法会自动使用Django默认的哈希算法(PBKDF2)处理明文密码,将哈希后的字符串存入数据库,Admin面板就能正常识别密码格式了。
内容的提问来源于stack exchange,提问作者user22508379
相关产品推荐
相关产品推荐

