学习网站项目学习 - Django - 优惠券系统、结算系统

目录

一、优惠券类别表结构设计

1-1 优惠券类别

1-2 表结构设计思路

1-3 表结构实现代码

二、结算页面

2-1 前端数据渲染需求

2-2 购物车数据

2-3 结算系统

2-3-1 增加(post)

 2-3-2 修改(put)

 2-3-3 查看(get)

 2-3-4 删除(del)

三、金额结算,跳转支付宝接口


 

一、优惠券类别表结构设计

1-1 优惠券类别

  • 用户个人贝利 - 可替代真实货币
  • 全站优惠券
    • 满减券 - 满100 -10券
    • 立减券 - 不限额度立减10元
    • 打折券 - 折扣95%
  • 指定课程优惠券
    • 满减券
    • 立减券
    • 打折券

1-2 表结构设计思路

  • 贝利 - 用户信息表内单独字段
  • 满减券 -最低消费字段 + 优惠金额字段
  • 立减券 - 优惠金额字段
  • 打折券 - 折扣百分比字段

1-3 表结构实现代码

class UserInfo(models.Model):
    name = models.CharField(max_length=64)
    pwd = models.CharField(max_length=64)
    # 用户贝里可替代真实金额
    bely=models.IntegerField(default=100)
    def __str__(self):
        return self.name


# -------------------优惠券相关--------------------

class Coupon(models.Model):
    '''
    优惠券生成规则 = 面向后台管理员
        - 三种优惠券生成方式
            -立减券 - money_equivalent_value 和 minimum_consume
            -满减券 = money_equivalent_value
            -折扣券 - off_percent
        - ContentType组件相关
            - content_type:外键ContentType表,设置删除记录二者同时删除
            - object_id
            - content_object:用于数据的查询和插入
    '''
    name = models.CharField(max_length=64, verbose_name="活动名称")
    brief = models.TextField(blank=True, null=True, verbose_name="优惠券介绍")
    coupon_type_choices = ((0, '立减券'), (1, '满减券'), (2, '折扣券'))
    coupon_type = models.SmallIntegerField(choices=coupon_type_choices, default=0, verbose_name="券类型")

    money_equivalent_value = models.IntegerField(verbose_name="等值货币", blank=True, null=True)
    off_percent = models.PositiveSmallIntegerField("折扣百分比", help_text="只针对折扣券,例7.9折,写79", blank=True, null=True)
    minimum_consume = models.PositiveIntegerField("最低消费", default=0, help_text="仅在满减券时填写此字段")

    content_type = models.ForeignKey(ContentType, blank=True, null=True, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField("绑定课程", blank=True, null=True, help_text="可以把优惠券跟课程绑定")
    content_object = GenericForeignKey('content_type', 'object_id')

    quantity = models.PositiveIntegerField("数量(张)", default=1)
    open_date = models.DateField("优惠券领取开始时间")
    close_date = models.DateField("优惠券领取结束时间")
    valid_begin_date = models.DateField(verbose_name="有效期开始时间", blank=True, null=True)
    valid_end_date = models.DateField(verbose_name="有效结束时间", blank=True, null=True)
    coupon_valid_days = models.PositiveIntegerField(verbose_name="优惠券有效期(天)", blank=True, null=True,
                                                    help_text="自券被领时开始算起")
    date = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = "31. 优惠券生成规则"

    def __str__(self):
        return "%s(%s)" % (self.get_coupon_type_display(), self.name)


class CouponRecord(models.Model):
    """优惠券发放、消费纪录 - 面向用户"""
    # 跟优惠券生成规则是一对多的关系 - 一种优惠券有30张,则发放记录就有30条
    coupon = models.ForeignKey("Coupon", on_delete=models.CASCADE)
    number = models.CharField(max_length=64)
    # 一对多,一个用户有多张优惠券,一张优惠券只能给一个用户
    user = models.ForeignKey("UserInfo", verbose_name="拥有者", on_delete=models.CASCADE)

    status_choices = ((0, '未使用'), (1, '已使用'), (2, '已过期'))
    status = models.SmallIntegerField(choices=status_choices, default=0)
    get_time = models.DateTimeField(verbose_name="领取时间", help_text="用户领取时间")
    used_time = models.DateTimeField(blank=True, null=True, verbose_name="使用时间")

    class Meta:
        verbose_name_plural = "32. 优惠券发放、消费纪录"

    def __str__(self):
        return '%s-%s-%s' % (self.user, self.number, self.get_status_display())

二、结算页面

2-1 前端数据渲染需求

2-2 购物车数据

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值