《VUE+Django:手把手教你打造自己的电商独立站》专栏写作大纲
《VUE+Django:手把手教你打造自己的电商独立站》2.5 私有页面设计
本来数据结构是在后端才会用到,但是在实际项目中,由于前后端分离,这部分的设计都是在开发之前就要达成一致的,因此我放在前面进行说明。
由于我们在后端选择的是Django框架,接下来设计数据结构的时候会结合Django提供的特性进行说明。Django对各种数据库提供了很好的支持,包括PostgreSQL、MySQL、SQLite和Oracle,而且为这些数据库提供了统一的API方法,这些API统称为ORM框架。通过使用Django内置的ORM框架可以实现数据库连接和读写操作。
ORM框架是一种程序技术,用于实现面向对象编程语言中不同类型系统的数据之间的转换。从效果上说,它创建了一个可在编程语言中使用的“虚拟对象数据库”,通过对虚拟对象数据库的操作从而实现对目标数据库的操作,虚拟对象数据库与目标数据库是相互对应的。
基于概要设计的用户旅程和上一节的页面设计,有以下类别的数据结构需要设计
1.用户信息
2.商品信息
3.订单信息
4.购物车信息
5.收藏夹信息
6.询单信息
2.6.1 用户信息表
用户信息表保存了用户的基本信息。可以把内部员工的账号和客户的账号分开管理,也可以合一。由于我们在后端使用了Django框架,而Django提供了一个默认的AbstractUser,提供了一些基本字段。我们可以在继承这个模型的基础上,在增加一些个性化的字段。
| No. | 字段 | 含义 | 类型 |
|---|---|---|---|
| 1 | username | 用户名 | CharField |
| 2 | password | 密码 | CharField |
| 3 | last_login | 上次登录时间 | DateTimeField |
| 4 | is_superuser | 是否超级用户 | BooleanField |
| 5 | first_name | 姓 | CharField |
| 6 | last_name | 名 | CharField |
| 7 | 邮箱地址 | CharField | |
| 8 | is_staff | 是否员工 | BooleanField |
| 9 | is_active | 是否激活 | BooleanField |
| 10 | date_joined | 首次生成时间 | DateTimeField |
| 11 | phone | 电话 | CharField |
| 12 | user_status | 用户登录状态 | CharField |
| 13 | user_avatar | 用户头像 | CharField |
| 14 | nickname | 用户昵称 | CharField |
2.6.2 商品信息表
商品应该具备基本的名称、价格、类别、库存字段,由于在首页的不同位置显示,以及随时间有不同的销售类别,需要额外增加一些字段。
| No. | 字段 | 含义 | 类型 |
|---|---|---|---|
| 1 | product_name | 商品名称 | CharField |
| 2 | price | 价格 | FloatField |
| 3 | type | 商品物理类别 | CharField |
| 4 | catagory | 商品销售类别 | CharField |
| 5 | size | 商品尺寸 | CharField |
| 6 | show_flag | 首页展示类别 | CharField |
| 7 | img_path | 商品大图 | CharField |
| 8 | batch_imgs | 商品轮播图 | CharField |
| 9 | remained_nums | 库存数量 | IntegerField |
| 10 | desp | 商品描述 | CharField |
2.6.3 订单信息
订单可能在用户浏览商品时生成,也可能是用户把商品加入购物车之后从购物车生成,支付还涉及电子支付的信息
| No. | 字段 | 含义 | 类型 |
|---|---|---|---|
| 1 | orderid | 订单流水号 | CharField |
| 2 | ordertime | 订单生成时间 | DateTimeField |
| 3 | ordername | 订单商品名称 | CharField |
| 4 | orderprice | 订单总价格 | FloatField |
| 5 | orderstatus | 订单支付状态 | CharField |
| 6 | orderqrcode | 订单支付的二维码图片 | CharField |
| 7 | nums | 订单商品数量 | IntegerField |
| 8 | orderuser_id | 订单关联的用户id | CharField |
| 9 | cart_id | 订单关联的购物车记录id | CharField |
| 10 | product_id | 订单关联的商品id | CharField |
2.6.4 购物车信息
用户把商品加入购物车之后,生成一条记录,需要记录用户选择的商品信息、数量信息和后续生成订单的状态信息
| No. | 字段 | 含义 | 类型 |
|---|---|---|---|
| 1 | cartid | 购物车记录流水号 | CharField |
| 2 | carttime | 生成时间 | DateTimeField |
| 3 | cartname | 关联的商品名称 | CharField |
| 4 | singleprice | 商品单价 | FloatField |
| 5 | totalprice | 商品总价 | FloatField |
| 6 | nums | 商品数量 | IntegerField |
| 7 | cartstatus | 是否生成订单 | CharField |
| 8 | cartuser_id | 关联的用户id | CharField |
| 9 | product_id | 关联的商品id | CharField |
2.6.5 收藏夹信息
收藏夹信息比较简单,主要是方便用户收藏感兴趣的商品
| No. | 字段 | 含义 | 类型 |
|---|---|---|---|
| 1 | status | 收藏商品状态 | CharField |
| 2 | product_id | 关联的商品id | ForeignKey |
| 3 | user_id | 关联的用户id | ForeignKey |
2.6.6 询单信息
用户在浏览某些商品的详情页面时,如果对这个商品很有兴趣,希望了解更多信息,可以在这里发起询单。商家在查看询单后进行回复,用户查看商家回复后可以继续追加问题。整体类似一个博客的结构。包含了原始询单和关联的多个评论信息
| No. | 字段 | 含义 | 类型 |
|---|---|---|---|
| 1 | time | 询单生成的时间 | DateTimeField |
| 2 | customername | 客户名字 | CharField |
| 3 | country | 客户国家 | CharField |
| 4 | 客户邮箱地址 | CharField | |
| 5 | productname | 商品名称 | CharField |
| 6 | user_id | 关联的用户id | ForeignKey |
| 7 | product_id | 关联的商品id | ForeignKey |
每个评论下可以添加多个评论回复,评论的数据结构如下表
| No. | 字段 | 含义 | 类型 |
|---|---|---|---|
| 1 | time | 询单生成的时间 | DateTimeField |
| 2 | description | 评论内容 | CharField |
| 3 | productname | 商品名称 | CharField |
| 4 | user_id | 关联的用户id | ForeignKey |
| 5 | enquiry_id | 关联的询单id | ForeignKey |
到这里,所有会使用到的数据表结构都设计好了,在后端开发中,我们将基于Django的models实现它们。