Heim  >  Artikel  >  Backend-Entwicklung  >  Django-Entwicklungsbeispiel für das Abrufen vergessener Passwörter über email_python

Django-Entwicklungsbeispiel für das Abrufen vergessener Passwörter über email_python

不言
不言Original
2018-04-17 11:46:143017Durchsuche

In diesem Artikel wird hauptsächlich das Beispiel der Funktion zum Abrufen vergessener Passwörter per E-Mail in der Django-Entwicklung vorgestellt. Jetzt teile ich es mit Ihnen und gebe eine Referenz. Werfen wir gemeinsam einen Blick darauf

1. Prozessanalyse:

1. Klicken Sie auf die Seite „Passwort vergessen“====》forget.html und geben Sie ein E-Mail und Bestätigungscode, senden Sie eine E-Mail mit der Bestätigungslink-URL ====> Erfolgreich gesendet, springen Sie zur Eingabeaufforderung send_success.html

2. Suchen Sie die Bestätigungslink-URL in Ihrer E-Mail und besuchen Sie die URL zum Zurücksetzen des Passworts reset.html= ==》Passwort zurücksetzen und Daten übermitteln. Wenn fehlgeschlagen, Fehlermeldung zurückgeben

2.

1.users/forms .py-Datei

from django import forms
from captcha.fields import CaptchaField


.......

#forget.html中,用于验证邮箱格式和验证码
class ForgetForm(forms.Form):
  email=forms.EmailField(required=True)
  captcha=CaptchaField(error_messages={'invalid':'验证码错误'})

#reset.html中,用于验证新设的密码长度是否达标
class ResetForm(forms.Form):
  newpwd1=forms.CharField(required=True,min_length=6,error_messages={'required': '密码不能为空.', 'min_length': "至少6位"})
  newpwd2 = forms.CharField(required=True, min_length=6, error_messages={'required': '密码不能为空.', 'min_length': "至少6位"})

2. Relevanter Code in users/views.py:

......
from django.shortcuts import render,redirect
from django.http import HttpResponse
from users.form import ForgetForm,ResetForm
from .models import UserProfile
from django.contrib.auth.hashers import make_password
from apps.utils.email_send import send_register_email
from .models import EmailVerifyRecord

......

class ForgetPwdView(View):
  '''忘记密码'''
  def get(self,request):
    forget_form=ForgetForm()
    return render(request,'forget.html',{'forget_form':forget_form})
  def post(self,request):
    forget_form = ForgetForm(request.POST)
    if forget_form.is_valid():
      email=request.POST.get('email','')
      send_register_email(email,'forget')
      return render(request,'send_success.html')
    else:
      return render(request,'forget.html',{'forget_form':forget_form})


class ResetView(View):
  '''重置密码'''
  def get(self,request,active_code):
    record=EmailVerifyRecord.objects.filter(code=active_code)
    print(record)
    if record:
      for i in record:
        email=i.email
        is_register=UserProfile.objects.filter(email=email)
        if is_register:
          return render(request,'pwd_reset.html',{'email':email})
    return redirect('index')


#因为<form>表单中的路径要是确定的,所以post函数另外定义一个类来完成
class ModifyView(View):
  """重置密码post部分"""
  def post(self,request):
    reset_form=ResetForm(request.POST)
    if reset_form.is_valid():
      pwd1=request.POST.get(&#39;newpwd1&#39;,&#39;&#39;)
      pwd2=request.POST.get(&#39;newpwd2&#39;,&#39;&#39;)
      email=request.POST.get(&#39;email&#39;,&#39;&#39;)
      if pwd1!=pwd2:
        return render(request,&#39;pwd_reset.html&#39;,{&#39;msg&#39;:&#39;密码不一致!&#39;})
      else:
        user=UserProfile.objects.get(email=email)
        user.password=make_password(pwd2)
        user.save()
        return redirect(&#39;index&#39;)
    else:
      email=request.POST.get(&#39;email&#39;,&#39;&#39;)
      return render(request,&#39;pwd_reset.html&#39;,{&#39;msg&#39;:reset_form.errors})

3. Erstellen Sie eine neue Datei „forget.html“, „success_send.html“, „pwd_reset.html“

#forget.html

<!DOCTYPE html>
{% load staticfiles %}
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>忘记密码</title>

<style>
.out{
  width: 500px;
  height: 900px;
  margin: 0 auto;
  margin-top: 100px;
}
</style>
</head>
<body>


  <p class="out">
    <h1>真粗心,忘了密码吧?快通过邮箱找回密码吧!</h1>
    <form method="post" action="{% url &#39;forget_pwd&#39; %}">
      <P><span>邮箱:</span><input type="text" name="email"></P>
      <P><span>验证码:</span>{{ forget_form.captcha }}</P>
      {% csrf_token %}
      <p><input type="submit" value="确认发送验证邮件"></p>
    </form>
    <h1>{{ forget_form.errors }}</h1>
  </p>


</body>
</html>

#success_send.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<h1>发送邮件成功,快去邮箱查看吧!(收件箱没有,垃圾箱一定有……)</h1>
</body>
</html>

#pwd_reset.html

<!DOCTYPE html>
{% load staticfiles %}
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>重置密码</title>

<style>
.out{
  width: 500px;
  height: 900px;
  margin: 0 auto;
  margin-top: 100px;
}
</style>
</head>
<body>


  <p class="out">
    <h1>可以重新设置一个好记的新密码啦!</h1>
    <form method="post" action="{% url &#39;modify&#39; %}">
      <P><span>新密码:</span><input type="password" name="newpwd1" placeholder="至少6位"></P>
      <P><span>确认新密码:</span><input type="password" name="newpwd2" placeholder="至少6位"></P>
      {% csrf_token %}
      <input type="hidden" name="email" value="{{ email }}">
      <p><input type="submit" value="确认"></p>
    </form>
    <h1>{{ msg }}</h1>
  </p>

</body>
</html>

4. Konfigurieren Sie zugehörige URLs.py:

from users.views import ForgetPwdView,ResetView,ModifyView

......

urlpatterns = [
  .....

  #忘记密码
  path(&#39;forget/&#39;,ForgetPwdView.as_view(),name=&#39;forget_pwd&#39;),
  #重置密码
  path(&#39;reset/<str:active_code>&#39;,ResetView.as_view(),name=&#39;reset&#39;),
  path(&#39;modify/&#39;,ModifyView.as_view(),name=&#39;modify&#39;),


  ......
]

Führen Sie das Projekt aus und klicken Sie auf den Link „Passwort vergessen“ (< ;a href="{% url ' discover_pwd' %}" rel="external nofollow" >Passwort vergessen5db79b134e9f6b82c0b36e0489ee08ed), können Sie die Funktion zum Abrufen Ihres Passworts per E-Mail abschließen!

5. Die Methode send_register_email() und ihre Konfiguration werden im vorherigen Artikel detailliert beschrieben

Verwandte Empfehlungen:

Django führt die E-Mail-Benutzerregistrierung über Ajax durch , So aktivieren Sie ein Konto

Detaillierte Erklärung des Authentifizierungsmoduls von Django (Benutzerauthentifizierung)

Das obige ist der detaillierte Inhalt vonDjango-Entwicklungsbeispiel für das Abrufen vergessener Passwörter über email_python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn