生鲜网超MySQL_天天生鲜项目实战-思路 数据库设计
網站首頁
登錄頁面
商品詳情頁
購物車頁
一、需求分析:
類似于京東的生鮮超市,對于用戶而言能夠實現登陸,注冊,商品瀏覽,購買等,對于商家而言,實現商品的管理,即添加,修改,刪除等。
平臺:管理員、業務員、用戶
一、業務員平臺
線下:負責商品的信息采集,購買。并將檢驗過的商品信息歸類后交于后臺管理人員
具體商品信息大致如下:
新鮮水果 商品的種類名稱|----草莓:具體商品名稱,價格,描述,單位|----蘋果等
海產海鮮
|----三文魚:價格,描述,單位
|----扇貝等
二、管理員
線下:與業務員對接商品信息,并在此進行審核
線上:利用后臺管理平臺進行商品信息的增刪改查。
三、用戶
線上:
具體功能身份驗證
|----用戶的注冊,登錄,用戶中心
商品瀏覽
|----購物網站首頁,某一類商品列表頁,具體商品頁
商品購買
|----商品加入購物車,訂單提交,購買
具體功能請參考:
二、實現方式
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
購物車
CartInfo
user用戶名(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.py
DATABASES ={
'default': {
'ENGINE': 'django.db.backends.mysql', # 數據庫引擎
'NAME': '', # 你要存儲數據的庫名,事先要創建之
'USER': '', # 數據庫用戶名
'PASSWORD': '', # 密碼
'HOST': '', # 主機
'PORT': '', # 數據庫使用的端口
}
}
在項目文件夾下的__init__.py添加如下代碼,作用是每次啟動工程時都能啟動數據庫鏈接
#daily_fresh_demo
# ----deily_fresh_demo
# ----__init___.py
importpymysql
pymysql.install_as_MySQLdb()
另外在使用mysql需要保證,在mysql中你要使用的存在相應的數據庫。
七、創建相應的app
python manage.py startapp df_user
python manage.py startapp df_order
python manage.py startapp df_cart
python manage.py startapp df_goods
工程目錄結構如下
八、數據models建立
需要注意的是:開發過程中大多是首先設計用戶models的。
另外由于種種原因,請忽略什么PE8規范,pythonic寫法,變量命名規則,暫時看懂就好
8.1、df_user
#df_user#----models.py
from django.db importmodels#Create your models here.
classUserInfo(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 makemigrations
classGoodsBrowser(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 importmodelsfrom 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')
returnself.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')
returnself.gtitle#python3中 __str__ 不能接收bytes類型的數據,這和python2/3的編解碼方式是有關系的。
8.3、df_order
#df_order#----models.py
from django.db importmodels#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.99
count = models.IntegerField()
8.4、df_cart
#df_cart#----models.pyfrom django.db importmodelsclassCartInfo(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系統自動生成的。
九:在線演示
賬號:weilanhanf
密碼:weilanhanf
賬號:root
密碼:rootroot
如果后臺管理賬號失效,請博客園私信博主
另:還有小問題沒有修復,您可以直接提交issue。非常感謝您的star。
十、源碼下載
總結
以上是生活随笔為你收集整理的生鲜网超MySQL_天天生鲜项目实战-思路 数据库设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android中设置输入法为数字输入
- 下一篇: MySQL索引知识复习