后台优惠券管理

后端

创建新的子应用

在项目内再创建一个coupons子应用
在项目settings.py文件中注册子应用
在coupons子应用中创建urls.py文件配置路由
然后在coupons自已子应用中编写

编写模型类

生成迁移文件进行迁移
注意外键绑定的表要导入

from django.db import models
from goods.models import SKUS
from users.models import User
# Create your models here.
#优惠券类型
class CouponType(models.Model):
    type_name=models.CharField('优惠券类型',max_length=30)
    def __str__(self):
        return self.type_name
    class Meta:
        db_table='coupon_type'

#y优惠券
class Coupon(models.Model):
    name=models.CharField('优惠券名称',max_length=100)
    brief=models.TextField('优惠券介绍',default='')
    coupon_type=models.ForeignKey(CouponType,on_delete=models.CASCADE,verbose_name='优惠券类型',null=True,blank=True)
    good=models.ForeignKey(SKUS,on_delete=models.CASCADE,verbose_name='商品',null=True,blank=True)
    coupon_num=models.IntegerField('数量',default=0)
    start_time=models.DateTimeField('开始使用时间')
    over_time=models.DateTimeField('结束使用时间')
    start_get_time=models.DateTimeField('领券开始时间')
    end_get_time=models.DateTimeField('领券结束时间')
    remark=models.CharField('备注',max_length=300)
    def __str__(self):
        return self.name
    class Meta:
        db_table='coupon'
#优惠券--类型--具体的值
class CouponTypeValue(models.Model):
    coupon=models.ForeignKey(Coupon,on_delete=models.CASCADE,verbose_name='优惠券')
    coupon_type=models.ForeignKey(CouponType,on_delete=models.CASCADE,verbose_name='优惠券类型')
    value=models.IntegerField('优惠券值',default=0)
    def __str__(self):
        # return '优惠券名-类型-value'
        return f'{self.coupon.name}-{self.coupon_type.type_name}-{self.value}'
    class Meta:
        db_table='coupon_type_value'

#用户领券表
class UserGetCoupon(models.Model):
    STATUS=(
        (0,'未使用'),
        (1,'已使用'),
        (2,'已过期')
    )
    user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='用户')
    coupon=models.ForeignKey(Coupon,on_delete=models.CASCADE,verbose_name='优惠券')
    status=models.SmallIntegerField('使用状态',default=0,choices=STATUS)
    get_time=models.DateTimeField('领券时间',auto_now_add=True)
    user_time=models.DateTimeField('使用时间',null=True,blank=True)
    def __str__(self):
        # return '用户名-优惠券名-使用状态'
        return '%s-%s-%s'%(self.user.username,self.coupon.name,self.get_status_display())
    class Meta:
        db_table='user_get_coupon'

编写序列化器

在子应用创建serializers.py文件

from rest_framework import serializers
from .models import *

class CouponSer(serializers.ModelSerializer):
    good_name=serializers.SerializerMethodField(read_only=True)
    def get_good_name(self,obj):
        if obj.good:
            return obj.good.name
        else:
            return '非单品优惠券'
    coupon_type_name=serializers.SerializerMethodField(read_only=True)
    def get_coupon_type_name(self,obj):
        return obj.coupon_type.type_name
    class Meta:
        model=Coupon
        fields='__all__'
        read_only_fields=['id']
# 优惠券类型的序列化器
class CouponTypeSer(serializers.ModelSerializer):

    class Meta:
        model=CouponType
        fields='__all__'
        read_only_fields=['id']

编写视图类

from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from .models import *
from .serializers import *
from rest_framework.generics import ListAPIView
# Create your views here.
from rest_framework.pagination import PageNumberPagination
class MyPagination(PageNumberPagination):
    page_size = 3
    max_page_size = 5
    page_query_param = 'page'
    page_size_query_param = 'pageSize'
# 优惠券的视图
class CouponViewSet(ModelViewSet):
    queryset = Coupon.objects.all()
    serializer_class = CouponSer
    lookup_field = 'pk'
    lookup_url_kwarg = 'pk'
    pagination_class = MyPagination
    #重写destroys删除方法
    def destroy(self, request, *args, **kwargs):
        obj = self.get_object()
        ser = "华为" in obj.name
        if not ser:
            return Response({"code": 400, "msg": "删除未包含华为"})
        obj.delete()
        return Response({"code": 200, "msg": "删除成功"})
    #重写create方法
    def create(self, request, *args, **kwargs):
        print(request.data)
        name = request.data.get("name")
        repe = self.get_queryset().filter(name=name).first()
        if repe:
            return Response({"code": 400, "msg": "优惠券已存在"})
        try:
            ser = self.get_serializer(data=request.data)
            ser.is_valid()
            ser.save()
        except Exception as e:
            print(e)
            return Response({"code": 400, "msg": "创建失败"})
        return Response({"code": 201, "msg": "添加成功"})
# 优惠券类型的视图
class CouponTypeAPIView(ListAPIView):
    queryset = CouponType.objects.all()
    serializer_class = CouponTypeSer
    lookup_field = 'pk'
    lookup_url_kwarg = 'pk'

配置路由

# from django.contrib import admin
from django.urls import path
from rest_framework import routers
from .views import *
urlpatterns = [
    #加载所有的优惠券类型
    path('types/',CouponTypeAPIView.as_view())
]
router=routers.SimpleRouter()
router.register('coupon',CouponViewSet)
urlpatterns+=router.urls


电子促销信息管理平台和移动终端管理系统是一套能让厂家和店家通过电脑发布和管理促销信息,让消费者通过手机获取促销信息并与商家产生互动的第三方服务集成系统。系统向各参与方开放,提供前端与后台管理接口。系统向商家收费,而消费者可以免费使用。 我们的系统围绕消费者持有的手机为中心构造,商家不必要再增加硬件配套,在系统应用和成本方面具有很大优势。 通过独特算法,我们给每个商家分配识别代码。此代码可转换成二维码,经过带有摄像头的智能手机终端中嵌入的图像处理软件,向系统传输并确认商家身份。 另外,通过手机中的嵌入软件,我们能抓取终端中的有关信息,向系统传输并记录。 这些信息构成了系统的有效信息链,实现系统的基本功能。 通过我们的系统,可实现:一,能有效控制优惠券的发布数量;二,电子优惠券不可被重复使用;三,电子优惠券不能在结账时才被下载使用,从而真正起到优惠券本身的促销作用;四,商家在电子优惠券使用后,能保留有效相关凭证,有利于查账和核对。   本集成系统是基于移动互联网的应用。通过服务器端的设计安排,以及手机终端的app应用,实现促销信息发布、管理以及兑换操作的电子化、移动化。通过独特代码的使用,使优惠券的发布和兑换形成一个有机的统一的实时的信息管理系统。有关独特代码以及整体系统的设计和使用方法,已申请相关专利。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值