当前位置: 首页 > 面试题库 >

Django 1.9检查电子邮件是否已经存在

岑和风
2023-03-14
问题内容

我的网站已设置为没有用户名(或者说user.username =
user.email)。如果用户尝试输入数据库中已经存在的用户名,则Django会显示一条错误消息,但是由于我没有使用用户名进行注册,所以我不知道该怎么做。

就像已经有默认设置一样,我不想重新加载页面以查找是否已经有与用户关联的电子邮件地址。我的猜测是使用Ajax,但我不知道该怎么做。Ive看过其他帖子,但最近似乎没有任何内容。

如何检查电子邮件地址是否已经存在,如果存在,给用户输入错误消息以输入新的电子邮件地址?

models.py:

class MyUsers(models.Model):
    user = models.OneToOneField(User)
    first_name = models.CharField(max_length=100, blank=True)
    last_name = models.CharField(max_length=100, blank=True)
    email = models.EmailField(max_length=100, blank=True, unique=True)
    company = models.CharField(max_length=100, blank=True, null=True)
    website = models.URLField(max_length=100, blank=True, null=True)
    phone_number = models.CharField(max_length=100, blank=True, null=True)

    def __str__(self):
        return self.user.username

forms.py:

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('email',)


class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('first_name', 'last_name', 'company', 'website', 'phone_number')

views.py:

def index(request):
    registered = False

    if request.method == 'POST':
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileForm(data=request.POST)

        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save()
            user.set_password(user.password)
            user.password = ""
            user.username = user.email
            user.save()

            profile = profile_form.save(commit=False)
            profile.user = user
            profile.email = user.email
            profile.save()

            user.first_name = profile.first_name
            user.last_name = profile.last_name
            user.save()

            registered = True
            return HttpResponseRedirect(reverse('registration'))
        else:
            print user_form.errors, profile_form.errors
    else:
        user_form = UserForm()
        profile_form = UserProfileForm1()

    context = {'user_form': user_form, 'profile_form': profile_form, 'registered': registered}
    return render(request, 'mysite/register.html', context)

register.html:

{% extends 'mysite/base.html' %}
{% load staticfiles %}

{% block title_block %}
    Register
{% endblock %}

{% block head_block %}
{% endblock %}

{% block body_block %}    
    <form id="user_form" method="post" action="/mysite/" enctype="multipart/form-data">
        {% csrf_token %}
        {{ user_form.as_p }}
        {{ profile_form.as_p }}

        <input type="submit" name="submit" value="Register" />
    </form>
{% endblock %}

问题答案:

您可以覆盖上的clean_<INSERT_FIELD_HERE>()方法UserForm来检查这种特殊情况。看起来像这样:

forms.py:

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('email',)

    def clean_email(self):
        # Get the email
        email = self.cleaned_data.get('email')

        # Check to see if any users already exist with this email as a username.
        try:
            match = User.objects.get(email=email)
        except User.DoesNotExist:
            # Unable to find a user, this is fine
            return email

        # A user was found with this as a username, raise an error.
        raise forms.ValidationError('This email address is already in use.')

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('first_name', 'last_name', 'company', 'website', 'phone_number')

您可以在有关表单的Django文档中阅读有关清理表单中特定字段的更多信息。

就是说,我认为您应该考虑创建自定义用户模型,而不是将您的User Profile类视为的包装器User



 类似资料:
  • 问题内容: 我正在尝试检查是否已使用PDO注册了电子邮件,但是到目前为止,我还没有找到一种很好的方法来进行此操作。到目前为止,这就是我所拥有的。如果有帮助,则连接变量为“ $ con”。另外,我是否需要在同一文档中使用连接变量,还是在包含的文档中使用它? 问题答案: 尝试此操作,使用您的连接凭据填写DB_NAME,DB_USER_NAME和DB_USER_PASS,或者如果所有内容都正确地设置为P

  • 我已经为产品创建了更新路线。有些字段必须是唯一的。 当创建一个产品时,我会像这样检查 但我不确定在更新产品时如何检查是否已经使用电子邮件。 如果我使用上面的代码,它将为我们正在更新的同一个对象返回true。 有没有排除对象的方法?我查看了和,但不确定在这种情况下如何使用它们。 有什么建议吗?

  • 问题内容: 我需要帮助检查数据库中是否存在行。就我而言,该行包含一个电子邮件地址。我得到结果: 这是我当前正在使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的情况下,检查MySQL中是否存在电子邮件)? 问题答案: 以下是经过尝试,测试和证明的检查行是否存在的方法。 (其中一些我自己使用,或者过去使用过)。 编辑: 我在使用两次的语法中犯了一个先前的错误。请查阅修订版本。 即:

  • 我需要帮助检查数据库中是否存在行。在我的例子中,该行包含一个电子邮件地址。我得到的结果是: 这是我目前使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的例子中,检查MySQL中是否存在电子邮件)?

  • 如果文档ID不存在,我想将数据添加到firestore数据库中。到目前为止,我一直在尝试: 目标是检查数据库中的所有文档ID,并查看与“varuId”变量的任何匹配。如果匹配,则不会创建文档。如果不匹配,它应该创建一个新文档

  • 问题内容: 我碰到过此PHP代码,无需发送电子邮件即可使用SMTP检查电子邮件地址。 有没有人尝试过类似的方法或对您有用?您能告诉客户/用户输入的电子邮件是否正确并且存在吗? 问题答案: 有时 可以使用两种方法来确定收件人是否确实存在: 您可以连接到服务器,然后发出命令。很少有服务器支持此命令,但正是为此目的而设计的。如果服务器以2.0.0 DSN响应,则该用户存在。 您可以发出,然后查看邮件是否