繁体   English   中英

当有人在其中编辑个人资料并将电子邮件更改为使用django已经存在的电子邮件时,如何显示错误?

[英]How can I give an error when someone edits there profile and changes the email to an email that already exists using django?

我想给出一个错误,即带有电子邮件的帐户已经存在,但是当用户在该帐户中编辑个人资料时,它似乎不起作用。 另外,如果在提交表单时电子邮件无效,则会产生值错误:“视图account.views.edit_profile没有返回HttpResponse对象。而是返回了None。”

这是代码:

{% 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

和我的editprofileform:

class EditProfileForm(UserChangeForm):

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

这是一个太大的问题,无法在此处回答,我不会为您发布任何代码。 您将需要阅读一些文档并亲自进行操作。

检查电子邮件是否已经存在...您可能必须进入数据库或为此。 强制电子邮件列在数据库中是unique ,这是处理此问题的一种好方法。 您可以捕获数据库错误并根据需要进行处理。

至于有效的电子邮件验证,您将要使用Django的验证器。 验证器之一专门用于检查有效的电子邮件格式。

https://docs.djangoproject.com/zh-CN/2.2/ref/validators/#emailvalidator

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM