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



我想给出一个错误,即带有电子邮件的帐户已经存在,但是当用户编辑那里的个人资料时,它似乎不起作用。此外,如果电子邮件在提交表单时无效,则会给出值错误:"视图accounts.views.edit_profile未返回 HttpResponse 对象。它返回了"无"。

这是代码:

{% extends 'base.html' %}
{% block head %}
<link href="staticaccountscssforms.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'
)

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

正在检查电子邮件是否已存在...您可能必须转到数据库或为此。强制在数据库中unique电子邮件列是处理此问题的好方法。您可以捕获数据库错误并根据需要处理它们。

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

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

最新更新