github源码地址

静态文件地址

在线地址:http://39.108.176.210

网站首页

登录页面

商品详情页

购物车页

一、需求分析:

类似于京东的生鲜超市,对于用户而言能够实现登陆,注册,商品浏览,购买等,对于商家而言,实现商品的管理,即添加,修改,删除等。

平台:管理员、业务员、用户一、业务员平台线下:负责商品的信息采集,购买。并将检验过的商品信息归类后交于后台管理人员具体商品信息大致如下:新鲜水果 商品的种类名称|----草莓:具体商品名称,价格,描述,单位|----苹果等
                    海产海鲜 |----三文鱼:价格,描述,单位|----扇贝等二、管理员  线下:与业务员对接商品信息,并在此进行审核   线上:利用后台管理平台进行商品信息的增删改查。三、用户  线上:    具体功能        身份验证        |----用户的注册,登录,用户中心      商品浏览        |----购物网站首页,某一类商品列表页,具体商品页      商品购买        |----商品加入购物车,订单提交,购买

具体功能请参考:

[模板继承:https://www.cnblogs.com/welan/p/9232644.html]

二、实现方式

web app:

根据需求将web app分为四块

daily_fresh_demo  ----deily_fresh_demo  ----df_cart    #对商品购物车管理  ----df_goods  #商品以及后台管理  ----df_user    #用户管理  ----df_order   #订单管理

三、开发环境:

python>3.5

Django>2.0

pychram

navicate

mysql 5.7

四、model数据库设计:

将具体数据表分化到具体的app中

“()”括号内为外键关联,

(1)、当一对多关系时例如生鲜分类对生鲜具体商品, 将关系维护在多的那张表中,即在具体商品表中维护(2)、当多对多关系,则新建一张表,在再第三张表中维护表关系
用户表与商品表则将关系维护在购物车表中
app1、df_goods商品分类信息  水果 海鲜等TypeInfo:ttitle名称具体商品信息GoodsInfo:gtitle名称 gpic图片 gprice价格 gunit库存 gclick点击量 gjianjie简介 gkucun库存 gcontent介绍 gtype分类(TypeInfo)2、df_user用户信息Userinfo: uname名字 upwd密码 uemail邮箱 ushou收货地址 uaddress地址 uyoubian邮编 uphone电话商品浏览:用户浏览过的商品GoodsBrowser: user用户名(UserInfo) good商品(GoodsInfo)3、df_order大订单:比如一个大订单中包含两斤橘子,三斤苹果等小订单OrderInfo:oid订单号 user用户名(UserInfo) odate订单日期 oIspay是否支付 ototal订单总价 oaddress订单收货地址小订单:两斤橘子等OrderDetailInfo:goods商品(GoodsInfo) order属于哪个大订单(OrderInfo) price价格 count数量4、df_cart购物车CartInfouser用户名(UserInfo) goods商品(GoodsInfo) count数量

五、项目生成:

添加环境变量

打开cmd进入工作空间执行命令:

django-admin.py startproject daily_fresh_demo

执行之后便可以看到工作空间里有两层daily_fresh_demo文件

daily_fresh_demo----deily_fresh_demo    ----__init__.py    ----settings.py    ----urls.py    ----wsgi.py  

当然直接在pycharm中生成工程更加方便

六、配置数据库

6.1、使用sqlite

这里由于数据量较少的关系使用本地自带的sqlite

#settings.py

DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),},'OPTIONS':{'TIMEOUT': 20, } }

使用mysql:

前提是要在安装pymsql,cmd中输入

pip install pymysql

设置中:

#settings.pyDATABASES = {'default': {'ENGINE': 'django.db.backends.mysql',   # 数据库引擎'NAME': '',       # 你要存储数据的库名,事先要创建之'USER': '',         # 数据库用户名'PASSWORD': '',     # 密码'HOST': '',    # 主机'PORT': '',         # 数据库使用的端口}
}

在项目文件夹下的__init__.py添加如下代码,作用是每次启动工程时都能启动数据库链接

#daily_fresh_demo#  ----deily_fresh_demo#    ----__init___.py
import pymysql
pymysql.install_as_MySQLdb()

另外在使用mysql需要保证,在mysql中你要使用的存在相应的数据库。

七、创建相应的app

python manage.py startapp df_userpython manage.py startapp df_orderpython manage.py startapp df_cartpython manage.py startapp df_goods

程目录结构如下

八、数据models建立

需要注意的是:开发过程中大多是首先设计用户models的。

另外由于种种原因,请忽略什么PE8规范,pythonic写法,变量命名规则,暂时看懂就好

8.1、df_user

#df_user
#----models.pyfrom django.db import models
# Create your models here.class UserInfo(models.Model):uname=models.CharField(max_length=20)upwd=models.CharField(max_length=40)uemail=models.CharField(max_length=30)ushou=models.CharField(max_length=20,default="")uaddress=models.CharField(max_length=100,default="")uyoubian=models.CharField(max_length=6,default="")uphone=models.CharField(max_length=11,default="")# default,blank是python层面的约束,不影响数据库表结构,修改时不需要迁移 python manage.py makemigrationsclass GoodsBrowser(models.Model):user=models.ForeignKey('UserInfo', on_delete=models.CASCADE)good=models.ForeignKey('df_goods.GoodsInfo', on_delete=models.CASCADE)

8.2、df_goods

#df_goods#----models.py

from django.db import models
from tinymce.models import HTMLField#使用富文本编辑框要在settings文件中安装
#将一对多的关系维护在GoodsInfo中维护,另外商品信息与分类信息都属于重要信息需要使用逻辑删除# Create your models here.
class TypeInfo(models.Model):#商品分类信息  水果 海鲜等isDelete = models.BooleanField(default=False)#逻辑删除ttitle = models.CharField(max_length=20)def __str__(self):#这里定义在admin中要显示的内容# return self.ttitle.encode('utf-8')return self.ttitleclass GoodsInfo(models.Model):#具体商品信息isDelete = models.BooleanField(default=False)#逻辑删除gtitle = models.CharField(max_length=20)#商品的名称gpic = models.ImageField(upload_to='df_goods')#关联图片目录gprice = models.DecimalField(max_digits=5, decimal_places=2)#商品价格小数位为两位,整数位为3位gunit = models.CharField(max_length=20, default='500g')#商品单位kg或者个数gclick = models.IntegerField()#商品点击量gjianjie = models.CharField(max_length=200)#商品简介gkucun = models.IntegerField()#商品库存gcontent = HTMLField()#商品介绍gtype = models.ForeignKey(TypeInfo, on_delete=models.CASCADE)#外键关联TypeInfo表# gadv = models.BooleanField(default=False)#商品是否推荐def __str__(self):# return self.gtitle.encode('utf-8')return self.gtitle# python3中 __str__ 不能接收bytes类型的数据,这和python2/3的编解码方式是有关系的。

8.3、df_order

#df_order
#----models.pyfrom django.db import models# Create your models here.
class OrderInfo(models.Model):#大订单oid = models.CharField(max_length=20, primary_key=True)#订单号user = models.ForeignKey('df_user.UserInfo', on_delete=models.CASCADE)#确定哪个用户的订单odate = models.DateTimeField(auto_now=True)oIsPay = models.BooleanField(default=False)#当前订单是否支付,默认为否ototal = models.DecimalField(max_digits=8, decimal_places=2)oaddress = models.CharField(max_length=150)#虽然订单总价可以由多个商品的单价以及数量求得,但是由于用户订单的总价的大量使用,忽略total的冗余度#无法实现:真实支付,物流信息class OrderDetailInfo(models.Model):#大订单中的具体某一商品订单goods = models.ForeignKey('df_goods.GoodsInfo',on_delete=models.CASCADE)#关联商品信息order = models.ForeignKey('OrderInfo', on_delete=models.CASCADE)#关联大订单,确定属于某一个大订单中price = models.DecimalField(max_digits=6, decimal_places=2)#某一类商品订单的价格最高达9999.99count = models.IntegerField()

8.4、df_cart

#df_cart
#----models.pyfrom django.db import modelsclass CartInfo(models.Model):user = models.ForeignKey('df_user.UserInfo', on_delete=models.CASCADE)goods = models.ForeignKey('df_goods.GoodsInfo', on_delete=models.CASCADE)#在同级工程目录下引用外键count = models.IntegerField()#记录用户买个多少单位的商品

8.5、执行迁移

最后在Terminal终端先后执行

python manage.py makemigrations
python manage.py migrate

进行迁移即可。

在pycharm的工具栏中Tools—>Run manage.py Task也可以逐个app进行迁移。

8.6、执行结果

在navicate就可以看到我们想要的结果,相应的数据表

以“df_”开头的为我们自己创建的,其他为django系统自动生成的。

九:在线演示

在线地址:http://39.108.176.210

账号:weilanhanf

密码:weilanhanf

后台管理:http://39.108.176.210

账号:root

密码:rootroot

另:还有小问题没有修复,您可以直接提交issue。非常感谢您的star。

 

十、源码下载

附github源码地址:https://github.com/weilanhanf/daily_fresh_demo

转载于:https://www.cnblogs.com/welan/p/9231530.html

天天生鲜项目实战-思路 数据库设计相关推荐

  1. 天天生鲜项目实战(一)

    github地址:https://github.com/AboutTigerShark/dailyfresh 1.项目的创建(ubuntu) 1.首先我们要创建一个虚拟环境并指定python版本,这里 ...

  2. 天天生鲜项目开发笔记

    天天生鲜项目开发笔记 说在前面的话 大学四年,忙忙碌碌,什么都学了,又好像什么都没学,总之要毕业了,毕设题目是"生鲜配送系统",B站上找到了一个天天生鲜的项目开发教程,之后文章记录 ...

  3. JAVA框架项目实战:系统公告设计及实现

    项目实战:系统公告设计及实现 本期涉及内容:JDBC.点击即可跳转复习JDBC 1.需求及业务设计 项目(公告系统) 1.需求(为行政人员发布公告,通知提供遍历) 2.原型设计(系统做完以后是什么样子 ...

  4. 项目小结之数据库设计

    最近做了一个小项目完整的数据库设计,想总结一些设计上的所得,希望大家多多指教. 有时一个项目,普通程序员一般不会去接触数据库设计,一般都有专业的DBA或是老程序员去设计,下面是我推测的几点可能原因: ...

  5. 项目开发周期与数据库设计对比

    项目开发周期与数据库设计对比 项目开发周期 数据库设计 需求分析 分析客户的业务和数据处理需求. 1.         收集信息(不怕多,但怕漏): 2.         标识对象: 3.       ...

  6. 团队作业第五次—项目系统设计与数据库设计

    作业描述 所属课程 软件工程1916|W(福州大学) 作业要求 团队作业第五次-项目系统设计与数据库设计 团队名称 待就业六人组 作业目标 宏观的对系统的整体结构设计,并在此基础上,进行数据库设计 系 ...

  7. 项目系统设计与数据库设计(那周余嘉熊掌将得队)

    作业格式 课程名称:软件工程1916|W(福州大学) 作业要求:团队作业第五次-项目系统设计与数据库设计 团队名称: 那周余嘉熊掌将得队 作业目标:进行数据库设计和系统设计,完善类图,绘制评审表 团队 ...

  8. GO语言开发天天生鲜项目第三天 用户模块开发

    项目分析 一.项目架构 二.数据库表设计 用户模块 ##一.用户注册 用户通过我们的网站购买商品前,必须要登录.如果,该用户在我们的网站上没有账号,那么必须进行注册.下面我们看一下注册的具体实现过程( ...

  9. 【Django 天天生鲜项目05】订单(Mysql事务、并发处理、支付宝支付、评论)

    本部分涉及订单的生成.并发处理.支付.评论等 关键:MySQL事务.并发处理的悲观锁/乐观锁.支付宝SDK 的使用...... 仅作为个人笔记! 目录 2.创建订单 3.订单生成 3.1. MySQL ...

  10. Django通过celery 异步发送邮件 : django开发之天天生鲜项目知识总结【5】

    这里初次学习celery,只简单讲解一下如何使用celery 异步发送邮件,在以后的总结中还会,多次提到celery,因为后面很多任务都需要用到celery执行任务,后面再专门针对celery做具体的 ...

最新文章

  1. 剑指offer六:旋转数组的最小数字
  2. Windows Server2008下MYSQL外网无法访问问题解决
  3. smb(ms17-010)远程命令执行之msf
  4. 160 - 22 CarLitoZ.1
  5. 月圆花美 中秋快乐!
  6. 华为机试——字符串反转
  7. MySQL字符集小结
  8. HEVC将会取代H.264的原因
  9. 线程安全(thread-safe)介绍
  10. 介绍一个产品的思维导图_思维导图介绍(1)
  11. 维智WSD-A2系列伺服驱动器用户手册(MECHATROLINK-Ⅱ总线通信型)
  12. android 代码设置 键盘适应_实现Android键盘的中英文适配
  13. java字母转换成大写_java中如何把大写字母转换成小写字母,小写字母转换成大写字母?...
  14. codeblocks 编译器设置方法 也可以酱紫滴
  15. IDEA使用破解补丁激活
  16. 如何判断牛市是否来了,看这4种指标就够了
  17. sql题:n个人一起去看电影,准备预定电影票横向坐一起,从这么多排座位中,找出连续n个空位的全部组合,结果输出座位组合情况——oracle数据库
  18. Android 支持表情功能
  19. 用计算机弹吃鸡,Win10系统玩吃鸡游戏弹出提示“out of memory”的解决方法
  20. PCI、PCIe、Mini PCIe、SATA、mSATA、M.2

热门文章

  1. 廖雪峰Java2面向对象编程-5包和classpath-4classpath和jar
  2. HDU 2553(N皇后问题)
  3. End Game----OO最后一次博客作业
  4. 《转》python学习(7) -列表
  5. iOS系统自带正则表达式简单运用
  6. 数据探索很麻烦?推荐一款史上最强大的特征分析可视化工具:yellowbrick
  7. 这 8 个 Python 技巧让你的数据分析提升数倍!
  8. MatchingFrontier包简介及R实现
  9. 百度小程序-swiper组件
  10. springboot+freemarker毕业设计项目错误合集