6-7 用户注册-1

在注册之前需要配置url

把注册的html页面拷贝到templates下面


然后在urls中做register的配置

C:\Users\hlg\PycharmProjects\MxOnline\templates\register.html

<!DOCTYPE html>
<html>
{% load staticfiles %}
<head>
    <meta charset="UTF-8">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
    <title>慕学在线注册</title>
{#    <link rel="stylesheet" type="text/css" href="../css/reset.css">#}
{#    <link rel="stylesheet" type="text/css" href="../css/login.css">#}
    <link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}">
    <link rel="stylesheet" type="text/css" href="{% static 'css/login.css' %}">

</head>
<body>
<div class="loginbox dialogbox">
    <h1>账号登录</h1>
    <div class="close jsCloseDialog"><img src="../images/dig_close.png"/></div>
    <div class="cont">
        <form id="jsLoginForm" autocomplete="off">
            <div class="box">
                <span class="word3">用户名</span>
                <input type="text" name="account_l" id="account_l" placeholder="手机号/邮箱" />
            </div>
            <div class="box">
                <span class="word2">密      码</span>
                <input type="password" name="password_l" id="password_l" placeholder="请输入您的密码"/>
            </div>
            <div class="error btns login-form-tips" id="jsLoginTips"></div> <!--登录错误提示-->
            <div class="btns">
                <span><input type="checkbox" id="jsAutoLogin" /> 自动登录</span>
                <span class="forget btn fr">忘记密码</span>
            </div>
            <div class="button">
                <input type="button" value="登录" id="jsLoginBtn" />
            </div>
            <div class="btns">
                <span class="fr">没有账号?<span class="regist btn">立即注册</span></span>
            </div>
        </form>
    </div>
</div>
<div class="dialog" id="jsDialog">
    <!--提示弹出框-->
    <div class="successbox dialogbox" id="jsSuccessTips">
        <h1>成功提交</h1>
        <div class="close jsCloseDialog"><img src="../images/dig_close.png"/></div>
        <div class="cont">
            <h2>您的需求提交成功!</h2>
            <p></p>
        </div>
    </div>
    <div  class="noactivebox dialogbox" id="jsUnactiveForm" >
        <h1>邮件验证提示</h1>
        <div class="close jsCloseDialog"><img src="../images/dig_close.png"/></div>
        <div class="center">
            <img src="../images/send.png"/>
            <p>我们已经向您的邮箱<span class="green" id="jsEmailToActive">[email protected]</span>发送了邮件,<br/>为保证您的账号安全,请及时验证邮箱</p>
            <p class="a"><a class="btn" id="jsGoToEmail" target="_blank" href="http://mail.qq.com">去邮箱验证</a></p>
            <p class="zy_success upmove"></p>
            <p style="display: none;" class="sendE2">没收到,您可以查看您的垃圾邮件和被过滤邮件,也可以再次发送验证邮件(<span class="c5c">60s</span>)</p>
            <p class="sendE">没收到,您可以查看您的垃圾邮件和被过滤邮件,<br/>也可以<span class="c5c green" id="jsSenEmailAgin" style="cursor: pointer;">再次发送验证邮件</span></p>
        </div>
    </div>
</div>

<div class="bg" id="dialogBg"></div>
<header>
    <div class="c-box fff-box">
        <div class="wp header-box">
            <p class="fl hd-tips">慕学在线,在线学习平台!</p>
            <ul class="fr hd-bar">
                <li>服务电话:<span>4001008031</span></li>
                <li><a href="login.html">[登录]</a></li>
                <li class="active"><a href="register.html">[注册]</a></li>
            </ul>
        </div>
    </div>
</header>
<section>
    <div class="c-box bg-box">
        <div class="login-box clearfix">
            <div class="hd-login clearfix">
                <a class="index-logo" href="index.html"></a>
                <h1>用户注册</h1>
                <a class="index-font" href="index.html">回到首页</a>
            </div>
            <div class="fl slide">
                <div class="imgslide">
                    <ul class="imgs">

                        <li><a href=""><img width="483" height="472" src="../images/57a801860001c34b12000460.jpg" /></a></li>

                        <li><a href=""><img width="483" height="472" src="../images/57a801860001c34b12000460.jpg" /></a></li>

                        <li><a href=""><img width="483" height="472" src="../images/57a801860001c34b12000460.jpg" /></a></li>

                    </ul>
                </div>
                <div class="unslider-arrow prev"></div>
                <div class="unslider-arrow next"></div>
            </div>
            <div class="fl form-box">
                <div class="tab">
                    <!--<h2 class="active">手机注册</h2>-->
                    <h2>邮箱注册</h2>
                </div>
                <!--<div class="tab-form">-->
                    <!--<form id="mobile_register_form" autocomplete="off">-->
                        <!--<input type='hidden' name='csrfmiddlewaretoken' value='gTZljXgnpvxn0fKZ1XkWrM1PrCGSjiCZ' />-->
                        <!--<div class="form-group marb20">-->
                            <!--<label>手 机 号</label>-->
                            <!--<input id="jsRegMobile" name="account" type="text" placeholder="请输入您的手机号码" />-->
                        <!--</div>-->
                        <!--<div class="form-group marb20" id="jsRefreshCode">-->
                            <!--<label>验 证 码</label>-->
                            <!--<input autocomplete="off" class="form-control-captcha mobile-register-captcha" id="mobile-register-captcha_1" name="captcha_m_1" placeholder="请输入验证码" type="text" /> <input class="form-control-captcha mobile-register-captcha" id="mobile-register-captcha_0" name="captcha_m_0" placeholder="请输入验证码" type="hidden" value="29953bacf7005e8469388b449d97d00d523c1706" />  <img src="/captcha/image/29953bacf7005e8469388b449d97d00d523c1706/" alt="captcha" class="captcha" />-->
                        <!--</div>-->
                        <!--<div class="clearfix">-->
                            <!--<div class="form-group marb8 verify-code">-->
                                <!--<label>短信验证码</label>-->
                                <!--<input id="jsPhoneRegCaptcha" name="mobile_code" type="text" placeholder="输入手机验证码" />-->
                            <!--</div>-->
                            <!--<input class="verify-code-btn sendcode" id="jsSendCode" value="发送验证码">-->
                        <!--</div>-->
                        <!--<div class="form-group marb8">-->
                            <!--<label>密     码</label>-->
                            <!--<input id="jsPhoneRegPwd" name="password_m" type="password" placeholder="请输入6-20位非中文字符密码" />-->
                        <!--</div>-->
                        <!--<div class="error btns" id="jsMobileTips"></div>-->
                        <!--<div class="auto-box marb8">-->

                        <!--</div>-->
                        <!--<input class="btn btn-green" id="jsMobileRegBtn" type="button" value="注册并登录" />-->
                    <!--</form>-->
                <!--</div>-->
                <div class="tab-form">
                    <form id="email_register_form" method="post" action="register.html" autocomplete="off">
                        <input type='hidden' name='csrfmiddlewaretoken' value='gTZljXgnpvxn0fKZ1XkWrM1PrCGSjiCZ' />
                        <div class="form-group marb20 ">
                            <label>邮     箱</label>
                            <input  type="text" id="id_email" name="email" value="None" placeholder="请输入您的邮箱地址" />
                        </div>
                        <div class="form-group marb8 ">
                            <label>密     码</label>
                            <input type="password" id="id_password" name="password"  value="None" placeholder="请输入6-20位非中文字符密码" />
                        </div>
                        <div class="form-group marb8 captcha1 ">
                            <label>验 证 码</label>
                            <img src="/captcha/image/2f3f82e5f7a054bf5caa93b9b0bb6cc308fb7011/" alt="captcha" class="captcha" /> <input id="id_captcha_0" name="captcha_0" type="hidden" value="2f3f82e5f7a054bf5caa93b9b0bb6cc308fb7011" /> <input autocomplete="off" id="id_captcha_1" name="captcha_1" type="text" />
                        </div>
                        <div class="error btns" id="jsEmailTips"></div>
                        <div class="auto-box marb8">
                        </div>
                        <input class="btn btn-green" id="jsEmailRegBtn" type="submit" value="注册并登录" />
                    <input type='hidden' name='csrfmiddlewaretoken' value='5I2SlleZJOMUX9QbwYLUIAOshdrdpRcy' />
                    </form>
                </div>
                <p class="form-p">已有账号?<a href="login.html">[立即登录]</a></p>
            </div>
        </div>
    </div>
</section>

<input id="isLogin" type="hidden" value="False"/>

<script src="{% static 'js/jquery.min.js' %}" type="text/javascript"></script>
<script src="{% static 'js/unslider.min.js' %}" type="text/javascript"></script>
<script src="{% static 'js/validateDialog.min.js' %}"  type="text/javascript"></script>
<script src="{% static 'js/login.min.js' %}"  type="text/javascript"></script>
</body>
</html>


C:\Users\hlg\PycharmProjects\MxOnline\apps\users\views.py



# _*_ encoding:utf-8 _*_
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from django.contrib.auth.backends import ModelBackend #
from django.db.models import Q  # 完成并集
from django.views.generic.base import View  #
# Create your views here.

from .models import UserProfile
from .forms import LoginForm


class CustomBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
        # 完成自己的逻辑
        try:
            # user = UserProfile.objects.get(username=username)
            user = UserProfile.objects.get(Q(username=username)|Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None


# Register+View 说明是一个处理前端请求的View类
class RegisterView(View):
    def get(self, request):
        return render(request, "register.html", {})

# 基于类
class LoginView(View):  # 继承View django的View会自动调用get ,post
    def get(self, request):
        return render(request, "login.html", {})

    def post(self, request):
        login_form = LoginForm(request.POST)  # 实例化
        if login_form.is_valid():
            user_name = request.POST.get("username", "")
            pass_word = request.POST.get("password", "")

            user = authenticate(username=user_name, password=pass_word)

            if user is not None:
                login(request, user)  # 这个是系统提供的 login
                return render(request, "index.html")  # 登录成功,跳转到首页
            else:
                return render(request, "login.html", {"msg": "用户名或密码错误"})  # 验证失败
        else:
            return render(request, "login.html", {"login_form":login_form})  # 登录失败,跳转到登录页面

C:\Users\hlg\PycharmProjects\MxOnline\MxOnline\urls.py




现在进入首页,或者浏览器输入http://127.0.0.1:8000/register/

效果图:



下面看一下图片验证码:

进入 https://github.com/  搜索 django captcha





点进去:



再点击:documentation online

看到:



点击 Installation 告诉我们怎么安装



第一步:安装

pip install  django-simple-captcha==0.4.6


第二步:Add captcha to the INSTALLED_APPS in your settings.py



第三步:Run python manage.py migrate

在运行之前,需要把

url(r'^captcha/', include('captcha.urls')),



然后:



新生成的表:

新建一个工具类:



 
 

向用户发送邮件

 向用户发送邮件之前,需要定义好邮件的内容:

下面把整个有关代码贴出来:

C:\Users\hlg\PycharmProjects\MxOnline\templates\register.html

<!DOCTYPE html>
<html>
{% load staticfiles %}
<head>
    <meta charset="UTF-8">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
    <title>慕学在线注册</title>
{#    <link rel="stylesheet" type="text/css" href="../css/reset.css">#}
{#    <link rel="stylesheet" type="text/css" href="../css/login.css">#}
    <link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}">
    <link rel="stylesheet" type="text/css" href="{% static 'css/login.css' %}">

</head>
<body>
<div class="loginbox dialogbox">
    <h1>账号登录</h1>
    <div class="close jsCloseDialog"><img src="../images/dig_close.png"/></div>
    <div class="cont">
        <form id="jsLoginForm" autocomplete="off">
            <div class="box">
                <span class="word3">用户名</span>
                <input type="text" name="account_l" id="account_l" placeholder="手机号/邮箱" />
            </div>
            <div class="box">
                <span class="word2">密      码</span>
                <input type="password" name="password_l" id="password_l" placeholder="请输入您的密码"/>
            </div>
            <div class="error btns login-form-tips" id="jsLoginTips"></div> <!--登录错误提示-->
            <div class="btns">
                <span><input type="checkbox" id="jsAutoLogin" /> 自动登录</span>
                <span class="forget btn fr">忘记密码</span>
            </div>
            <div class="button">
                <input type="button" value="登录" id="jsLoginBtn" />
            </div>
            <div class="btns">
                <span class="fr">没有账号?<span class="regist btn">立即注册</span></span>
            </div>
        </form>
    </div>
</div>
<div class="dialog" id="jsDialog">
    <!--提示弹出框-->
    <div class="successbox dialogbox" id="jsSuccessTips">
        <h1>成功提交</h1>
        <div class="close jsCloseDialog"><img src="../images/dig_close.png"/></div>
        <div class="cont">
            <h2>您的需求提交成功!</h2>
            <p></p>
        </div>
    </div>
    <div  class="noactivebox dialogbox" id="jsUnactiveForm" >
        <h1>邮件验证提示</h1>
        <div class="close jsCloseDialog"><img src="../images/dig_close.png"/></div>
        <div class="center">
            <img src="../images/send.png"/>
            <p>我们已经向您的邮箱<span class="green" id="jsEmailToActive">[email protected]</span>发送了邮件,<br/>为保证您的账号安全,请及时验证邮箱</p>
            <p class="a"><a class="btn" id="jsGoToEmail" target="_blank" href="http://mail.qq.com">去邮箱验证</a></p>
            <p class="zy_success upmove"></p>
            <p style="display: none;" class="sendE2">没收到,您可以查看您的垃圾邮件和被过滤邮件,也可以再次发送验证邮件(<span class="c5c">60s</span>)</p>
            <p class="sendE">没收到,您可以查看您的垃圾邮件和被过滤邮件,<br/>也可以<span class="c5c green" id="jsSenEmailAgin" style="cursor: pointer;">再次发送验证邮件</span></p>
        </div>
    </div>
</div>

<div class="bg" id="dialogBg"></div>
<header>
    <div class="c-box fff-box">
        <div class="wp header-box">
            <p class="fl hd-tips">慕学在线,在线学习平台!</p>
            <ul class="fr hd-bar">
                <li>服务电话:<span>4001008031</span></li>
                <li><a href="login.html">[登录]</a></li>
                <li class="active"><a href="register.html">[注册]</a></li>
            </ul>
        </div>
    </div>
</header>
<section>
    <div class="c-box bg-box">
        <div class="login-box clearfix">
            <div class="hd-login clearfix">
                <a class="index-logo" href="index.html"></a>
                <h1>用户注册</h1>
                <a class="index-font" href="index.html">回到首页</a>
            </div>
            <div class="fl slide">
                <div class="imgslide">
                    <ul class="imgs">

                        <li><a href=""><img width="483" height="472" src="../images/57a801860001c34b12000460.jpg" /></a></li>

                        <li><a href=""><img width="483" height="472" src="../images/57a801860001c34b12000460.jpg" /></a></li>

                        <li><a href=""><img width="483" height="472" src="../images/57a801860001c34b12000460.jpg" /></a></li>

                    </ul>
                </div>
                <div class="unslider-arrow prev"></div>
                <div class="unslider-arrow next"></div>
            </div>
            <div class="fl form-box">
                <div class="tab">
                    <!--<h2 class="active">手机注册</h2>-->
                    <h2>邮箱注册</h2>
                </div>
                <!--<div class="tab-form">-->
                    <!--<form id="mobile_register_form" autocomplete="off">-->
                        <!--<input type='hidden' name='csrfmiddlewaretoken' value='gTZljXgnpvxn0fKZ1XkWrM1PrCGSjiCZ' />-->
                        <!--<div class="form-group marb20">-->
                            <!--<label>手 机 号</label>-->
                            <!--<input id="jsRegMobile" name="account" type="text" placeholder="请输入您的手机号码" />-->
                        <!--</div>-->
                        <!--<div class="form-group marb20" id="jsRefreshCode">-->
                            <!--<label>验 证 码</label>-->
                            <!--<input autocomplete="off" class="form-control-captcha mobile-register-captcha" id="mobile-register-captcha_1" name="captcha_m_1" placeholder="请输入验证码" type="text" /> <input class="form-control-captcha mobile-register-captcha" id="mobile-register-captcha_0" name="captcha_m_0" placeholder="请输入验证码" type="hidden" value="29953bacf7005e8469388b449d97d00d523c1706" />  <img src="/captcha/image/29953bacf7005e8469388b449d97d00d523c1706/" alt="captcha" class="captcha" />-->
                        <!--</div>-->
                        <!--<div class="clearfix">-->
                            <!--<div class="form-group marb8 verify-code">-->
                                <!--<label>短信验证码</label>-->
                                <!--<input id="jsPhoneRegCaptcha" name="mobile_code" type="text" placeholder="输入手机验证码" />-->
                            <!--</div>-->
                            <!--<input class="verify-code-btn sendcode" id="jsSendCode" value="发送验证码">-->
                        <!--</div>-->
                        <!--<div class="form-group marb8">-->
                            <!--<label>密     码</label>-->
                            <!--<input id="jsPhoneRegPwd" name="password_m" type="password" placeholder="请输入6-20位非中文字符密码" />-->
                        <!--</div>-->
                        <!--<div class="error btns" id="jsMobileTips"></div>-->
                        <!--<div class="auto-box marb8">-->

                        <!--</div>-->
                        <!--<input class="btn btn-green" id="jsMobileRegBtn" type="button" value="注册并登录" />-->
                    <!--</form>-->
                <!--</div>-->
                <div class="tab-form">
                    <form id="email_register_form" method="post" action="{% url 'register' %}" autocomplete="off">
                        <input type='hidden' name='csrfmiddlewaretoken' value='gTZljXgnpvxn0fKZ1XkWrM1PrCGSjiCZ' />
                        <div class="form-group marb20 {% if register_form.errors.email %}errorput{% endif %}">
                            <label>邮     箱</label>
                            <input  type="text" id="id_email" name="email" value="{{ register_form.email.value }}" value="None" placeholder="请输入您的邮箱地址" />
                        </div>
                        <div class="form-group marb8 {% if register_form.errors.password %}errorput{% endif %}">
                            <label>密     码</label>
                            <input type="password" id="id_password" name="password"  value="{{ register_form.password.value }}" placeholder="请输入6-20位非中文字符密码" />
                        </div>
                        <div class="form-group marb8 captcha1 {% if register_form.errors.captcha %}errorput{% endif %}">
                            <label>验 证 码</label>
                            {{ register_form.captcha }}
                        </div>
                        <div class="error btns" id="jsEmailTips">{%  for key,error in register_form.errors.items %}{{ error }}{% endfor %}</div>
                        <div class="auto-box marb8">
                        </div>
                        <input class="btn btn-green" id="jsEmailRegBtn" type="submit" value="注册并登录" />
                        {% csrf_token %}
                    </form>
                </div>
                <p class="form-p">已有账号?<a href="login.html">[立即登录]</a></p>
            </div>
        </div>
    </div>
</section>

<input id="isLogin" type="hidden" value="False"/>

<script src="{% static 'js/jquery.min.js' %}" type="text/javascript"></script>
<script src="{% static 'js/unslider.min.js' %}" type="text/javascript"></script>
<script src="{% static 'js/validateDialog.min.js' %}"  type="text/javascript"></script>
<script src="{% static 'js/login.min.js' %}"  type="text/javascript"></script>
</body>
</html>

C:\Users\hlg\PycharmProjects\MxOnline\MxOnline\urls.py

# _*_ encoding:utf-8 _*_
"""MxOnline URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.9/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Add an import:  from blog import urls as blog_urls
    2. Import the include() function: from django.conf.urls import url, include
    3. Add a URL to urlpatterns:  url(r'^blog/', include(blog_urls))
"""
from django.conf.urls import url, include
from django.contrib import admin
from django.views.generic import TemplateView  # 专门处理静态文件
import xadmin

# from users.views import user_login
from users.views import LoginView, RegisterView, ActiveUserView

urlpatterns = [
    url(r'^xadmin/', xadmin.site.urls),
    url('^$', TemplateView.as_view(template_name="index.html"), name="index"),
    # url('^login/$', user_login, name="login")
    url('^login/$', LoginView.as_view(), name="login"),  # as_view()方法是把类转换成方法使用
    url('^register/$', RegisterView.as_view(), name="register"),
    url(r'^captcha/', include('captcha.urls')),
    url(r'^active/(?P<active_code>.*)/$', ActiveUserView.as_view(), name="user_active")
]

C:\Users\hlg\PycharmProjects\MxOnline\apps\users\views.py

# _*_ encoding:utf-8 _*_
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from django.contrib.auth.backends import ModelBackend #
from django.db.models import Q  # 完成并集
from django.views.generic.base import View  #
from django.contrib.auth.hashers import make_password
# Create your views here.

from .models import UserProfile, EmailVerifyRecord
from .forms import LoginForm, RegisterForm
from utils.email_send import send_register_email

class CustomBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
        # 完成自己的逻辑
        try:
            # user = UserProfile.objects.get(username=username)
            user = UserProfile.objects.get(Q(username=username)|Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None


class ActiveUserView(View):
    def get(self, request, active_code):
        all_records = EmailVerifyRecord.objects.filter(code=active_code)
        if all_records:
            for record in all_records:
                email = record.email
                user = UserProfile.objects.get(email= email)
                user.is_active = True
                user.save()
        return render(request, "login.html")


# Register+View 说明是一个处理前端请求的View类
class RegisterView(View):
    def get(self, request):
        register_form = RegisterForm()
        return render(request, "register.html", {'register_form':register_form})

#     验证逻辑
    def post(self, request):
        #    实例化用户传来的数据
        register_form = RegisterForm(request.POST)
        if register_form.is_valid():
            user_name = request.POST.get("email", "")
            pass_word = request.POST.get("password", "")
            user_profile = UserProfile()
            user_profile.username = user_name
            user_profile.email = user_name
            user_profile.is_active = False
            user_profile.password = make_password(pass_word)
            user_profile.save()
            # 发送验证码
            send_register_email(user_name, "register")
            # 注册成功,返回到登录页面
            return render(request, "login.html")
        else:
            # 注册失败,返回到注册页面
            return render(request, "register.html", {"register_form":register_form})

# 基于类
class LoginView(View):  # 继承View django的View会自动调用get ,post
    def get(self, request):
        return render(request, "login.html", {})

    def post(self, request):
        login_form = LoginForm(request.POST)  # 实例化
        if login_form.is_valid():
            user_name = request.POST.get("username", "")
            pass_word = request.POST.get("password", "")

            user = authenticate(username=user_name, password=pass_word)

            if user is not None:
                if user.is_active:
                    login(request, user)  # 这个是系统提供的 login
                    return render(request, "index.html")  # 登录成功,跳转到首页
                else:
                    return render(request, "login.html", {"msg": "用户名或密码错误"})  # 验证失败
            else:
                return render(request, "login.html", {"msg": "用户名或密码错误"})  # 验证失败
        else:
            return render(request, "login.html", {"login_form":login_form})  # 登录失败,跳转到登录页面


C:\Users\hlg\PycharmProjects\MxOnline\apps\utils\email_send.py

# _*_ encoding:utf-8 _*_
from random import Random
from django.core.mail import send_mail

from users.models import EmailVerifyRecord
from MxOnline.settings import EMAIL_FROM


def random_str(randomlength=8):
    str = ''
    chars= 'AaBbCcDdEeFfGgHhIiJiKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    random = Random()
    for i in range(randomlength):
        str+=chars[random.randint(0, length)]
    return str

def send_register_email(email, send_type="register"):
    email_record = EmailVerifyRecord()
    code = random_str(16) # 生成一个16位字符
    email_record.code = code
    email_record.email = email
    email_record.send_type = send_type
    email_record.save()

#     向用户发送邮件
    email_title = ""
    email_body = ""

    if send_type == "register":
        email_title = "慕学在线 激活链接"
        email_body = "点击 :http://127.0.0.1:8000/active/{0}".format(code)

        # 在settings.py中配置好之后,就可以发送邮件了
        send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
        if send_status:
            pass

注意下图的邮件配置




猜你喜欢

转载自blog.csdn.net/huanglianggu/article/details/80634308
6-7