概述
需要登录的前台功能,其实就是整个购物流程。也是项目中的一个重要组成部分,我将这部分称为用户操作(operation)。其实在写此文章前,我已经将功能基本完成了。但是还是发现了一些问题,特别是由于前期没有很好的规划,导致后期URL关系混乱。想到我在做游戏策划时,接触的游戏开发,都是以游戏文档作为基础。而我也曾经一直致力于写一篇逻辑无懈可击的文档。以此来分担程序同学的工作量。因此我决定为了提高之后的项目开发效率,在此之前,先静下心来梳理好业务流程、之后将各个环节和表关系搞清楚,再完成最后的收尾工作。
购物流程
买家用户在购物时,进行的流程如下图所示:
id="embed_dom" src="https://www.processon.com/embed/5922b367e4b0bb04c34c0dfc">上图就是我整理的购物流程,下面对表关系进行梳理,之后对各个功能模块进行分开解析。
购物流程与表关系梳理
购物流程主要围绕两个表,分别是OrderItem和Order表。对应的数据模型是operation/models.py中的两个类,代码如下:
# _*_encoding:utf8_*_
from __future__ import unicode_literals
from users.models import UserProfile
from product.models import *
# Create your models here.
class Order(models.Model):
orderCode = models.CharField(max_length=100, verbose_name=u"订单号")
address = models.TextField(verbose_name=u"收货地址")
post = models.CharField(max_length=100, verbose_name=u"邮政编码")
receiver = models.CharField(max_length=100, verbose_name=u"收货人信息")
mobile = models.CharField(max_length=11, verbose_name=u"手机号码")
userMessage = models.TextField(verbose_name=u"用户备注信息")
createDate = models.DateTimeField(verbose_name=u"创建日期", default=timezone.now)
payDate = models.DateTimeField(verbose_name=u"支付日期", default=timezone.now)
deliveryDate = models.DateTimeField(verbose_name=u"发货日期", default=timezone.now)
confirmDate = models.DateTimeField(verbose_name=u"确认收货日期", default=timezone.now)
status = models.CharField(choices=(("waitPay", u"等待支付"),
("waitDelivery", u"等待发货"),
("waitConfirm", u"等待收货"),
("finish", u"交易完成"),
("delete", u"订单删除"),
), default="waitPay",
max_length=100, verbose_name=u"订单状态")
user = models.ForeignKey(UserProfile, verbose_name=u"用户")
class Meta:
verbose_name = u"订单"
verbose_name_plural = verbose_name
def get_order_item(self):
return self.orderitem_set.all()
def get_order_count(self):
return self.orderitem_set.all().count()
class OrderItem(models.Model):
number = models.IntegerField(verbose_name=u"购买数量")
product = models.ForeignKey(Product, verbose_name=u"产品")
order = models.ForeignKey(Order, verbose_name="订单", null=True, blank=True) # 没有订单时为null
user = models.ForeignKey(UserProfile, verbose_name="用户")
status = models.CharField(choices=(("default", u"初始状态"),
("waitReview", u"等待评价"),
("finish", u"交易完成")),
max_length=20, verbose_name=u"订单项状态", default="default")
class Meta:
verbose_name = u"订单项"
verbose_name_plural = verbose_name
行为 | 对表的操作 |
---|---|
立即购买 | 新建OrderItem |
加入购物车 | 新建OrderItem |
查看购物车 | 显示order_id为空的OrderItem |
选中购物车中的商品 | 选中OrderItem |
结算页面 | 显示选中的OrderItem |