解释内置的用户模型和UserCreationForm

时间:2018-08-10 21:02:18

标签: django django-models django-forms

我知道django内置了一个User模型,下面的代码可以正常工作,并且可以将用户正确地保存到数据库中,我只是不明白为什么为什么:< / p>

from django.shortcuts import render
from django.http import HttpResponse
from .forms import UserCreationForm

def index(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            return HttpResponse('Saved')
    else:
        form = UserCreationForm()
    return render(request, 'core/index.html', {'form':form})

form = UserCreationForm(request.POST)行在说什么? (request.POST)是提交表单的内容吗? user = form.save()如何将用户保存到数据库?我以为django必须将该变量命名为user才能将其识别为User对象,但事实并非如此,因为我将语句更改为test = form.save() 并且仍然将User保存到我的数据库中。

2 个答案:

答案 0 :(得分:0)

这是Django文档:

[docs]class UserCreationForm(forms.ModelForm):
"""
A form that creates a user, with no privileges, from the given username and
password.
"""
error_messages = {
    'password_mismatch': _("The two password fields didn't match."),
}
password1 = forms.CharField(label=_("Password"),
    widget=forms.PasswordInput)
password2 = forms.CharField(label=_("Password confirmation"),
    widget=forms.PasswordInput,
    help_text=_("Enter the same password as above, for verification."))

class Meta:
    model = User
    fields = ("username",)

def clean_password2(self):
    password1 = self.cleaned_data.get("password1")
    password2 = self.cleaned_data.get("password2")
    if password1 and password2 and password1 != password2:
        raise forms.ValidationError(
            self.error_messages['password_mismatch'],
            code='password_mismatch',
        )
    return password2

def save(self, commit=True):
    user = super(UserCreationForm, self).save(commit=False)
    user.set_password(self.cleaned_data["password1"])
    if commit:
        user.save()
    return user

您可以看到“保存”方法,它使用带有super的用户模型。结果UserCreationForm使用用户模型,可以保存在用户数据库中

答案 1 :(得分:0)

  1. 行格式= UserCreationForm(request.POST)实际上是在谈论自己。它将通过您的表单传递的数据发布到变量表单中
  2. “请求”对象是一个HttpRequest对象,它承载有关请求的元数据(例如,在我们的例子中,我们有一个post请求,而请求对象则承载用户数据)。检查this了解更多详细信息。
  3. 是的,user = form.save()将一个User实例保存在数据库中。 UserCreationForm有一个名为save()的函数,在这里我们只是调用该函数。
  4. 变量的名称与它无关,因为在UserCreationForm的定义中,模型已被定义为User。因此,它已经认识到它是用户模型。

我这是您应该阅读UserCreationForm代码以使您脑海中清楚的事情。