下面是验证码的生成和验证的具体操作:
在后端,我们可以使用Python的第三方库random和string来生成随机字符串作为验证码,并使用第三方库Pillow生成图片。在app.py文件中,添加以下代码:
import random
import string
from PIL import Image, ImageDraw, ImageFont
# 生成随机字符串
def generate_verification_code(length=4):
return ''.join(random.choices(string.ascii_uppercase + string.digits, k=length))
# 生成验证码图片
def generate_verification_image(verification_code):
# 验证码图片的尺寸和背景色
size = (100, 50)
bgcolor = (255, 255, 255)
# 创建Image对象
image = Image.new('RGB', size, bgcolor)
# 创建Draw对象
draw = ImageDraw.Draw(image)
# 字体
font_size = 25
font = ImageFont.truetype("arial.ttf", font_size)
# 将验证码绘制到图片上
draw.text((10, 10), verification_code, font=font, fill=(0, 0, 0))
# 扭曲图片
image = image.transform(size, Image.AFFINE, (1, 0, 0, 0, 1, 0), Image.BILINEAR)
image = image.filter(ImageFilter.EDGE_ENHANCE_MORE)
# 返回验证码图片
return image
在UserRegistration类中,我们需要添加生成验证码和保存验证码的逻辑。在post方法中,生成验证码并保存到Session中,代码如下:
from flask import session
# 用户注册API
class UserRegistration(Resource):
def post(self):
# 获取参数
parser = reqparse.RequestParser()
parser.add_argument('phone', required=True)
parser.add_argument('password', required=True)
parser.add_argument('confirm_password', required=True)
parser.add_argument('verification_code', required=True)
args = parser.parse_args()
# 验证验证码
verification_code = session.get('verification_code')
if not verification_code or verification_code.upper() != args['verification_code'].upper():
return {'message': 'Invalid verification code'}, 400
# 保存用户信息
# ...
# 生成验证码
def get(self):
# 生成验证码
verification_code = generate_verification_code()
# 保存验证码到Session中
session['verification_code'] = verification_code
# 生成验证码图片
image = generate_verification_image(verification_code)
# 将验证码图片转换为BytesIO对象
stream = io.BytesIO()
image.save(stream, format='jpeg')
# 返回验证码图片
response = make_response(stream.getvalue())
response.headers['Content-Type'] = 'image/jpeg'
return response
在小程序端,我们需要添加获取验证码和显示验证码的逻辑。在用户注册页面,添加获取验证码按钮和验证码图片标签,代码如下:
<view class="verification">
<image class="verification-image" src="{{verificationImage}}" mode="widthFix"></image>
<button class="verification-button" bindtap="getVerificationCode">获取验证码</button>
</view>
在用户注册页面的对应JS文件中,添加获取验证码和显示验证码