python - 更改用户电子邮件的 Django 方法不起作用

标签 python django forms

我正在尝试创建一个页面,用户可以在其中查看他们当前的电子邮件地址并根据需要进行更改。如果表单无效,我只是用一个非常简单的表单和一个非常简单的 HttpResponseRedirect 进行测试。但是,如果表单无效,我的电子邮件不会为用户更改,我的失败响应也不会更改。我不确定是什么原因造成的

表单.py:

    class ChangeEmail(forms.Form):
        email1 = forms.EmailField(label=u'Type new Email')
        email2 = forms.EmailField(label=u'Type Email again') 

views.py:

def change_email(request, username):
    if request.method == 'POST':
        user1 = User.objects.get(username=username)
        form1 = ChangeEmail(request.POST)
        if form1.is_valid():
            user1.email = form.cleaned_data['email1']
            form1.save()
            return HttpResponseRedirect('/register/success')
        else:
            return HttpResponseRedirect('/stupid')
    else:
        user = User.objects.get(username=username)
        email = user.email
        form = ChangeEmail()
        variables = RequestContext(request, {
            'form': form,
            'email': email
        })
        return render_to_response('registration/email.html', variables

提前感谢您的帮助。

编辑:

我映射到呈现表单的 URL 是 /user/testuser/email。我试图在字段中输入无效输入以获取错误消息,但是当我推送提交时,它会将我重定向回显示有关用户信息的 /user/testuser 页面。我的更改电子邮件模板如下:

{% extends "base.html" %}
{% block title %}Change Email{% endblock %}
{% block head %}Change Email{% endblock %}
{% block content %}
<p> Current Email: {{ email }} </p>
<form method="post" action=".">{% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Change Email" />
</form>
{% endblock %}

最佳答案

ChangeEmail 是一个普通的表单。这些没有 save 方法——只有 ModelForms 有。您从表单的 cleaned_data 正确设置了用户电子邮件 - 但您应该保存 user1 对象,而不是表单。

此外,最好不要在验证失败时重定向。省略第一个 else 子句,并将 variables/render_to_response 行向后移动一个缩进级别,表单将重新显示并显示任何错误。

关于python - 更改用户电子邮件的 Django 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8619025/

相关文章:

django - 测试 Django View 时出现断言错误

python - 改组 SQLAlchemy 结果?

python - 操作错误 : (1101, BLOB、TEXT、GEOMETRY 或 JSON 列 field_name 不能有默认值)

python - 在没有外部库的情况下在 Python 中编写 git 命令脚本

python - 基于单个随机整数的 Python 中的随机连续列表切片

python - 类似 index.get_loc 的函数,但用于多个值

javascript - 如何在antd中获取FormItem更改时的字段值

php - Symfony2 表单为什么我的表单返回警告 : json_encode(): recursion detected?

java - 提交之前进行 Spring 验证(Method.GET)

python - 来自 pandas dataframe 的信息矩阵