zoukankan      html  css  js  c++  java
  • 广告小程序后端开发(17.优惠券系统:获取未兑付未过期的我的奖品,获取优惠券参数和兑付优惠券)

    1.获取未兑付未过期的我的奖品

    1.在apps/user_operation/views.py中新建GeMyPrize:

    class GeMyPrize(APIView):
        """
        获取我的奖品
        """
        renderer_classes = [JSONRenderer]  # 渲染器
    
        def get(self,request):
            token = request.GET.get('token')
            user = UserProfile.objects.filter(token=token).first()
            if user:
                p_list=GetPrize.objects.filter(user=user,end_time__gt=datetime.now(),status='0').order_by('-add_time')
                p=GetPrizeModelSerializer(p_list,many=True)
                return Response(p.data)
            else:
                return HttpResponse('参数不足')

    2.在apps/user_operation/urls.py内配置路由:

    from django.urls import path
    from .views import GetMessage,ReadMessage,DelMessage,BuyUseJiFen,GeMyPrize
    
    urlpatterns = [
        path('getmessage/',GetMessage.as_view()),
        path('readmessage/',ReadMessage.as_view()),
        path('delmessage/',DelMessage.as_view()),
        path('buyusejifen/',BuyUseJiFen.as_view()),
        path('getmyprize/',GeMyPrize.as_view()),
    ]

    2.获取优惠券参数和兑付优惠券

    1.简单原理:

    扫码操作于普通小程序端,而要直接操作广告小程序的数据库必须要在广告小程序端,所以需要用两个视图类进行对接配合,其中两个视图类的get负责获取优惠券参数的功能实现,post则负责兑付优惠券的功能实现。

    2.在apps/user_operation/models.py中新建属于普通小程序段的兑付表PayPrize:

    class PayPrize(models.Model):
        """奖品兑付表小程序端"""
        admin_user=models.CharField(max_length=20,verbose_name='职工微信名',null=True,blank=True)
        user = models.CharField(max_length=20, verbose_name='微信用户名', null=True, blank=True)
        prize_title = models.CharField(max_length=20, verbose_name='奖券名', null=True, blank=True)
        add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间")
    
        class Meta:
            verbose_name = "小程序端兑付表"
            verbose_name_plural = verbose_name
    
        def __str__(self):
            return self.prize_title

    执行数据更新命令:

    python manage.py makemigrations
    python manage.py migrate

    3.在apps/user_operation/adminx.py内注册:

    class PayPrizeAdmin(object):
        list_display = ["admin_user","user","prize_title","add_time"]
        list_filter = ["admin_user","user","prize_title","add_time"]
    
    xadmin.site.register(PayPrize, PayPrizeAdmin)

    4.在apps/user_operation/views.py中新建类CheckingPirze,EditGetPrize:

    class CheckingPirze(APIView):
        """扫码访问小程序验证"""
        renderer_classes = [JSONRenderer]  # 渲染器
    
        def get(self,request):
            token = request.GET.get('token')
            # 扫码者
            admin_user = UserProfile.objects.filter(token=token).first()
            openid = request.GET.get('oid')
            user = UserProfile.objects.filter(open_id=openid).first()
            prizeid=request.GET.get('pid')
            if user and prizeid and admin_user.is_staff:
                # 扫码者必须是员工才可以往下走
                res = urllib.request.urlopen(PRIZEURL+"?openid="+openid+"&prizeid="+prizeid)
                # print('1',res)
                # print('查询结果',type(res.read().decode("utf-8")))
                obj = json.loads(res.read().decode("utf-8"))
                # print('obj',obj)
                re_user=UserProfileModelSerializer(user)
                return Response(data=({'getprize':obj,'user':re_user.data}))
            else:
                return HttpResponse('参数不足')
    
        def post(self,request):
            token = request.POST.get('token')
            # 扫码者
            admin_user = UserProfile.objects.filter(token=token).first()
            getprizeid=request.POST.get('getprizeid')
            if getprizeid and admin_user.is_staff:
                # 扫码者必须是员工才可以往下走
                data_dict = {"gid":getprizeid}
                data_string = urllib.parse.urlencode(data_dict)
                last_data = bytes(data_string, encoding='utf-8')
                res = urllib.request.urlopen(PRIZEURL,data=last_data)
                st=res.read().decode("utf-8")
                dict_st=eval(st)
                # print('res:',dict_st)
                # if res.read().decode("utf-8")=="200":
                # print('code:',type(dict_st["code"]))
                if dict_st["code"]=='200':
                    # print('username',dict_st["user"])
                    # print('title', dict_st["title"])
                    pay_prize=PayPrize()
                    pay_prize.admin_user=admin_user.nickName
                    pay_prize.user=dict_st["user"]
                    pay_prize.prize_title=dict_st["title"]
                    pay_prize.save()
                return HttpResponse(dict_st["code"])
            else:
                return HttpResponse('参数不足')
    
    
    class EditGetPrize(APIView):
        """get查询,post修改"""
        renderer_classes = [JSONRenderer]  # 渲染器
    
        def get(self, request):
            openid = request.GET.get('openid')
            user = UserProfile.objects.filter(open_id=openid).first()
            prizeid = request.GET.get('prizeid')
            if user and prizeid:
                prizeid=int(prizeid)
                prize = Prize.objects.filter(id=prizeid).first()
                p=GetPrize.objects.filter(user=user,prize=prize).first()
                re_p=GetPrizeModelSerializer(p)
                if p:
                    return Response(re_p.data)
                else:
                    #查无领取记录
                    return HttpResponse('404')
            else:
                return HttpResponse('参数不足')
    
        def post(self, request):
            get_pid=request.POST.get('gid')
            if get_pid:
                get_pid=int(get_pid)
                # print('getid',get_pid)
                pr=GetPrize.objects.filter(id=get_pid,end_time__gt=datetime.now()).first()
                if pr:
                    if pr.status=='1':
                        # 已经兑付过的了
                        re={'code': '405', 'msg': '此奖品已经兑付过'}
                        return Response(data=re)
                    else:
                        pr.status = '1'
                        pr.save()
                        user = pr.user
                        title = pr.title
                        msg = Message()
                        msg.user = user
                        msg.content = "您成功使用了积分奖券:" + title
                        msg.save()
                        # print('新消息',msg.content)
                        re = {'code': '200', 'msg': '兑奖成功','title':title,'user':user.nickName}
                        return Response(data=re)
                else:
                    # 奖品已过期
                    re = {'code': '404', 'msg': '此奖品不存在或已过期'}
                    return Response(data=re)
            else:
                re = {'code': '403', 'msg': '参数不足'}
                return Response(data=re)

    5.在apps/user_operation/urls.py内配置路由:

    from django.urls import path
    from .views import GetMessage,ReadMessage,DelMessage,BuyUseJiFen,CheckingPirze,EditGetPrize,GeMyPrize
    
    urlpatterns = [
        path('getmessage/',GetMessage.as_view()),
        path('readmessage/',ReadMessage.as_view()),
        path('delmessage/',DelMessage.as_view()),
        path('buyusejifen/',BuyUseJiFen.as_view()),
        path('checkingprize/',CheckingPirze.as_view()),
        path('editgetprize/',EditGetPrize.as_view()),
        path('getmyprize/',GeMyPrize.as_view()),
    ]

     6.在settings.py中配置:

    # 广告平台兑奖url
    PRIZEURL='http://127.0.0.1:8000/useroperation/editgetprize/'
  • 相关阅读:
    【初探Spring】------Spring IOC(二):初始化过程---简介
    《Effective java》-----读书笔记
    【初探Spring】------Spring IOC(一)
    Nuxt 项目性能优化调研
    一个 API 设计上的失误
    mpvue 初体验之改写【车标速查】
    微信小程序开发初体验
    pointer-events: none 的两个应用场景
    小议短网址系统的设计(有些时候,需要换个角度思考问题)
    关于 parseInt 的一道有意思的面试题
  • 原文地址:https://www.cnblogs.com/xuepangzi/p/11010180.html
Copyright © 2011-2022 走看看