【问题标题】:Change user email in Django without using django-profiles在不使用 django-profiles 的情况下更改 Django 中的用户电子邮件
【发布时间】:2010-04-17 11:56:08
【问题描述】:

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

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

干杯。

【问题讨论】:

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


    【解决方案1】:

    电子邮件地址属于用户模型,因此无需使用配置文件让用户更新他们的电子邮件。从只有电子邮件作为字段的用户模型创建一个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 以将用户发送到另一个页面。在这种情况下,我正在从我的 urls 文件中查找一个命名的 url。

    【讨论】:

    • 对不起,如果我看起来要求很高,但您是否遇到过发送验证电子邮件的 sn-p。我很擅长 Python,但我还没有在 Django 中实现任何类似的东西。不过感谢您的帮助。
    • 试试 django-email-confirmation: github.com/jtauber/django-email-confirmation
    【解决方案2】:

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

    django-emailchange

    【讨论】:

      【解决方案3】:

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

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

      并得到一个字段错误。每个字段后必须有一个尾随逗号(或者这就是解决我的错误的原因):

      fields = ('email',) 
      

      解决了问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-14
        • 2012-01-26
        • 2014-01-01
        • 2019-11-23
        • 2013-05-22
        • 2020-12-03
        • 2011-12-29
        • 1970-01-01
        相关资源
        最近更新 更多