Django中实现随机验证码

# 生成验证码
from PIL import Image,ImageDraw,ImageFont
from io import BytesIO
from .myutil import get_random_color

def
get_confirm_code(req):

  # 实例化画布 img_size = (150,70) #画布大小 img_color = get_random_color() #画布颜色 img = Image.new('RGB',img_size,img_color) #新建画布传入画布模式,大小,颜色 # 实例化画笔 draw = ImageDraw.Draw(img) #确认画笔在哪块画布上画# 实例化一个字体 font_path = os.path.join(settings.STATICFILES_DIRS[0],'fonts/ADOBEARABIC-BOLD.OTF') #确认字体路径 font_size = 30 #确认字体大小 font = ImageFont.truetype(font_path,font_size) #将字体传入到画布上

   # 在画布上生成四个随机字母 source = 'qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM' res = '' for i in range(4): code_color = get_random_color() index = random.randint(0,len(source)) my_str = source[index] res += my_str draw.text((20+30*i,20),my_str,fill=code_color,font=font) # 将字母画在画布上
  # 在画布上随机生成200个颜色位置不确定的点
for i in range(200): x = random.randint(0,149) y = random.randint(0,69) draw.point((x,y),fill=get_random_color())
  # 将生成的画布以二进制数据保存到内存中,并指定格式 buf
= BytesIO() img.save(buf,'png') del draw #删除保存后的画布 # 保存到session,为了下一步可以取出作比较 req.session['verify_code'] = res return HttpResponse(buf.getvalue(),content_type='image/png') #以图片形式返回保存在内存中的值
get_confirm_code用到的工具类函数如下:
import randomdef get_random_color():
    r = random.randint(0,256)
    g = random.randint(0,256)
    b = random.randint(0,256)
    return (r,g,b)

包含验证码的验证页面

def login(req):
    if req.method == 'GET':
        return render(req,'login.html')
    else:
        code = req.POST.get('code')
        server_code = req.session.get('verify_code')
        if code and len(code)>0 and code.lower() == server_code.lower():
            return HttpResponse('ok')
        else:
            return HttpResponse('no ok')

  前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
    <script>
        $(function () {
            $('#myimg').click(function () {
                $(this).attr('src',"/app/get_confirm_code/"+Math.random())
            })
        })
    </script>
</head>
<body>
<form action="/app/login/" method="post">
    <img src="/app/get_confirm_code/" alt="" id="myimg"><br>
    <input type="text" name="code" placeholder="请输入验证码"><br>
    <input type="submit" value="验证">
</form>

</body>
</html>

  

 

转载于:https://www.cnblogs.com/wusir66/p/9872059.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用 Django 实现手机短信验证码的代码,供您参考: 1.首先在 settings.py 文件配置短信服务商的 API_KEY、API_SECRET、签名等信息,例如: ``` SMS_API_KEY = 'your sms api key' SMS_API_SECRET = 'your sms api secret' SMS_SIGN = 'your sms sign' ``` 2.在 views.py 文件定义生成验证码和发送短信的函数,示例如下: ``` import random import requests from django.http import JsonResponse # 生成指定长度的随机数字验证码 def generate_code(length=6): return ''.join([str(random.randint(0, 9)) for _ in range(length)]) # 发送短信验证码 def send_sms(phone, code): url = 'https://api.smsbao.com/sms' data = { 'u': SMS_API_KEY, 'p': SMS_API_SECRET, 'm': phone, 'c': f'【{SMS_SIGN}】您的验证码是{code}。如非本人操作,请忽略本短信。' } response = requests.post(url, data=data) return response.text == '0' # 生成验证码并发送短信 def generate_and_send_code(request): phone = request.GET.get('phone', '') if phone: code = generate_code() # 将验证码保存到 session request.session['sms_code'] = code if send_sms(phone, code): # 短信发送成功 return JsonResponse({'status': 0, 'msg': '验证码发送成功'}) else: # 短信发送失败 return JsonResponse({'status': 1, 'msg': '验证码发送失败,请稍后再试'}) else: return JsonResponse({'status': 1, 'msg': '手机号不能为空'}) ``` 3.在 urls.py 文件配置对应的路由,例如: ``` from django.urls import path from myapp.views import generate_and_send_code urlpatterns = [ path('sms/code/', generate_and_send_code), ] ``` 上述代码,访问 /sms/code/ 路由时会调用 generate_and_send_code 函数,生成随机验证码并发送短信到指定手机号码。在发送短信时使用了短信服务商的 API 接口进行发送,可以根据实际情况更换为其他短信服务商的 API。同时,验证码也保存在 session ,用于后续验证用户的输入是否正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值