Django集成Python captcha库实现图片验证码生成

向北走
向北走
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍如何在Django项目中利用Python的captcha库实现图片验证码功能。通过自定义Captcha_Get类生成随机字符序列,并结合ImageCaptcha生成PNG图片流。最终通过Django视图函数将验证码图像以HttpResponse返回,供前端直接调用接口展示,适用于登录验证等场景。

Django集成captcha库实现图片验证码

在Python生态中,处理验证码功能通常依赖于专门的验证码库(captcha)。

我们的目标是生成符合常见网页标准的图片验证码,其效果应与主流网站展示的验证码一致。

这种实现方式与各大网页获取图片源地址的逻辑相似,具体实现细节见下方代码。

本方案基于Django框架,并调用Python中的captcha库来完成核心逻辑。

验证码生成类封装

首先,在项目目录中创建名为captcha_image.py的文件用于封装验证码生成逻辑。


from captcha.image import ImageCaptcha
import random
class Captcha_Get():
  def __init__(self,
         CHAR_SET = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
         CAPTCHA_LEN = 4):
    self.CHAR_SET = CHAR_SET
    self.CAPTCHA_LEN = CAPTCHA_LEN
  def get_captcha(self):
    captcha_list = []
    for i in range(self.CAPTCHA_LEN):
      random_choice = random.choice(self.CHAR_SET)
      captcha_list.append(random_choice)
    return captcha_list
  def get_captcha_image(self):
    image = ImageCaptcha()
    captcha_list = self.get_captcha()#返回一个列表
    captcha_str = ''.join(captcha_list)#将列表的所有内容整合成一个字符串
    captcha_image = image.generate(captcha_str)
    #captcha_image返回<_io.BytesIO object at 0x000001C8758C8728>,它是一个<class '_io.BytesIO'>
    return captcha_str,captcha_image#因为要和django登陆相结合所以验证码的内容也要返回

接着,初始化一个标准的Django项目环境。

python-admin startproject mysite

在项目中创建对应的应用(app)。

python manage.py startapp app

完成应用注册,配置urls路由,并将captcha_image.py文件放置于对应的app目录下以确保模块可引用。

Django视图接口实现

接下来编写views.py文件,定义处理验证码请求的视图函数。


from django.http import JsonResponse,HttpResponse
from .captcha_image import *
def auth_code_port(request):
  """
  生成验证码的接口
  :param request:
  :return: 图片的对象
  """
  captcha_str, image_64 = Captcha_Get().get_captcha_image()
  #request.session['captcha_str'] = captcha_str #将验证码内容放入session以便于后边判断,但必须迁移数据库,否则报错
  #image = 'data:image/png;base64,'+image_64
  resp = HttpResponse(image_64, content_type='image/png')
  return resp

接口测试与前端调用

为验证验证码接口是否正常工作,启动Django项目后,在浏览器访问地址127.0.0.1:8000/app/auth_code_port进行测试。

测试通过后,前端模板即可直接调用该接口获取验证码图片。

总结

以上内容介绍了在Django中实现图片验证码的具体方法,希望对读者有所帮助。如有任何疑问,欢迎留言讨论,作者会及时回复。感谢对本站的支持!若觉得本文对您有参考价值,欢迎转载,请注明出处,谢谢!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表