仿天猫网站开发6:用户购物流程梳理

概述

需要登录的前台功能,其实就是整个购物流程。也是项目中的一个重要组成部分,我将这部分称为用户操作(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值