美多商城项目发送短信优化

#发送短信优化

  • 阻止请求频繁 + 管道优化redis储存 + celery异步

    class SMS_CODEView(APIView):
        def get(self,request,mobile):
            conn = get_redis_connection('sms_code')
            flag = conn.get('sms_code_flag_%s'%mobile)
            if flag:
                return Response({'message':'请求频繁'})
            sms_code = '%06d'%(randint(0,999999))
            # 使用管道,连接redis的优化
            pl = conn.pipeline()
            pl.setex('sms_code_%s'%mobile,300,sms_code)
            pl.setex('sms_code_flag_%s'%mobile,60,123)
            pl.execute()
            # 异步执行
            # t = Thread(target=send_sms_code,args=(mobile,sms_code))
            # t.start()
            # 借助于celery来实现
            send_sms_code.delay(mobile,sms_code)
            return Response({'message':'OK'})
    
    • 用户模型类创建方法
    class User(AbstractUser):
        """用户模型类"""
        mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')
        class Meta:
            db_table = 'tb_users'
            verbose_name = '用户'
            verbose_name_plural = verbose_name
    
    • celery异步执行线程
    @app.task(name='send_sms_code')
    def send_sms_code(mobile,sms_code):
        ccp = CCP()
        ccp.send_template_sms(mobile, [sms_code, 5], 1)
    
  • users应用中urls

    url(r'sms_codes/(?P<mobile>1[3-9]\d{9})/$',views.SMS_CODEView.as_view()),
    
    url(r'usernames/(?P<username>\w{5,20})/count/$',
        	views.UsernameCountView.as_view()),
    
    url(r'mobiles/(?P<mobile>1[3-9]\d{9})/count/$',
        	views.MobileCountView.as_view()),
    
  • 用户注册模块验证是否重名

    class UsernameCountView(APIView):
        def get(self, request,username):
            count = User.objects.filter(username=username).count()
            data = {
                'username':username,
                'count':count
            }
            return Response(data)
    
  • 注意: 因为修改了目录的结构, 要修改的路径有

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "demo21.settings.dev")
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    import sys
    sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值