我正在尝试为我的Django应用实现用户注册。我读过的那本书提到了UserCreationForm,但我需要的不仅仅是名称,密码和电子邮件地址。我可以实现自己的用户对象并使用ModelForm,但后来我失去了一些django方便的身份验证。最后,我读了一些关于UserProfiles的内容,这些内容补充了我猜的用户,所以我想我需要所有这些东西的组合。这是我到目前为止所拥有的。
查看 - 这很简单。我想在这里做的就是创建我的表单并保存用户
def main(request):
rform1 = forms.RegisterForm1()
rform2 = forms.RegisterForm2()
return render_to_response("authentication/index.html", {'form1': rform1, 'form2':rform2})
def register(request):
if request.method == 'POST':
rform1 = forms.RegisterForm1(request.POST)
rform2 = forms.RegisterForm2(request.POST)
if rform1.is_valid() and rform2.is_valid():
new_user = rform1.save()
return HttpResponseRedirect("/register-success/")
return render_to_response("authentication/index.html", {'form1': rform1,'form2':rform2})
表单 - 这是我创建用户的表单。或至少开始
class RegisterForm1(forms.ModelForm):
class Meta:
model = User
class RegisterForm2(forms.ModelForm):
class Meta:
model = UserProfile
模型 - 这是我的UserProfile,我想补充用户。
class UserProfile(models.Model):
user = models.OneToOneField(User)
phonenumber = PhoneNumberField()
我正在尝试做什么?我是在正确的轨道上
答案 0 :(得分:31)
制作两个模型表单,一个用于User
模型,另一个用于UserProfile
模型。
class UserForm(django.forms.ModelForm):
class Meta:
model = User
class UserProfileForm(django.forms.ModelForm):
class Meta:
model = UserProfile
exclude = ['user']
为它们添加前缀并在同一HTML表单元素中一起显示它们。在视图中,在保存用户和UserProfile之前检查两者是否有效。
def register(request):
if request.method == 'POST':
uf = UserForm(request.POST, prefix='user')
upf = UserProfileForm(request.POST, prefix='userprofile')
if uf.is_valid() * upf.is_valid():
user = uf.save()
userprofile = upf.save(commit=False)
userprofile.user = user
userprofile.save()
return django.http.HttpResponseRedirect(…something…)
else:
uf = UserForm(prefix='user')
upf = UserProfileForm(prefix='userprofile')
return django.shortcuts.render_to_response('register.html',
dict(userform=uf,
userprofileform=upf),
context_instance=django.template.RequestContext(request))
在register.html
:
<form method="POST" action="">
{% csrf_token %}
{{userform}}
{{userprofileform}}
<input type="submit">
</form>
答案 1 :(得分:28)
我只是在研究这个问题,并发现Django有一个非常简单的内置新用户创建表单,如果你想要简单注册就可以使用 - 没有选项,例如保存电子邮件地址和验证它,所以它不适用于OP的用例,但我发布在这里,以防其他人像我一样遇到这个问题,并且正在寻找简单的东西。
如果您只是希望人们能够选择用户名和密码,那么内置插件将为您完成所有操作,包括验证并保存新用户:
from django.views.generic.edit import CreateView
from django.contrib.auth.forms import UserCreationForm
urlpatterns = patterns('',
url('^register/', CreateView.as_view(
template_name='register.html',
form_class=UserCreationForm,
success_url='/'
)),
url('^accounts/', include('django.contrib.auth.urls')),
# rest of your URLs as normal
)
所以你唯一需要做的就是创建 register.html ...