当有人编辑他们的个人资料并使用Django将电子邮件更改为已经存在的电子邮件时,我如何给出错误?

2024-04-26 10:32:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想给出一个错误,一个带有电子邮件的帐户已经存在,但当用户编辑那里的配置文件时,它似乎不起作用。此外,如果电子邮件在提交表单时无效,它会给出一个值错误:“view accounts.views.edit_配置文件没有返回HttpResponse对象。它没有返回任何结果。”

代码如下:

{% extends 'base.html' %}
{% block head %}
    <link href="\static\accounts\css\forms.css" rel="stylesheet">
{% endblock %}
{% block body %}
  <h3 style="text-align: center">Edit profile</h3>
  <form id="login-form" method="post">

                {% csrf_token %}
            <input placeholder="Email" id="id_email" name="email"
           type="text" class="form-control" value="{{ user.email}}">
            <input placeholder="First name" id="id_first_name" name="first_name"
                       type="text" class="form-control" value="{{ user.first_name}} ">
            <input placeholder="Last name" id="id_last_name" name="last_name"
                       type="text" class="form-control" value="{{ user.last_name}}">
                {% if form.errors %}
                    {% for field in form %}
                        {% for error in field.errors %}
                            <p class=" label label-danger">
                        <div style="text-align: center">
                            {{ error }}
                        </div>
                    </p>
                        {% endfor %}
                    {% endfor %}
                    {% for error in form.non_field_errors %}
                        <div class="alert alert-danger">
                            <strong>{{ error }}</strong>
                        </div>
                    {% endfor %}
                {% endif %}
                <div style="text-align:center;">
                    <button type="submit" class="btn btn-outline-dark centerbutton">Save edits</button>
                </div>

            </form>
{% endblock %}

此外,下面是我用来检查注册表单中是否存在电子邮件的代码,但它似乎不适用于编辑配置文件表单:

def clean_email(self):
    email = self.cleaned_data.get('email')
    username = self.cleaned_data.get('username')
    if email and User.objects.filter(email=email).exclude(username=username).exists():
        raise forms.ValidationError(u'An account with this email address already exists')
    return email

以及我的编辑档案表:

class EditProfileForm(UserChangeForm):

    class Meta:
        model = User
        fields = (
            'email',
            'first_name',
            'last_name',
            'password'
        )

Tags: textnamedivformid编辑电子邮件email
1条回答
网友
1楼 · 发布于 2024-04-26 10:32:52

这是一个太大的问题,无法在这里回答,我不会为您发布任何代码。你需要阅读一些文档并自己动手

正在检查电子邮件是否已存在。。。您可能需要访问您的数据库或进行其他操作。强制数据库中的电子邮件列为unique是处理此问题的好方法。您可以捕获数据库错误并根据需要处理它们

至于有效的电子邮件验证,您需要使用Django的验证程序。其中一个验证器专门用于检查有效的电子邮件格式

https://docs.djangoproject.com/en/2.2/ref/validators/#emailvalidator

相关问题 更多 >