当前位置 主页 > 网站技术 > 代码类 >

    Flask项目中实现短信验证码和邮箱验证码功能

    栏目:代码类 时间:2019-12-05 12:09

    Flask是一个用Python编写的Web应用程序框架,Flask是python的web框架,最大的特征是轻便,让开发者自由灵活的兼容要开发的feature。 它由 Armin Ronacher 开发,他领导一个名为Pocco的国际Python爱好者团队。 Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。两者都是Pocco项目。

    这篇文章给大家介绍Flask项目中实现短信验证码和邮箱验证码功能,具体内容如下所示:

    一、发送邮箱验证码

    1、使用QQ邮箱发送验证码

    ①配置

    开启pop3/smtp服务

    2、应用

    ①前端页面

    ②config.py

    # 邮箱配置
    # MAIL_USE_TLS:端口号587
    # MAIL_USE_SSL:端口号465
    # QQ邮箱不支持非加密方式发送邮件
    # 发送者邮箱的服务器地址
    MAIL_SERVER = "smtp.qq.com"
    MAIL_PORT = '587'
    MAIL_USE_TLS = True
    # MAIL_USE_SSL
    MAIL_USERNAME = "1414518976@qq.com"
    MAIL_PASSWORD = "*****" # 生成授权码,授权码是开启smtp服务后给出的
    MAIL_DEFAULT_SENDER = 1414518976@qq.com

    ③views.py

    点击获取验证码,进入到以下视图,发送邮件,把验证码存到memcache数据库。

    from flask_mail import Message,Mail
    mail = Mail()
    @bp.route('/email_captcha/')
    @login_requires
    def email_captcha():
      email = request.args.get('email')
      if not email:
        return restful.params_error('请输入邮箱') #restful. 封装的函数,返回前端数据
      '''
      生成随机验证码,保存到memcache中,然后发送验证码,与用户提交的验证码对比
      '''
      captcha = str(uuid.uuid1())[:6] # 随机生成6位验证码
      # 给用户提交的邮箱发送邮件
      message = Message('Python论坛邮箱验证码', recipients=[email], body='您的验证码是:%s' % captcha)
      try:
        mail.send(message) # 发送
      except:
        return restful.server_error()
      mbcache.set(email, captcha)
      return restful.success()

    点击立即修改,

            以post请求发到后台,对用户提交的数据进行校验:拿出memcache中存储的验证码与用户提交的验证码对比,校验邮箱格式。校验通过后把新邮箱保存到数据库,返回前端提示信息。邮箱验证功能完成。

    二、实现短信验证码

    1、平台以及配置

    平台:阿里大于

    配置:1、添加模板

     2、添加签名

    3、获取

    即下面的key和secret

    2、flask中使用

    config.py

    #发送短信验证码配置
    KEY="*******"
    SECRET="*******"
    alidayu.py发送短信功能实现
    from aliyunsdkcore.client import AcsClient #需要先下载包
    from aliyunsdkcore.request import CommonRequest
    import config
    def send_sms(telephone, captcha):
      client = AcsClient(config.KEY, config.SECRET, 'cn-hangzhou')
      request = CommonRequest()
      request.set_accept_format('json')
      request.set_domain('dysmsapi.aliyuncs.com')
      request.set_method('POST')
      request.set_protocol_type('https') # https | http
      request.set_version('2017-05-25')
      request.set_action_name('SendSms')
      request.add_query_param('RegionId', "cn-hangzhou")
      request.add_query_param('PhoneNumbers', telephone) #发送的手机号
      request.add_query_param('SignName', "flask论坛") #SignName签名
      request.add_query_param('TemplateCode', "SMS_174806057") #模板id
      code = {}
      code['code'] = captcha
      request.add_query_param('TemplateParam', code) #模板中要填入的数据
      response = client.do_action(request)
      # python2: print(response)
      return str(response, encoding='utf-8')