精华内容
下载资源
问答
  • Django发送短信
    2021-05-06 08:31:56

    1、注册互亿无线账户(免费十条短信)

    网址:https://www.ihuyi.com/

    2、点击验证码通知短信–>使用向导–>DEMO示例—>python

    在这里插入图片描述

    3、写一个tools.py文件

    在这里插入图片描述

    import requests
    import random
    import json
    from shop.settings import REDIS_CON
    
    #定义验证码
    def yz_code(phone):
        res = ''
        for i in range(6):
            rand = random.randint(0,9)
            res += str(rand)
        REDIS_CON.set('PHONE_'+str(phone),res)
        REDIS_CON.expire('PHONE_'+str(phone),60)
        return res
    
    #定义发送短信 方法
    def send_note(phone):
        # 三方 url
        url = 'https://106.ihuyi.com/webservice/sms.php?method=Submit'
        # APPID
        account = 'C55350089'
        # APPKEY
        password = '6a4efa645ef945ac1277e1d4bb3d768d'
        # 接受方手机号
        mobile = phone
        # 短信内容
        content = f'您的验证码是:{yz_code(phone)}。请不要把验证码泄露给其他人。'
        # 返回格式
        format = 'json'
        data = {
            'account': account,
            'password': password,
            'mobile': mobile,
            'content': content,
            'format': format
        }
        req = requests.post(url=url,data = data).content.decode('utf-8')
        if json.loads(req)['code'] == 2:
            return 2
        else:
            return json.loads(req)['msg']
    
    

    4、views

    #手机注册
    class Register_phone(View):
        def get(self,request):
            # 失败信息
            error_msg = ''
            # 成功信息
            succeed_msg = ''
            # 手机号注册
            phone = request.GET.get('phone')
            # 判断手机号是否注册
            is_buyer = models.Buyer.objects.filter(phone=phone).first()
            if is_buyer:
                #失败信息
                error_msg = '手机号已注册'
                return render(request, 'buyer/register_phone.html', locals())
            if phone:
                # 利用 tool.py 内 send_note方法 发送短信
                send_p = send_note(phone)
                if send_p == 2:
                    # 成功信息
                    succeed_msg = '发送成功'
                    return render(request, 'buyer/register_phone.html', locals())
                else:
                    # 失败信息
                    error_msg = send_p
                    return render(request, 'buyer/register_phone.html', locals())
            return render(request,'buyer/register_phone.html',locals())
        def post(self,request):
            # 失败信息
            error_msg = ''
            # 成功信息
            succeed_msg = ''
            phone = request.POST.get('phone')
            yz_code = request.POST.get('yz_code')
            password = request.POST.get('password')
            '''
            - 判断 手机号 密码不能为空
            - 判断 手机号是否注册
            - 验证码判断
            - 注册成功   写入数据库
            '''
            # - 判断 手机号 密码不能为空
            if phone == '' or password == '' or yz_code == '':
                # 失败信息
                error_msg = '用户信息不能为空'
                return render(request, 'buyer/register_phone.html', locals())
            # - 判断 手机号是否注册
            is_buyer = models.Buyer.objects.filter(phone=phone).first()
            if is_buyer:
                # 失败信息
                error_msg = '用户以注册'
                return render(request, 'buyer/register_phone.html', locals())
            # - 验证码判断
            if not REDIS_CON.get('PHONE_'+str(phone)):
                # 失败信息
                error_msg = '验证码已失效'
                return render(request, 'buyer/register_phone.html', locals())
            if REDIS_CON.get('PHONE_'+str(phone)).decode('utf-8') != yz_code:
                # 失败信息
                error_msg = '验证码不正确'
                return render(request, 'buyer/register_phone.html', locals())
            # - 注册成功   写入数据库
            models.Buyer.objects.create(phone=phone,password=make_password(password)).save()
            # 返回成功信息
            succeed_msg = '注册成功'
            return render(request, 'buyer/register_phone.html',locals())
    
    更多相关内容
  • 问题遇到的现象和发生背景 用django发短信报错InvalidParameterValue message:参数 X-TC-Region 取值错误。 问题相关代码,请勿粘贴截图 try: cred = credential.Credential('', '')//代码上有,这里不贴 client = ...
  • 本例以腾讯云短信服务为例,因为新账号送100条免费短信,用于开发应该够了 1. 准备工作 需要最终获取以下几样东西: 创建应用,获取到 appid 和 appkey 创建签名 ...在腾讯云短信签名时需要认证,认证需要填写签名类

    本例以腾讯云短信服务为例,因为新账号送100条免费短信,用于开发应该够了

    1. 准备工作

    需要最终获取以下几样东西:

    • 创建应用,获取到 appid 和 appkey 创建签名
    • 获取 签名内容 创建模板
    • 获取 模板ID

    具体步骤

    1. 注册腾讯云,开通云短信

    开通后进入管理平台
    在这里插入图片描述
    2. 创建签名
    在腾讯云短信签名时需要认证,认证需要填写签名类型:网站、APP、小程序、公众号,按照各自的要求进行认证即可,个人开发的推荐使用公众号 进行签名,要求方便。按照步骤提交,等待审核。

    在这里插入图片描述

    1. 创建模板

    签名通过审核后,就可以创建模板了
    创建好模板后,保存模板id
    在这里插入图片描述
    根据自己的情况,创建自己的模板,腾讯有提供标准模板,可以直接套用,注意模板中的参数数量,{}内为参数
    在这里插入图片描述

    上述的准备工作做完中我们开通相关服务并获取到如下几个值:

    创建应用,获取到 appid 和 appkey

    创建签名,获取 签名内容

    创建模板,获取 模板ID

    接下来开始使用Python发送短信。

    2. python发送短信

    2.1 安装模块腾讯云短信SDK

    pip3 install qcloudsms_py
    

    2.2 示例代码

    注意参数要和之前腾讯云创建的模板的参数数量匹配

    import ssl
    
    ssl._create_default_https_context = ssl._create_unverified_context
    from qcloudsms_py import SmsMultiSender, SmsSingleSender
    from qcloudsms_py.httpclient import HTTPError
    from saas import settings
    
    
    def send_sms_single(phone_num, template_id, template_param_list):
        """
        单条发送短信
        :param phone_num: 手机号
        :param template_id: 腾讯云短信模板ID
        :param template_param_list: 短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板
        :return:
        """
        appid = settings.TENCENT_SMS_APP_ID  # 自己应用ID
        appkey = settings.TENCENT_SMS_APP_KEY  # 自己应用Key
        sms_sign = settings.TENCENT_SMS_SIGN  # 自己腾讯云创建签名时填写的签名内容
        sender = SmsSingleSender(appid, appkey)
        try:
            response = sender.send_with_param(86, phone_num, template_id, template_param_list, sign=sms_sign)
        except HTTPError as e:
            response = {'result': 1000, 'errmsg': "网络异常发送失败"}
        return response
    
    
    def send_sms_multi(phone_num_list, template_id, param_list):
        """
        批量发送短信
        :param phone_num_list:手机号列表
        :param template_id:腾讯云短信模板ID
        :param param_list:短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板
        :return:
        """
        appid = settings.TENCENT_SMS_APP_ID  # 自己应用ID
        appkey = settings.TENCENT_SMS_APP_KEY  # 自己应用Key
        sms_sign = settings.TENCENT_SMS_SIGN  # 自己腾讯云创建签名时填写的签名内容
        sender = SmsMultiSender(appid, appkey)
        try:
            response = sender.send_with_param(86, phone_num_list, template_id, param_list, sign=sms_sign)
        except HTTPError as e:
            response = {'result': 1000, 'errmsg': "网络异常发送失败"}
        return response
    
    展开全文
  • celery介绍,异步发送短信验证码的过程实现,代码展示

    1.Celery简单介绍

    Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子:

    • 异步任务:将耗时的操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音频处理等等

    • 做一个定时任务,比如每天定时执行爬虫爬取指定内容

    • 还可以使用celery实现简单的分布式爬虫系统等等

    Celery 在执行任务时需要通过一个消息中间件(Broker)来接收和发送任务消息,以及存储任务结果

    Celery有以下优点:

    • 简单:Celery 易于使用和维护,并且它 不需要配置文件 ,并且配置和使用还是比较简单的(后面会讲到配置文件可以有)

    • 高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务

    • 快速:单个 Celery 进程每分钟可处理数以百万计的任务,而保持往返延迟在亚毫秒级

    • 灵活: Celery 几乎所有部分都可以扩展或单独使用,各个部分可以自定义。

    2.安装celery

    pip install celery == 4.4.7

    pip install redis == 3.5.3

    pip install eventlet == 0.26.1

    3.celery使用(异步发送短信)

    1.在django项目mdpro/mdpro/下创建celery.py文件,配置以下内容:

     2.在django项目mdpro/mdpro/下创建config.py文件,配置以下内容:

    3. 在django项目mdpro/mdpro/下__init__.py中写入以下内容:

    4.celery异步发送短信

     

    5. 启动celery

     发送短信调用示例:

     生成短信验证码并存储

     在myutils下新建sms_send.py, 把发送短信的方法添加到公共方法中,方便复用

     短信验证码接口

      验证码校验

    Celery的内容已经讲完啦,不知道你看懂了多少?今天就先到此为止吧。明天我还会继续分享Python干货,记得来学习哟。 

    展开全文
  • 图片验证码的作用是防止短信发送的浪费,但是背后真的那么简单吗?想多了,下面讲一下细节。这是代码===> class RegisterForm(forms.Form): username = forms.CharField(label='用户名', max_length=2

    注册的逻辑

    1. 注册需要的参数用户名,密码等,主要是图片验证码等输入
    2. 输入图片验证码之后,点击获得验证码,这时候要验证图片验证码的正确性
    3. 图片验证码正确才会发生短信,用户收到短信之后,输入后,点击注册就可以把数据写入数据库。

    图片验证码的作用是防止短信发送的浪费,但是背后真的那么简单吗?想多了,下面讲一下细节。这是代码===>

    class RegisterForm(forms.Form):
        username = forms.CharField(label='用户名', max_length=20, min_length=5,
                                   error_messages={"min_length": "用户名长度要大于5",
                                                   "max_length": "用户名长度要小于20",
                                                   "required": "用户名不能为空"}
                                   )
        password = forms.CharField(label='密码', max_length=20, min_length=6,
                                   error_messages={"min_length": "密码长度要大于6",
                                                   "max_length": "密码长度要小于20",
                                                   "required": "密码不能为空"}
                                   )
        password_repeat = forms.CharField(label='确认密码', max_length=20, min_length=6,
                                          error_messages={"min_length": "密码长度要大于6",
                                                          "max_length": "密码长度要小于20",
                                                          "required": "密码不能为空"}
                                          )
                                          
        mobile = forms.CharField(label='手机号', max_length=11, min_length=11,
                                 error_messages={"min_length": "手机号长度有误",
                                                 "max_length": "手机号长度有误",
                                                 "required": "手机号不能为空"})
    
        sms_code = forms.CharField(label='短信验证码', max_length=6, min_length=6,
                                   error_messages={"min_length": "短信验证码长度有误",
                                                   "max_length": "短信验证码长度有误",
                                                   "required": "短信验证码不能为空"})
                                                   
        # 上面是简单清洗,下面是再次清洗
        def clean_username(self):
            """
            check mobile
            :return:
            """
            uname = self.cleaned_data.get('username')  # 拿到数据
    
            if Users.objects.filter(username=uname).exists():  # 数据库里面判断是不是有
                raise forms.ValidationError("用户名已注册,请重新输入!")  # exists 有就返回false没有就返回Ture
            return uname
    
        def clean_mobile(self):
    
            tel = self.cleaned_data.get('mobile')  # 获取手机号
            if not re.match(r"^1[3-9]\d{9}$", tel):
                raise forms.ValidationError("手机号码格式不正确")
                
            if Users.objects.filter(mobile=tel).exists():
                raise forms.ValidationError("手机号已注册,请重新输入!")
            return tel
    
        def clean(self):
            """
            """
            # 继承父类的clean方法, 获取提交的表单数据
            cleaned_data = super().clean()
            passwd = cleaned_data.get('password')
            passwd_repeat = cleaned_data.get('password_repeat')
            # 密码判断
            if passwd != passwd_repeat:
                raise forms.ValidationError("两次密码不一致")
    
            # 拿到手机号
            tel = cleaned_data.get('mobile')
            # 拿到短信验证码
            sms_text = cleaned_data.get('sms_code')  # 字典类型通过键取值
            # 建立redis连接
            redis_conn = get_redis_connection(alias='verify_codes')
            # 创建用户输入的手机号标志
            sms_fmt = "sms_{}".format(tel).encode('utf8')
            # 从数据库里面拿出手机号,名字是一样的
            real_sms = redis_conn.get(sms_fmt)  # 那边的数据也是这样写入数据库的,不是只写了手机号进数据库。
            # 判断是否一致
            if (not real_sms) or (sms_text != real_sms.decode('utf8')):
                raise forms.ValidationError("短信验证码错误")
    

    首先图片验证码已开始加载的时候放在哪里?当用户点入注册页面,会自动生成图片验证码,并且保存在redis中,为了保证图片key和其他用户的不一致,前端会传一个参数uuid,这样redis里面就保存了一个这样的键指对了。

    img_aksjdknwas(uuid): 9821(图片验证码)
    
    class ImageCode(View):
        def get(self, request, image_code_id):
            text, image = captcha.generate_captcha()
            conn_redis = get_redis_connection('verify_codes')
            img_key = "img_{}".format(image_code_id).encode('utf8')
            conn_redis.setex(img_key, constants.IMAGE_CODE_REDIS_EXPIRES, text)
            logger.info("Image code:{}".format(text))
            return HttpResponse(content=image, content_type='image/jpg')
    

    那什么时候拿出来呢?当然是点击注册的时候要验证,就要拿出来。

    form = forms.CheckImgCodeForm(data=dict_data)
    

    下面是验证图片验证码的正确性,要去redis里面查出来,同时生成一个手机号60s内不能再次发生的标志保存进redis数据库。

    class CheckImgCodeForm(forms.Form):
        """
        check image code
        """
        mobile = forms.CharField(max_length=11, min_length=11, validators=[mobile_validator, ],
                                 error_messages={"min_length": "手机号不能为空",
                                                 "max_length": "手机号不能为空",
                                                 "required": "手机号不能为空",
                                                 })
        image_code_id = forms.UUIDField(error_messages={"required": "图片UUID不能为空"})
        text = forms.CharField(max_length=4, min_length=4,
                               error_messages={"min_length": "图片验证码长度有误",
                                               "max_length": "图片验证码长度有误",
                                               "required": "图片验证码不能为空",
                                               })
        def clean(self):
            cleaned_data = super().clean()
            image_text = cleaned_data.get('text')
            mobile_num = cleaned_data.get('mobile')
            image_uuid = cleaned_data.get('image_code_id')
    
            if Users.objects.filter(mobile=mobile_num).count():
                raise forms.ValidationError("手机号已经注册,请重新输入!")
            # 确保settings.py文件中有配置redis CACHE
            # Redis原生指令参考 http://redisdoc.com/index.html
            # Redis python客户端 方法参考 http://redis-py.readthedocs.io/en/latest/#indices-and-tables
    
        # 1.获取图片验证码
            try:
                con_redis = get_redis_connection(alias='verify_codes')
            except Exception as e:
                raise forms.ValidationError("未知错误")
    
            img_key = "img_{}".format(image_uuid).encode('utf8')
            real_image_code_origin = con_redis.get(img_key)
            real_image_code = real_image_code_origin.decode('utf-8') if real_image_code_origin else None
            con_redis.delete(img_key)
        # 2. 验证手机号
            if (not real_image_code) or image_text.upper() != real_image_code:
                raise forms.ValidationError("图片验证失败")
    
        # 3.检查是否在60s内有发送记录
            sms_flag_fmt = "sms_flag_{}".format(mobile_num).encode('utf8')
            sms_flag = con_redis.get(sms_flag_fmt)
    
            if sms_flag:
                raise forms.ValidationError("获取手机短信验证码过于频繁")
    
    class CheckUsernameView(View):
        """
        GET username/(?<username>\w{5,20})/
        """
        def get(self, request, username):
            count = Users.objects.filter(username=username).count()
            data = {
                'username': username,
                'count': count,
            }
            return to_json_data(data=data)
    
    
    class CheckMobileView(View):
        """
        GET mobiles/(?P<mobile>1[3-9]\d{9})/
        """
        def get(self, request, mobile):
            # count = User.objects.filter(mobile=mobile).count()
            data = {
                'mobile': mobile,
                'count': Users.objects.filter(mobile=mobile).count()
            }
            return to_json_data(data=data)
    

    上面的代码是检查数据库中是否有一样的手机号和用户名。

    下面可以发送短信验证码了吧,烦死了!!!🤗🤗
    生产短信验证码,保存在redis数据库里,这里保存的话用到了redis的pipeline技术和redis进行交互。然后通知平台进行发送(这里用了celery技术)。

    class SmsCodesView(View):
        """
        1,获取参数
        2,验证参数
        3,发送信息
        4,保存短信验证码
        5,返回给前端
    
        POST /sms_codes/
        -检查图片验证码是否正确
        -检查是否60秒有记录
        -生成短信验证码
        -发送短信
        """
        # 1. 获取参数,
        def post(self, request):   # 表单
            json_data = request.body  # body里面包含的是什么,body就是前台给到后台的数据,ajax发过来的数据
            if not json_data:
                return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])  # 报错罢了
            dict_data = json.loads(json_data.decode('utf8'))
            form = forms.CheckImgCodeForm(data=dict_data)
    
        # 2. 校验参数
            if form.is_valid():
    
                # 获取手机号
                mobile = form.cleaned_data.get('mobile')
    
                # 创建短信验证码内容
                sms_num = "%06d" % random.randint(0, 999999)
                # 1.将短信验证码保存到数据库
                # 确保settings.py文件中有配置redis CACHE
                # Redis原生指令参考 http://redisdoc.com/index.html
                # Redis python客户端 方法参考 http://redis-py.readthedocs.io/en/latest/#indices-and-tables
    
                con_redis = get_redis_connection(alias='verify_codes')
    
                # 创建一个在60秒内是否发送记录的标记
                sms_flag_fmt = "sms_flag_{}".format(mobile).encode('utf8')
    
                # 创建保存短信验证码的标记key
                sms_text_fmt = "sms_{}".format(mobile).encode('utf8')
                # 节省通讯次数
                pl = con_redis.pipeline()  # redis管道技术
                try:
                    pl.setex(sms_flag_fmt, constants.SEND_SMS_CODE_INTERVAL, 1)  # 60秒的标志,1号模板
                    pl.setex(sms_text_fmt, constants.IMAGE_CODE_REDIS_EXPIRES, sms_num)  # 把短信验证码保存进去了
    
                # 通知redis执行命令
                    pl.execute()
                except Exception as e:
                    logger.debug('redis 执行异常{}'.format(e))
                    return to_json_data(errno=Code.UNKOWNERR, errmsg=error_map[Code.UNKOWNERR])
    
                # 2.发送短信 通知平台
                logger.info('SMS code:{}'.format(sms_num))
    
                expires = constants.SMS_CODE_REDIS_EXPIRES
                sms_tasks.send_sms_code.delay(mobile, sms_num, expires, constants.SMS_CODE_TEMP_ID)
                return to_json_data(errno=Code.OK, errmsg="短信验证码发送成功")
    
    
            else:
                # 定义错误信息列表
                err_msg_list = []
                for item in form.errors.get_json_data().values():
                    err_msg_list.append(item[0].get('message'))
                err_msg_str = '/'.join(err_msg_list)
                return to_json_data(errno=Code.PARAMERR, errmsg=err_msg_str)
    

    用户收到短信验证码后填入就大概注册完成了。

    挖坑

    pipeline是啥?

    https://blog.csdn.net/weixin_43673156/article/details/123981998

    celery是什么?

    celery异步任务

    sms_tasks.send_sms_code.delay(mobile, sms_num, expires, constants.SMS_CODE_TEMP_ID)
    

    celery队列

    Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery.

    使用场景:

    1.你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情。

    2.你想做一个定时任务,比如每天检测一下你们所有客户的资料,如果发现今天 是客户的生日,就给他发个短信祝福

    Celery原理:

    Celery 在执行任务时需要通过一个消息中间件来接收和发送任务消息,以及存储任务结果, 一般使用rabbitMQ or Redis 或者是数据库来存放消息的中间结果

    Celery优点:

    简单:一旦熟悉了celery的工作流程后,配置和使用还是比较简单的
    高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务
    快速:一个单进程的celery每分钟可处理上百万个任务
    灵活: 几乎celery的各个组件都可以被扩展及自定制
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 本篇文章主要介绍了django 发送手机验证码的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 一般容联云的教程都说配置中用sandboxapp.cloopen.com来发送验证短信,但很可能遇到网络问题。 在python3.6环境下搭建django博客项目,使用容联云时debug下显示{‘172001’: ‘网络错误’},有可能是因为_serverIP =...
  • Django手机短信验证

    2021-01-26 14:29:11
    使用图中的APIID和APIKEY开启你的免费手机短信旅程,可以使用接口下载、接口帮助实现Django手机短信验证 开始我的短信教程 1.注册页面加入两个文本框 <li> <label for="">手机号码:</label...
  • ') # 发送并校验验证码 # 校验该手机号是不是已经发送短信了,是不是在有效期内 conn = get_redis_connection('sms_code') if conn.get(phone) is not None: raise ValidationError('已经发送短信!!') # 生成...
  • 功能演示 ...点击按钮Ajax调用发送验证码功能 ...功能3:发短信 功能4:生成短信验证码(随机生成6位数字) 集成Redis 使用Redis代替session缓存, 存储数据! Redis集成到Django中! 扩展功能: 统一接...
  • 下载: pip install ronglian_sms_sdk 容联云地址:容联云通讯_短信平台、手机...然后封装发送短信验证码方法 注这里的 accId accToken appId 就是上面让记得东西 from ronglian_sms_sdk import SmsSDK import...
  • 阿里云短信服务 ...发送短信 下载模块 pip install aliyunsdkcore def phone_send(phone): # 生成验证码. code = '' for i in range(6): a = random.choice(range(10)) code += str(a) # 短信验证
  • 在各大网站上,一定都遇到过找回密码的问题,通常采用的方式是通过发送带有验证码的邮件进行身份验证,本文将介绍通过Django实现邮件找回密码功能。...生成随机验证码,发送邮件...发送邮件使用Django内置的django.cor...
  • Django短信验证码

    千次阅读 2019-01-11 11:17:26
    Django短信验证码 在阿里云中购买短信服务https://www.aliyun.com/ 将短信验证码保存到redis中, 存取速度快,减轻mysql数据库服务器压力。 redis中的键可以设置过期时间, 短信验证码可以设置2分钟过期时间,过期...
  • A/短信异步发送 B/Cenlery框架-生产者-消费者模式 C/需求分析 2、Celery Celery官方文档 A/Celery介绍: 一个简单、灵活且可靠、处理大量消息的分布式系统,可以在一台或者多台机器上运行。 Celery是一个功能完备...
  • 注册时短信验证后端逻辑
  • 腾讯云短信 首先需要注册腾讯云账号,创建短信签名、模板等。 创建签名时,在腾讯云短信签名...如何发送短信? # 1.安装SDK pip install qcloudsms_py # 2.基于SDK发送短信 #!/usr/bin/env python # -*- coding:utf-8
  • django发送邮件

    2022-04-15 16:12:20
    django利用邮箱发送邮件,以qq邮箱为例
  • 一、原理图 二、短信验证码接⼝设计 1、请求⽅式 2、请求参数:路径参数和查询字符串 3、响应结果:JSON 三、短信验证码接⼝定义 ... 发送短信验证码 :param request: :param phone: :return: '''
  • python实战项目(Django技术点) 1、容联云短信平台-注册 A/注册:(默认8元,1分钱/条) B/绑定测试号码 C/导入包yuntongxin D/修改sms.py 3处主要信息 E/修改测试手机号 F/修改路径 #测试的时候使用 from libs....
  • 模拟django发送任务 ipython中模拟发送任务:在laufing.py的同级目录打开一个cmd命令行。 4.任务在worker进程中执行。 3. Celery存储任务结果 创建一个task.py文件,并创建worker from celery import Celery app=...
  • 目录1 什么时候需要邮件2 SMTP协议3 IMAP协议4 POP3 协议5 邮件发送流程6 django发送邮件7 qq 邮箱 1 什么时候需要邮件 2 SMTP协议 主要是邮件 3 IMAP协议 主要是收邮件的协议 可以拉取部分数据 4 POP3 ...
  • 存在的问题: 虽然我们在前端界面做了60秒倒...避免频繁发送短信验证码逻辑分析 避免频繁发送短信验证码逻辑实现 提取、校验send_flag send_flag = redis_conn.get('send_flag_%s' % mobile) if send_flag: return
  • 图形验证码发送流程分析image.png注:结合上一篇的图形验证码分析短信验证码的发送我们借助容联云通讯短信平台进行短信验证码的发送功能:仔细阅读官网的开发文档,并完成如下步骤:注册并登录容联云通讯可以查看...
  • 一、准备工作 二、短信服务接口开发 2.1服务配置 2.2接口开发 三、测试短信服务 四、结束语
  • 第一:首先要有一个发送短信接口,我这里使用的聚合短信api接口https://www.juhe.cn/ 点击申请新数据–>选择即时通讯–>选择短信API服务–>点击立即申请 ...
  • django-短信网关通过网络网关发送(和接收)短信。 需要网关公司的帐户。 从分叉支持 Django 1.7
  • Django实现短信验证登录(使用第三方平台短信发送...功能3:发短信 功能4:生成短信验证码(随机生成6位数字) 集成Redis 使用Redis代替session缓存, 存储数据! 因为我们短信验证码生命周期控制的非常严格!而且数据用完
  • 腾讯云短信SDK;redis;django4.0;实现手机号短信登录,和没有注册直接注册登录。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,730
精华内容 1,092
关键字:

Django发送短信