JPC*_*JPC 37 django django-models django-forms
我正在尝试为我的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})
Run Code Online (Sandbox Code Playgroud)
表单 - 这是我创建用户的表单.或者至少是它的开始
class RegisterForm1(forms.ModelForm):
class Meta:
model = User
class RegisterForm2(forms.ModelForm):
class Meta:
model = UserProfile
Run Code Online (Sandbox Code Playgroud)
模型 - 这是我想要用户补充的UserProfile.
class UserProfile(models.Model):
user = models.OneToOneField(User)
phonenumber = PhoneNumberField()
Run Code Online (Sandbox Code Playgroud)
是否清楚我要做什么?我是在正确的轨道上
Veb*_*osa 31
制作两个模型表单,一个用于User模型,另一个用于UserProfile模型.
class UserForm(django.forms.ModelForm):
class Meta:
model = User
class UserProfileForm(django.forms.ModelForm):
class Meta:
model = UserProfile
exclude = ['user']
Run Code Online (Sandbox Code Playgroud)
给它们前缀并在同一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))
Run Code Online (Sandbox Code Playgroud)
在register.html:
<form method="POST" action="">
{% csrf_token %}
{{userform}}
{{userprofileform}}
<input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
hwj*_*wjp 29
我只是在研究这个,并发现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
)
Run Code Online (Sandbox Code Playgroud)
所以你唯一需要做的就是创建register.html ......
更多信息:http://www.obeythetestinggoat.com/using-the-built-in-views-and-forms-for-new-user-registration-in-django.html
| 归档时间: |
|
| 查看次数: |
42338 次 |
| 最近记录: |