每天生鮮項目實戰-思路 數據庫設計

github源碼地址html

靜態文件地址python

在線地址:http://39.108.176.210mysql

 

 網站首頁git

 

 登陸頁面github

 商品詳情頁web

 

 購物車頁sql

 

1、需求分析:

相似於京東的生鮮超市,對於用戶而言可以實現登錄,註冊,商品瀏覽,購買等,對於商家而言,實現商品的管理,即添加,修改,刪除等。數據庫

平臺:管理員、業務員、用戶

1、業務員平臺
    線下:負責商品的信息採集,購買。並將檢驗過的商品信息歸類後交於後臺管理人員
            具體商品信息大體以下:
                    新鮮水果 商品的種類名稱
                         |----草莓:具體商品名稱,價格,描述,單位
                         |----蘋果等
                    海產海鮮 
                         |----三文魚:價格,描述,單位 |----扇貝等
2、管理員
  線下:與業務員對接商品信息,並在此進行審覈
線上:利用後臺管理平臺進行商品信息的增刪改查。
3、用戶
  線上:
    具體功能
    
身份驗證
        |----用戶的註冊,登陸,用戶中心
      商品瀏覽
        |----購物網站首頁,某一類商品列表頁,具體商品頁
      商品購買
        |----商品加入購物車,訂單提交,購買

 具體功能請參考:django

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

 

2、實現方式

web app:

根據需求將web app分爲四塊

daily_fresh_demo
  ----deily_fresh_demo
  ----df_cart #對商品購物車管理
  ----df_goods  #商品以及後臺管理
  ----df_user #用戶管理
  ----df_order #訂單管理

3、開發環境:

python>3.5

Django>2.0 

pychram

navicate

mysql 5.7

4、model數據庫設計:

將具體數據表分化到具體的app中

「()」括號內爲外鍵關聯,

(1)、當一對多關係時例如生鮮分類對生鮮具體商品, 將關係維護在多的那張表中,即在具體商品表中維護
(2)、當多對多關係,則新建一張表,在再第三張表中維護表關係
用戶表與商品表則將關係維護在購物車表中
app
    1、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數量

 

5、項目生成:

添加環境變量

打開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、配置數據庫

6.一、使用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

import pymysql pymysql.install_as_MySQLdb()

另外在使用mysql須要保證,在mysql中你要使用的存在相應的數據庫。 

7、建立相應的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

程目錄結構以下

8、數據models創建

須要注意的是:開發過程當中大可能是首先設計用戶models的。

另外因爲種種緣由,請忽略什麼PE8規範,pythonic寫法,變量命名規則,暫時看懂就好

8.一、df_user

#df_user
#----models.py

from 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 makemigrations

class GoodsBrowser(models.Model):
    user=models.ForeignKey('UserInfo', on_delete=models.CASCADE)
    good=models.ForeignKey('df_goods.GoodsInfo', on_delete=models.CASCADE)

8.二、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.ttitle class 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.三、df_order

#df_order
#----models.py

from 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.99
    count = models.IntegerField()

8.四、df_cart

#df_cart
#----models.py

from django.db import models

class 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.五、執行遷移

最後在Terminal終端前後執行

python manage.py makemigrations
python manage.py migrate

進行遷移便可。

在pycharm的工具欄中Tools—>Run manage.py Task也能夠逐個app進行遷移。

8.六、執行結果

在navicate就能夠看到咱們想要的結果,相應的數據表

以「df_」開頭的爲咱們本身建立的,其餘爲django系統自動生成的。

九:在線演示

在線地址:http://39.108.176.210

帳號:weilanhanf

密碼:weilanhanf

後臺管理:http://39.108.176.210

帳號:root

密碼:rootroot

若是後臺管理帳號失效,請博客園私信博主

 

另:還有小問題沒有修復,您能夠直接提交issue。很是感謝您的star。

 

10、源碼下載

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

相關文章
相關標籤/搜索