在不使用django-profiles的情况下更改Django中的用户电子邮件

时间:2010-04-17 11:56:08

标签: django django-models django-forms django-views django-profiles

在我的Django应用程序中,我希望用户能够更改电子邮件地址。我已经看到StackOverflow的解决方案将人们指向django-profiles。不幸的是,我不想使用完整的配置文件模块来完成更改用户电子邮件的微小功能。有没有人看到过这个在任通过发送确认电子邮件的电子邮件地址验证过程是此方案中的必备条件。

我花了很多时间试图找到一个有效但无济于事的解决方案。

干杯。

3 个答案:

答案 0 :(得分:2)

电子邮件地址属于用户模型,因此无需使用配置文件让用户更新其电子邮件。从仅包含电子邮件作为字段的用户模型创建model form,然后在您的视图中提供该表单并对其进行处理。类似的东西:

class UserInfoForm(forms.ModelForm):
    email = forms.EmailField(required=True)
    class Meta:
        model = User
        fields = ('email',)

def my_view(request):
    if request.POST:
        user_form = UserInfoForm(request.POST, instance=request.user)
        if user_form.is_valid():
            user_form.save()
            return HttpResponseRedirect(reverse('form_success_screen'))
    else:
        user_form = UserInfoForm()
    return render_to_response('my-template.html', {'user_form': user_form}, context_instance=RequestContext(request))

请注意,如果表单成功,我将返回一个HttpResponseRedirect以将用户发送到另一个页面。在这种情况下,我正在从我的网址文件中查找一个名为url的网址。

答案 1 :(得分:1)

似乎有人写了自己的。它允许用户更改其电子邮件地址并发送确认电子邮件。

django-emailchange

答案 2 :(得分:0)

不太确定这是否是Django 1.4的新要求,但我尝试过Tom的建议:

class UserInfoForm(forms.ModelForm):
    email = forms.EmailField(required=True)
    class Meta:
        model = User
        fields = ('email')

并且出现了字段错误。你必须在每个字段后面都有一个逗号(或者是解决了我错误的原因):

fields = ('email',) 

解决了问题