当前位置:  开发笔记 > 编程语言 > 正文

在Django中注册用户的最佳方式

如何解决《在Django中注册用户的最佳方式》经验,为你挑选了2个好方法。

我正在尝试为我的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()

是否清楚我要做什么?我是在正确的轨道上



1> Vebjorn Ljos..:

制作两个模型表单,一个用于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:

{% csrf_token %} {{userform}} {{userprofileform}}



2> hwjp..:

我只是在研究这个,并发现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

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有