如何验证输入电子邮件是不是已存在于数据库中?

Posted

技术标签:

【中文标题】如何验证输入电子邮件是不是已存在于数据库中?【英文标题】:how to verify if input email is already exist in database?如何验证输入电子邮件是否已存在于数据库中? 【发布时间】:2021-11-03 02:50:57 【问题描述】:

我正在尝试开发的程序有问题。我有一个功能,可以在用户请求登录时向用户发送 OTP 代码。 OTP 代码应通过电子邮件发送给注册用户。问题是我的代码现在接受每封电子邮件,并且不验证数据库中的用户。我该怎么做?

更新了新代码! 我更新了我之前发布的代码,因为最初我在获取 OTP 时也遇到了问题。有人帮我指出我的错误,我纠正了他们。但是现有的电子邮件验证仍然没有运气。请帮忙!

这是我更新的脚本

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type='text/javascript'>

% block title %

% endblock %


% block content %
<h1>OTP Verification Page</h1>
<br>
<br>
<p>
    </script>
<div id="email_div" style="display: block;" >

    <label for="email">Email</label>
    <input type="text" name="email" id="email">
    <button  onclick="ajax_send_otp()">Send OTP</button>
</div>
<div id="verify_text_div"></div>
<div id="otp_div" style="display: none;" >

    <label for="email">OTP</label>
    <input type="text" name="otp" id="otp">
    <button  onclick="verify_otp()">Verify</button>

</div>
</p>

% endblock %

<script>
     var otp_from_back="";
     function ajax_send_otp()
        document.getElementById("email_div").style.display='none';
        email = document.getElementById("email");
      $.post("/send_otp",
          
              "email":email.value,
              "csrfmiddlewaretoken":"csrf_token"
          ,
          function(data, status)
              if(status=="success")
                  otp_from_back = data;
                  document.getElementById("otp_div").style.display='block';
                  
     
     );
     

    function verify_otp()
        var user_otp=document.getElementById("otp").value;
        if (user_otp==otp_from_back)
            document.getElementById("verify_text_div").style.color="green";
            document.getElementById("verify_text_div").innerhtml="OTP Verified";
            setTimeout(window.location.assign("http://127.0.0.1:8000/login/"),2000);
            document.getElementById("otp_div").style.display="none";
            document.getElementById("form_div").style.display="block";

        
        else
            document.getElementById("verify_text_div").style.color="red";
            document.getElementById("verify_text_div").innerHTML="Try Again!!";
        
    
 </script>

这是我更新的views.py文件

def otp_verification(request):
    return render(request, 'otp.html')


def generateOTP():
    digits = "0123456789"
    OTP = ""
    for i in range(4):
        OTP += digits[math.floor(random.random() * 10)]
    return OTP


def send_otp(request):
    email = request.GET.get("email")
    print(email)
    o = generateOTP()
    #email = EmailMessage(
     #   subject='Nithya FYP OTP',
      #  body= ('OTP request', o),
       # from_email=EMAIL_HOST_USER,
        #to=[email],
    #)
    #mail.send()
    print(o)
    return HttpResponse(o)

【问题讨论】:

【参考方案1】:

尝试验证您的电子邮件并检查该电子邮件是否存在于您的数据库中。

email = request.POST['email']
if validate_email(email) and User.objects.filter(email=email).exists():
...
else:
...

【讨论】:

你好@Ashin。我试图实现这一点,但仍然没有运气。我已经更新了我发布的初始代码,因为我纠正了一些错误。请看一下,如果您能提出进一步的解决方案,那就太好了。谢谢。 我有点困惑。验证电子邮件并在数据库中检查电子邮件是否存在于我提到的代码中。您在问题中提到“问题是我的代码现在接受每封电子邮件,并且它不验证数据库中的用户。我该怎么做?”。

以上是关于如何验证输入电子邮件是不是已存在于数据库中?的主要内容,如果未能解决你的问题,请参考以下文章

尝试验证数据库中已存在的电子邮件时出现问题

我正在尝试检查电子邮件是不是已存在于数据库中或不在数据库中,但我的代码会引发错误

我想验证给定的电子邮件地址是不是存在于贝宝中?我需要验证他们提供给我的贝宝电子邮件是不是存在?

Firebause身份验证:已发送但未在特殊电子邮件地址(如*@gmx.at)上收到的电子邮件

如何远程验证电子邮件或检查电子邮件是不是存在

检查返回的值是不是为空[重复]