You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:53:17