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

本文介绍如何在 Django 项目中实现验证码功能,包括安装与配置 django-simple-captcha 库,以及如何在表单中加入验证码验证。此外,还详细说明了如何设置并发送邮箱验证邮件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

验证码的使用:

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 = 'ly03171629@163.com'
EMAIL_HOST_PASSWORD = 'liuyuan1987729'
EMAIL_FROM = 'ly03171629@163.com'
# # 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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值