Django中电子邮件验证的实现

Posted

技术标签:

【中文标题】Django中电子邮件验证的实现【英文标题】:Implementation of e-mail verification in Django 【发布时间】:2011-07-26 14:28:45 【问题描述】:

我创建了一个 Django 应用程序。我在应用程序中有一个注册页面(简单的 html 表单),注册时它有一个电子邮件字段。现在我想在用户注册时实现电子邮件验证。就像向用户发送电子邮件(在注册表中给出的电子邮件)。通过谷歌搜索,我发现有一个 Django 方法 'send_email' 可用于上述情况。但是作为一个 Django 新手,我无法理解为此而创建的更改和功能。有人可以帮助我做到这一点或指出一些可以帮助我的教程。或者除了Django的'send_email'方法之外还有其他方法可以实现这一点。任何帮助将不胜感激

我将在此处粘贴我目前的代码。

VIEWS.PY

def registrationForm(request):
    if request.method == "POST":  
        firstName = request.POST.get("firstName")
        lastName = request.POST.get("lastName")
        email = request.POST.get("email")
        password = request.POST.get("password")
        sex = request.POST.get("sex")
        birthday = request.POST.get("birthday")
        print request.POST.get("sex")
        UniversityDetails(firstName=firstName,lastName=lastName,email=email,password=password,sex=sex,birthday=birthday).save()
        return render_to_response('registrationForm.html')
    return render_to_response("registrationForm.html")

def login(request):
    if request.POST:            
        email=request.POST.get("username")
        password = request.POST.get("password")
        print email
        print password
        user = UniversityDetails.objects.filter(email=email,password=password)
        print user
        if(not user):
            return render_to_response("registrationForm.html",'invalid': True )
        else:
            return render_to_response("login.html")
    return render_to_response("registrationForm.html")

registrationForm.html

<html>
<head>
  <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>

  <script>
  $(document).ready(function() 
    $("#datepicker").datepicker();
  );
  </script>
</head>

<title>
Login/Registration Page
</title>

    <script type="text/javascript">

   //Created / Generates the captcha function    
    function DrawCaptcha()
    
        var a = Math.ceil(Math.random() * 10)+ '';
        var b = Math.ceil(Math.random() * 10)+ '';       
        var c = Math.ceil(Math.random() * 10)+ '';  
        var d = Math.ceil(Math.random() * 10)+ '';  
        var e = Math.ceil(Math.random() * 10)+ '';  
        var f = Math.ceil(Math.random() * 10)+ '';  
        var g = Math.ceil(Math.random() * 10)+ '';  
        var code = a + ' ' + b + ' ' + ' ' + c + ' ' + d + ' ' + e + ' '+ f + ' ' + g;
        document.getElementById("txtCaptcha").value = code
    

    // Validate the Entered input aganist the generated security code function   
    function ValidCaptcha()
        var str1 = removeSpaces(document.getElementById('txtCaptcha').value);
        var str2 = removeSpaces(document.getElementById('txtInput').value);
        if (str1 == str2) return true;        
        return false;

    

    // Remove the spaces from the entered and generated code
    function removeSpaces(string)
    
        return string.split(' ').join('');
    

    </script>
<body onload="DrawCaptcha();">

<div align="center">
<form name="userInputForm" method="POST" id="myFormid" action="http://10.1.0.90:8080/login/">
<div style="float:left;width:100%;">
  <p style="float:left;margin-right:10px;width:auto;"><label style="float:left;">Email id</label><br/> <input type="text" name="username" size="25" /></p>
  <p style="float:left;margin-right:10px;width:auto;"><label style="float:left;">Password</label><br/><input type="password" name="password" size="25" />

% if invalid %
    Mismatch in your email/password. 
% endif %

</p>

 </div> 
    <p style="clear:both;float:left;"><input type="submit" value="Log in" /></p> 
</div>
</form><
<script type="text/javascript">
function userCheck()
    /*document.getElementById('myFormid').action = "http://10.1.0.90:8080/login/";
    if ((document.userInputForm.username.value.length==0)) */

</script>
<form name ="myform"  method="POST" id='FormID'>
<table>
<tr>
<td>First name</td>
<td>
<input type="text" name="firstName" value=""  maxlength="100" />
<b id="firstNameID" style="font-family:Times New Roman;color:#B4045F;font-size:14px;">
</td>
</tr>

<tr>
<td>Last name</td>
<td>
<input type="text" name="lastName" value="" maxlength="100" />
</td>
</tr>

<tr>
<td>E-mail</td>
<td>
<input type="text" name="email" value="" maxlength="100" />
</td>
</tr>
<tr>
<td>Password</td>
<td>
<input type="password" name="password" value="" maxlength="100"  />
<b id="passwordID" style="font-family:Times New Roman;color:#B4045F;font-size:14px;">
</td>
</tr>
<tr>
<td>Gender:</td>
<td>
<input type="radio" name="sex" value="male" /> Male
<input type="radio" name="sex" value="female" /> Female
</td>
</tr>
<tr>
<td>Birthday</td>
<td>
<input type="text" name="birthday" id='datepicker' value="" maxlength="100" />
</td>
</tr>
</tr>
</table>
<table>
<tr>
    <td>

    </td>
</tr>
<tr>
    <td>
        <input type="text" id="txtCaptcha" 
            style="background-image:url(1.jpg); text-align:center; border:none;
            font-weight:bold; font-family:Modern" />
        <input type="button" id="btnrefresh" value="Refresh" onclick="DrawCaptcha();" />
    </td>
</tr>
<tr>
    <td>
        <input type="text" id="txtInput"/>    
    </td>

<td> <br> <br>
<input type="button" value="Sign Up" onClick="isEmpty();"/>
</td>
</tr>
</table>
<script type="text/javascript">
function isEmpty()
    if  ((document.myform.firstName.value.length==0)) 
        
        document.getElementById('firstNameID').innerHTML = 'Please fill this field';
        return true;
        
    else if ((document.myform.password.value.length==0)) 
        
        document.getElementById('passwordID').innerHTML = 'Please fill this field';
        return true;
        
    else if (! ValidCaptcha())
        
            alert("Captcha entered wrong");
        

    else 
         
        document.getElementById('FormID').action = "http://10.1.0.90:8080/registrationForm/";
        document.getElementById('FormID').submit();
        return false; 
        

</script>
</body>


</html>

【问题讨论】:

rv_k 请重新考虑您的答案,因为 django-registration 不再维护,并且会导致很多人不推荐。干杯。 【参考方案1】:

查看django-registration 作为可插拔应用程序。

如果您想自己动手,也可以将代码用作参考。

回复评论:

django-registration 非常适合您。它不附带 html 模板,您只需稍微调整表单即可。它有很好的documentation

django-registration 是否附带任何我可以立即使用的示例模板? 不,有两个原因:

1. Providing default templates with an application is generally
   hard to impossible, because different sites can have such
   wildly different design and template structure. Any attempt to
   provide templates which would work with all the possibilities
   would probably end up working with none of them.

2. A number of things in django-registration depend on the
   specific :ref:`registration backend <backend-api>` you use,
   including the variables which end up in template
   contexts. Since django-registration has no way of knowing in
   advance what backend you're going to be using, it also has no
   way of knowing what your templates will need to look like.

Fortunately, however, django-registration has good documentation
which explains what context variables will be available to
templates, and so it should be easy for anyone who knows Django's
template system to create templates which integrate with their own
site.

【讨论】:

我检查了它,但我已经用 html 表单创建了我的注册表单。是否仍然可以使用 django-registration 单独与我的应用程序进行电子邮件验证。 查看这个 SO 问题以及***.com/questions/1325983/…【参考方案2】:

您应该检查django-allauth,它可以满足您的需求以及更多其他功能。 django-registration 曾经被推荐,但它不再像it's bitbucket project 中所说的那样维护。 (已回复here)

【讨论】:

这在理论上可以回答这个问题,但最好将答案的基本部分包含在此处以供将来的用户使用,并提供链接以供参考。 Link-dominated answers 可以通过link rot 失效。

以上是关于Django中电子邮件验证的实现的主要内容,如果未能解决你的问题,请参考以下文章

使用 ReactJS 实现忘记密码/电子邮件验证 django rest

Django中的电子邮件确认实现

验证 Django 中是不是存在电子邮件 [重复]

Django中的电子邮件验证

Django 自定义用户电子邮件帐户验证

django 完成邮件验证