vue+mongodb+flask+阿里云短信验证码 添加新加功能

阿里云短信验证码(可以直接向客服发送 短信验证码 就会出来教程):

  1. 在“产品与服务”中搜索“短信”进入短信服务
    (2 3 4 需要进入 短信服务管理在控制台)
  2. 获取AccessKey (点击左侧 概览 看右侧的AK)
  3. 签名管理:申请签名(左侧 国内消息)
  4. 模板管理:设置模板(左侧 国内消息)
  5. 下载发送短信Python SDK(下载的压缩包为:dysms_python.zip,不是openjdk之类的)
  6. 进入到dysms_python的下载目录,进行解压
  7. 对于发送短信,dysms_python目录中demo_sms_sned.py aliyunsdkdybaseapi和aliyunsdkysmsapi三个文件最重要,可以单独存放。
  8. pip install aliyun-python-sdk-core-v3
  9. 我的示例代码(存在session的问题,解决请看下一个示例):
    如果有前端代码,可以讲下列的代码作为后台。如果没有,可以 修改下面的手机号,直接访问5007端口对应的route
# -*- coding: utf-8 -*-
import os,sys
import flask
from flask import Flask
import socket
from flask import request
from flask import redirect
from flask import make_response,render_template
from flask import Flask, render_template, jsonify
from random import *

from dateutil.parser import parse
import random
import datetime
import json
from flask_cors import CORS
import sys
from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest
from aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest
from aliyunsdkcore.client import AcsClient
import uuid
import json
from aliyunsdkcore.profile import region_provider
from aliyunsdkcore.http import method_type as MT
from aliyunsdkcore.http import format_type as FT
import const
import random
from flask import session
#from utils.captcha import Captcha
"""
短信业务调用接口示例,版本号:v20170525

Created on 2017-06-12

"""
app = Flask(__name__,static_folder = "./dist/static",template_folder = "./dist")
app.config['SECRET_KEY'] = 'XXXX'
app.secret_key = 'why would I tell you my secret key?'
CORS(app, resources=r'/*')
app.permanent_session_lifetime = datetime.timedelta(seconds=5*60)

try:
    reload(sys)
    sys.setdefaultencoding('utf8')
except NameError:
    pass
except Exception as err:
    raise err

# 注意:不要更改
REGION = "cn-hangzhou"
PRODUCT_NAME = "Dysmsapi"
DOMAIN = "dysmsapi.aliyuncs.com"

#阿里大鱼相关配置
ACCESS_KEY_ID = '你的AK的id'
ACCESS_KEY_SECRET = '你的AK的sercet'
SING_NAME = "签名名称"
TEMPLATE_CODE = "模板code"

acs_client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, REGION)
region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN)

def send_sms(phone_numbers, template_param=None):
    smsRequest = SendSmsRequest.SendSmsRequest()
    # 申请的短信模板编码,必填
    smsRequest.set_TemplateCode(TEMPLATE_CODE)

    # 短信模板变量参数
    if template_param is not None:
        smsRequest.set_TemplateParam(template_param)

    # 设置业务请求流水号,必填。
    business_id = uuid.uuid1()
    smsRequest.set_OutId(business_id)

    # 短信签名
    smsRequest.set_SignName(SING_NAME)

    # 数据提交方式
    # smsRequest.set_method(MT.POST)

    # 数据提交格式
    # smsRequest.set_accept_format(FT.JSON)

    # 短信发送的号码列表,必填。
    smsRequest.set_PhoneNumbers(phone_numbers)

    # 调用短信发送接口,返回json
    smsResponse = acs_client.do_action_with_exception(smsRequest)

    # TODO 业务处理

    return smsResponse
@app.route('/send', methods=['GET', 'POST'])
def send():
    #mobile=request.json['mobile']
    mobile="你要测试的手机号"
    res={}
    res['status']=1
    #radom_code = Captcha.gene_text(6)
    sss=random.randint(1000,9999)
    print(sss)
    params = {'code': sss}
    if send_sms(mobile, params):
        session[mobile]= sss  #把手机号码作为key
        return json.dumps(res)
    else:
        res['status']=0
        return json.dumps(res)
@app.route('/code_sure',methods=['POST','GET'])
def code_sure():
    #mobile=request.json['mobile']
    #code=request.json['code']
    mobile="你要测试的手机号"
    code="你要测试的验证码"
    code_true=session.get(mobile)
    res={}
    if(code==code_true):
        if(code):
            res['status']=1
            return json.dumps(res)
    res['status']=0
    return json.dumps(res)
@app.route('/regist',methods=['POST','GET'])
def regist():
    usrid=request.json['usrid']
    password=request.json['password']
    res={}
    res['status']=1
    return json.dumps(res)
if __name__ == '__main__':

    # print(__business_id)
    #params = {
    #    'code': 1234
    #}
    # params = u'{"name":"wqb","code":"12345678","address":"bz","phone":"13000000000"}'
    #print(send_sms("15563116059", json.dumps(params)))
    hostname = socket.gethostname()
    ip='0.0.0.0'
    app.run( host=ip,port=5000,debug=False )

解决发送验证码时,session获取不到数据

问题描述:我将验证码存到以手机号为key的session中,并设置验证时间为5分钟。存入之后,立刻取出数据,可以获取到,但是在更换路由之后获取不到。
解决:在了解session的机制之后,明白了。解释如下:flask的session类似字典,可以通过键值对存储在服务器,但是其实flask的session是返回到客户端的!!!服务器端只有session的id!!!用于客户端的session再次返回到服务器时,进行比对,防止session混淆。而我的问题就在于,session跟着返回客户端,但是下次客户端访问服务器的时候,session没有跟着回来。在客户端,对session添加身份凭证withCredentials:true就可以

handleRegist() {
        if (!this.mobile || !this.code) {
          this.$vux.toast.text('请填验证码')
        } else {
          var data = {'mobile': this.mobile, 'code': this.code}
          this.$axios.post('http://xxxx.xxxx.xxxx.xxxx:5007/code_sure', data, {withCredentials: true}).then(res => {
              if (res.data.status == 1) {

                this.$router.push({
                  path: '/Regist_2',
                  name:'Regist_2',
                  query: {
                    id: this.mobile
                  }
                })
              } else {
                alert(res.data.status)
              }
            }
          )
        }
      },

但是问题又来了,我是前后端分离,这样修改之后,后台只能收到访问通知,然后什么都接收不到,啧啧啧,当然是cors又又又又又出错了,修改如下

#CORS(app, resources=r'/*')
CORS(app, supports_credentials=True)

mongodb数据库,

这个没啥…百度搜搜就可以…记得studio 3t一定要备份!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值