Python Django:密码如何存储在Django auth_用户表中

Python Django:密码如何存储在Django auth_用户表中,python,django,Python,Django,我正在定制django用户模块并添加一些额外的字段 我的模特看起来像 class Drinker(models.Model): user = models.OneToOneField(User) birthday = models.DateField() name = models.CharField(max_length = 100) def __unicode__(self): return self.name 这是我的注册视图 d

我正在定制django用户模块并添加一些额外的字段

我的模特看起来像

class Drinker(models.Model):
    user = models.OneToOneField(User)
    birthday = models.DateField()
    name     = models.CharField(max_length = 100)

    def __unicode__(self):
        return self.name
这是我的注册视图

def DrinkerRegistration(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/profile/')
    if request.method == "POST":
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = User.objects.create(username = form.cleaned_data['username'],email = form.cleaned_data['email'],password = form.cleaned_data['password'])
            user.save()
            drinker = Drinker(name = form.cleaned_data['name'],birthday = form.cleaned_data['birthday'],user=user)
            drinker.save()
            return HttpResponseRedirect('/profile/')
    else:
        form = RegistrationForm()
        context = {'form':form}
        return render_to_response('register.html',context,context_instance = RequestContext(request))
现在我的问题是,当用户在我的auth_user表中注册时,密码存储在计划文本中,即

Unknown password hashing algorithm '123'. Did you specify it in the PASSWORD_HASHERS setting?
登录时出错

但对于超级用户,密码在auth_user表中是SHA1格式的(我不确定),他们可以登录


请建议我如何在此散列密码字段?

不要使用
User.objects.create()
,使用-它将使用正确的算法散列提供的密码。

您应该让User.set\u password散列密码并以适当的格式存储,或者使用另一个答案中提到的适当的管理器功能

基本上,您从未要求Django对密码进行哈希运算,而是尝试将纯文本放入数据库中。这样做时,Django期望的格式(hasher-salt-hashed_-pass)没有得到满足,因此出现了错误

更好的是,应用程序的这些部分最好使用可重用的应用程序(如Django注册)来完成


然后,在用户注册(创建)后,您可以使用信号创建饮酒者配置文件

您需要使用helper函数,该函数将正确设置密码。

如果您尝试将合法输入直接存储在shell中的饮酒者模型中,会发生什么情况?它能工作吗?是的,谢谢,还有一个想法,我需要在设置中使用密码散列器吗?不,只要你没有与Django版本默认密码散列算法不同的现有用户数据库(当前版本-1.4-是PBKDF2)。如果您只是创建新用户,那么您可以使用默认设置。