Django----之验证码与邮箱验证

验证码的使用:

1、安装    pip install django-simple-captcha

2、将captcha 添加在settings中的installed_apps里面

3、将captcha配置url   

from django.conf.urls import url,include
urlpatterns = [
    url(r'^captcha/',include('captcha.urls')),
]

4、迁移同步,生成captcha所依赖的表

5、将captcha字段在forms类当中进行设置

from captcha.fields import CaptchaField
from django import forms
class UserRegisterForm(forms.Form):

    email = forms.EmailField(required=True,error_messages={
        'required':'邮箱必须填写'
    })
    password = forms.CharField(min_length=3,max_length=20,required=True,error_messages={
        'required': '密码必须填写',
        'min_length':'密码最少得3个',
        'max_length': '密码最多20个',
    })
    captcha = CaptchaField(error_messages={
        'invalid':'验证码错误'
    })

6、在后台逻辑当中,get请求里面实例化我们的form,将form对象返回到页面

from .forms import UserRegisterForm
def user_register(request):
    if request.method == 'GET':
        user_register_form = UserRegisterForm()#不填不做任何验证只是显示验证码
        return render(request,'users/register.html',{
            'user_register_form':user_register_form
        })

7、在页面上通过{{ form.captcha}} 获取验证码

邮箱验证

setting中设置邮箱参数

EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'liuyuan1987729'
EMAIL_FROM = '[email protected]'
# # EMAIL_USE_TSL = False

在项目中创建utils工具文件夹在utils中创建send_mail_tool.写入函数

from users.models import EmailVerify
from random import randint
from django.core.mail import send_mail
from ShangOnline.settings import EMAIL_FROM

def get_random_code(code_length=8):
    code_source = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
    code = ''
    for i in range(code_length):
        code += code_source[randint(0,len(code_source)-1)]
    return code
def send_email_verify(email,send_type):
    code = get_random_code()
    if send_type == 'changeemail':
        code = get_random_code(4)
    email_ver = EmailVerify()
    email_ver.email = email
    email_ver.send_type = send_type
    email_ver.code = code
    email_ver.save()
    if send_type == 'register':
        send_title = '欢迎注册尚在线教育:'
        send_body = '请点击下面链接进行激活\n http://127.0.0.1:8000/users/active/'+code
        send_mail(send_title,send_body,EMAIL_FROM,[email])

    if send_type == 'forget':
        send_title = '尚在线重置密码功能:'
        send_body = '请点击下面链接进行重置密码\n http://127.0.0.1:8000/users/user_reset/' + code
        send_mail(send_title, send_body, EMAIL_FROM, [email])

    if send_type == 'changeemail':
        send_title = '尚在线修改邮箱功能:'
        send_body = '您的验证码是:' + code
        send_mail(send_title, send_body, EMAIL_FROM, [email])

再在views中导入使用

from utils.send_mail_tool import send_email_verify
from django.shortcuts import render,redirect,reverse,HttpResponse
from .forms import UserRegisterForm

def user_login(request):
    if request.method == 'GET':
        return render(request,'users/login.html',{
        })
    else:
        user_login_form = UserLoginForm(request.POST)
        if user_login_form.is_valid():
            email = user_login_form.cleaned_data['email']
            password = user_login_form.cleaned_data['password']
            a = authenticate(username=email,password=password)
            if a:
                if a.is_start:
                    login(request,a)
                    msg = UserMessageInfo()
                    msg.userinfo = a.id
                    msg.message = '欢迎登录尚在线'
                    msg.save()
                    # return redirect(reverse('index'))
                    url = request.COOKIES.get('url','/')
                    ret = redirect(url)
                    ret.delete_cookie('url')
                    return ret
                else:
                    return HttpResponse('请去激活')
            else:
                return render(request, 'users/login.html', {
                   'msg':'用户名或者密码有误'
                })
        else:
            return render(request,'users/login.html',{
                'user_login_form':user_login_form
            })

#处理邮箱返回的url
def user_active(request,code):
    if code:
        email_ver = EmailVerify.objects.filter(code=code)[0]
        email = email_ver.email
        user = UserProfile.objects.filter(email=email)[0]
        user.is_start = True
        user.save()
        return redirect(reverse('users:user_login'))
    else:
        pass


 

猜你喜欢

转载自blog.csdn.net/xiaoming0018/article/details/81636003
今日推荐