我正在尝试为我的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()
是否清楚我要做什么?我是在正确的轨道上
制作两个模型表单,一个用于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
:
我只是在研究这个,并发现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 ......
更多信息:http://www.obeythetestinggoat.com/using-the-built-in-views-and-forms-for-new-user-registration-in-django.html