关于python:基于PythonFlask实现一个简易网页验证码登录系统案例

57次阅读

共计 2313 个字符,预计需要花费 6 分钟才能阅读完成。

在当今的互联网世界中,为了避免歹意拜访,许多网站在登录和注册表单中都采纳了验证码技术。验证码能够避免机器人主动提交表单,确保提交行为背地有一个实在的人类用户。
本文将向您展现如何应用 Python 的 Flask 框架来创立一个简略的验证码登录零碎。

1. 开始之前

首先,确保你曾经装置了以下所需的库:

pip install flask Pillow
  • Flask: 一个轻量级的 Web 服务器和框架。
  • Pillow: 解决图像操作,用于生成验证码图像。

    2. 生成验证码图像

    咱们应用 Pillow 库来生成验证码图像。除了显示数字和字母,为了减少安全性,咱们还会在图像上增加一些烦扰线条和噪点。

    from PIL import Image, ImageDraw, ImageFont
    import random
    import string
    
    def generate_captcha_image():
      # 定义图片大小及背景色彩
      image = Image.new('RGB', (120, 30), color=(73, 109, 137))
    
      # 应用零碎自带字体,或指定字体文件门路
      font_path = "./arial.ttf"
      fnt = ImageFont.truetype(font_path, 15)
      d = ImageDraw.Draw(image)
    
      # 生成 5 位数的验证码文本
      captcha_text = ''.join(random.choices(string.ascii_uppercase + string.digits, k=5))
      d.text((10, 10), captcha_text, font=fnt, fill=(255, 255, 0))
    
      # 增加烦扰线条和噪点
      for _ in range(random.randint(3, 5)):
          start = (random.randint(0, image.width), random.randint(0, image.height))
          end = (random.randint(0, image.width), random.randint(0, image.height))
          d.line([start, end], fill=(random.randint(50, 200), random.randint(50, 200), random.randint(50, 200)))
    
      for _ in range(100):
          xy = (random.randrange(0, image.width), random.randrange(0, image.height))
          d.point(xy, fill=(random.randint(50, 200), random.randint(50, 200), random.randint(50, 200)))
    
      return image, captcha_text

    3. 应用 Flask 建设 Web 利用

    当初,咱们应用 Flask 来创立一个 Web 利用,并展现登录页面与验证码图像。

    from flask import Flask, render_template, jsonify, request, session
    import io
    
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'your_secret_key_here'
    
    @app.route('/')
    def index():
      # 渲染登录页面
      return render_template('login.html')
    
    @app.route('/captcha')
    def captcha():
      # 应用上述函数生成验证码图片
      image, captcha_text = generate_captcha_image()
    
      # 将验证码文本存储到 session,以便之后进行验证
      session['captcha'] = captcha_text
    
      buf = io.BytesIO()
      image.save(buf, format='PNG')
      buf.seek(0)
      return buf.getvalue(), 200, {
          'Content-Type': 'image/png',
          'Content-Length': str(len(buf.getvalue()))
      }

    4. 解决登录申请

    登录时,咱们须要验证用户输出的验证码是否与咱们生成的匹配。

    @app.route('/login', methods=['POST'])
    def login():
      # 检查用户输出的验证码是否与 session 中的统一
      if request.json.get('captcha', '').upper() == session.get('captcha','').upper():
          return jsonify({'status': 'success', 'message': '登录胜利'})
      else:
          return jsonify({'status': 'error', 'message': '验证码谬误'}), 400

5. 演示视频 + 残缺代码

演示视频如下,篇幅所限,如需残缺代码,请关上地址收费获取:https://mp.weixin.qq.com/s/2fgjKvuuwaFvhYt5P68T1A

6. 总结

通过下面的代码,咱们创立了一个简略的网站验证码登录零碎。用户须要输出与图片上显示的验证码匹配的文原本验证本人是人类。这不仅进步了安全性,而且可能无效地阻止歹意机器人。
只管此示例只是根底版本,但您能够在此基础上增加更多的安全性措施,例如应用更简单的验证码、增加限度登录尝试次数的性能或应用其余验证办法。
心愿本文能帮忙您理解如何应用 Python 和 Flask 来创立验证码登录零碎。在理论开发中,为了提供更好的用户体验和安全性,倡议进一步欠缺和加强此零碎。

正文完
 0