广告小程序后端开发,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()
        prizepid\')
        if user and prizeid and admin_user.is_staff:
            # 扫码者必须是员工才可以往下走
            res = urllib.request.urlopen(PRIZEURL+"?open&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()
        getprizegetprizeid\')
        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_pgid\')
        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/\'