手机验证码(三)获取短信的后端逻辑

时间:2024-02-24 21:35:43

评判一下注册的步骤

注册模块

1. 用户在前端输入手机号 点击获取验证码
2. 后端获取到手机号并发送验证码
3. 用户接受到验证码, 输入并登录或注册
4. 后端完成登录或注册操作, 授权用户登录系统

https://blog.csdn.net/qq_22034353/article/details/90640981

image-20200817210417865

P22

1. 下载 wheezy.captcha的第三方开发包

书写视图函数

根据第三方包类下面生成的实例,直接拿来用 (可以看到上面类的initlization方法 return 返回三个参数, 也就是我们实例返回的三个参数 name, text, image_data

image-20200819160147086

from . import auth
from app.utils.captch.captcha import captcha

# GET 127.0.0.1/api/v1.0/image_codes/<image_code_id>
@auth.route(\'/image_codes/<image_code_id>\')
def get_image_code(image_code_id):
    """
    获取图片验证码
    : params iamge_code_id: 图片验证码编号
    :return: 验证码图片
    """
    # 接受参数
    # 检验参数
    # 业务逻辑处理
    # 生成图片验证码
    # 名字, 真实文本, 图片数据
    name, text, image_data = captcha.generate_captcha()
    # 将验证码真实值与编号保存到redis, 并设置有效期
   
    # 1. redis 有哪些数据类型? 
    # "key": xxx
    #2. 可以存一条记录吗? 把所有验证码都放入key= "image_codes" 中, 以列表的形式吗? 为什么不行?
    #3. 那我们以什么形式存储? 
    # 4. 哈希类型怎么存取的?
    # 返回图片
    # 返回值
    pass



# 生成6位随机数 而不是生成0-6位随机数
>>> \'%06d\' % random.randint(0, 999999)
\'692782\'




# 判断图片验证码是否过期

获取短信验证码的接口

@auth.route("/sms_codes/<re(r\'1[34578]\d{9}\'):mobile>")
def get_sms_code(mobile):
    """获取短信验证码"""
    # 1.获取参数
    # 2. 校验参数
    # 3. 业务逻辑处理
    # 从redis中取出真实的图片验证码
    # 判断图片验证码是否过期

    # 与用户填写的值对比
    # 判断手机号存在不,
    try:
        user = User.query.filter_by(mobile=mobile).first()
    except Exception as e:
        current_user.logger.error(e)
    else:
        if user is not None:
            return jsonify("手机号已存在")
        # 不存在则生成短信验证码
        sms_code = "%06d" % random.randint(0, 999999)
        # 保存真实的短信验证码
        try:
            
        # 返回值

5.如何生成0-6位随机数?使用什么模块? 如何生成6位随机数?

答案:

  1. 字符串 列表, 哈希 set

  2. 可以, 不以列表的形式, 因为我们要存入验证码和其对应的id,两者之间有关系, 而列表只能存放字符串,没有对应关系 例: [ {}]

  3. image_codes: {"编号1":"真实文本", "":""}
    
  4. 与python对象的字典类型类似{\'hash\': \'value\'}形式???? (还没学习redis, 有待确定)

  5. 使用random模块的randint方法

    # 0- 6位随机数 
    >>>random.randint(0, 999999)
    
    # 6位随机数 
    >>>%06d  % random.randint(0, 999999)