那么首先来介绍一下 Flask。Flask 是一款轻量级的 Web 应用框架,它基于 Jinja2 模板引擎,Werkzeug WSGI 工具包和 Python 标准库。它具有灵活性、可扩展性和易于使用等特点,适合用于快速地搭建原型应用、服务、RESTful API 和网站等。
当在网站或后台管理系统中设计登录表单时,通常需要使用验证码验证功能来防止恶意 BOT 及暴力破解,下面介绍如何在 Flask 中实现验证码及验证码验证功能。
Flask 验证码实现
- 引入依赖包
安装 Pillow 库:
pip install Pillow
安装 captcha 库:
pip install captcha
- 生成图片验证码
from flask import Flask, Response
from captcha.image import ImageCaptcha
app = Flask(__name__)
@app.route('/captcha')
def gen_captcha():
image = ImageCaptcha(fonts=['./times_new_york.ttf'])
code = 'ABCD' # 生成随机验证码字符
data = image.generate(code) # 生成图片验证码
response = Response(data.getvalue(), mimetype='image/png')
response.headers['Content-Type'] = 'image/png'
return response
- 生成 Math 类型验证码
from flask import Flask, Response
from captcha.image import ImageCaptcha
from captcha.math import MathCaptcha
app = Flask(__name__)
@app.route('/captcha')
def gen_captcha():
captcha_type = 'math' # 指定验证码类型为数学计算类型
if captcha_type == 'math':
captcha = MathCaptcha()
code = captcha.generate_expression()
image = ImageCaptcha(fonts=['./times_new_york.ttf'])
else:
captcha = ImageCaptcha(fonts=['./times_new_york.ttf'])
code = 'ABCD' # 生成随机验证码字符
image = captcha
data = image.generate(code) # 生成图片验证码
response = Response(data.getvalue(), mimetype='image/png')
response.headers['Content-Type'] = 'image/png'
return response
Flask 验证码验证功能
通过生成图片验证码后,需要在表单提交时接收验证码并验证其正确性。下面介绍如何在 Flask 中实现验证码验证功能。
from flask import Flask, request
from captcha.image import ImageCaptcha
from captcha.math import MathCaptcha
app = Flask(__name__)
@app.route('/captcha', methods=['GET'])
def gen_captcha():
captcha_type = 'math' # 指定验证码类型为数学计算类型
if captcha_type == 'math':
captcha = MathCaptcha()
code = captcha.generate_expression()
image = ImageCaptcha(fonts=['./times_new_york.ttf'])
else:
captcha = ImageCaptcha(fonts=['./times_new_york.ttf'])
code = 'ABCD' # 生成随机验证码字符
image = captcha
data = image.generate(code) # 生成图片验证码
response = Response(data.getvalue(), mimetype='image/png')
response.headers['Content-Type'] = 'image/png'
session['captcha'] = captcha.solve_expression(code) # 将验证码字符存入 session 中
return response
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
captcha = request.form['captcha']
if session['captcha'] == captcha: # 验证表单提交的验证码和 session 中存储的验证码是否相等
# TODO: 验证用户名和密码
return 'Login Success!'
else:
return 'Captcha Error!'
由上述代码可知,通过将验证码字符存入 session 中,在提交表单时比较表单提交的验证码和 session 中存储的验证码是否相等,以实现验证码验证功能。
其中,通过使用 captcha.solve_expression(code)
方法计算生成的数学表达式的结果,并将其存入 session 中。
另外,在具体实现中,还需要根据表单类型和应用场景的需求选择具体的验证码类型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:flask实现验证码并验证功能 - Python技术站