生鮮購物商城-項目創建
寫在前面
①這個項目與之前直接用django(前後端不分離)寫的生鮮購物商城實現的基本功能一致,新添加積分、優惠卷等功能。
②django項目(前後端不分離),生鮮購物商城項目筆記鏈接:
https://blog.csdn.net/a__int__/article/details/103788649
③本次項目設計採用Django-rest-framework框架,前後端分離設計
1、創建項目
①使用pycharm創建項目
②創建app:python manage.py startapp App
③在項目根目錄下創建1.txt,把我們項目需要安裝的包寫去:
pymysql
redis
django_redis
djangorestframework
Pillow
python-alipay-sdk
安裝:pip install -r 1.txt
2、項目配置
①安裝完成後進行項目setting配置
ALLOWED_HOSTS = ["*"]
INSTALLED_APPS = [
# 添加這兩個,自帶的保留
'rest_framework',
'App'
]
# 自帶的DATABASES註釋了
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'FreshFoodStore',
# mysql用戶名
'USER': 'root',
# 密碼
'PASSWORD': 'root',
'HOST': 'localhost',
'PORT': 3306
}
}
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
# 這些添加到末尾
# redis緩存過期時間24小時
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
},
'TIMEOUT': 60 * 60 * 24
}
}
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/uploads')
②配置好之新打開一個cmd窗口啓動redis:redis-server
(如果計算機裏沒有下載redis參考:https://blog.csdn.net/a__int__/article/details/103648033)
③找到manage.py,設置驅動
# 寫在最後一個import下面
import pymysql
pymysql.install_as_MySQLdb()
④創建數據庫
mysql -uroot -proot
craete database FreshFoodStore charset=utf8;
exit
登錄
⑤遷移
python manage.py migrate
3、設計數據庫及模型
表 | 字段 |
---|---|
IndexSlide(首頁Slide) | id、img |
FoodType(產品分類) | typeid、typenames、type2names(二級類型名)、is_hot(是否熱賣) |
Foods | f_id、f_img、f_name、f_longname、scale(重量)、price、eprice(優惠前價格)、type2id(二級類型id)、type2name(二級類型名)、f_num(剩餘數量)、is_sell(是否上架)、is_points(是否積分)、is_hot(是否熱賣,推到首頁)、place(產地) |
User | u_name、u_password、u_email、u_phone、u_icon(頭像)、all_points(歷史總積分)、the_points(當前總積分)、is_active(是否激活)、is_delete(是否被刪除)、addr_id(默認收貨地址) |
Admin(管理員) | name、password、auth(權限) |
Points(積分詳單) | p_user、p_num(積分)、is_add(加或減)、p_date(日期)、p_price(消費額)、p_detail(產生或消費積分來源) |
Coupon(優惠卷) | cou_id、cou_name、cou_method(計算方法)、cou_num(計算量)、is_open(是否可以使用)、which_user(投放給哪類人) |
UserCoupon(用戶領取的優惠卷) | cou_user(用戶id)、cou_id(優惠卷id)、cou_status(優惠卷狀態) |
Cart(購物車) | c_user、c_foods、c_foods_num、is_select(當前商品是否選中)、c_addr(購物地址id) |
Order(訂單) | o_user、o_price、o_time、o_status(訂單狀態)、o_note(訂單備註)、o_addr(收貨地址)、o_points(使用積分)、o_coupon(使用優惠卷)、o_vip(使用vip折扣) |
OrderFoods(訂單裏的商品) | o_user、o_foods、o_foods_num |
Addr(收貨地址) | a_user、a_city_id(城市)、a_detail(詳細地址)、a_user_name(收貨人)、a_tell(收貨電話)、a_time(收貨時間) |
City(全國地名錶) | id、pid、name |
FoodType
- 商品分類設計:這裏商品爲多級分類,第一級分類存在typenames裏面,其餘的存在type2names裏面以:分割,例如:
全部分類:0#飲料:1008#冷熱飲:1009
Points
- 積分與會員設計:積分單獨存一個表,並記錄時間、積分來源等,每次消費可以用積分抵扣現金,1積分抵扣0.1元,下單付款後產生積分,實際付款的0.01倍爲本次消費積分數。
- User表裏all_points是用來記錄歷史以來總積分的,不進行減少,只進行相加,每次產生新的積分便向裏面加一次。
- User表裏有the_points用於記錄當前剩餘總積分,每次產生積分向裏面加,減少積分向裏面減。
- all_points與用戶vip等級相關聯,100分、500分、1000分、3000分、1萬分:會員v1,會員v2、會員v3、會員v4、會員v5
- v1、v2…: 9.9折、9.6折、9.3折…
Coupon
- 折扣與優惠卷設計:會員折扣、優惠卷、積分不能同時使用,每次只能使用其中一個,且每次使用會員折扣不產生積分、使用優惠卷和積分在實際付款的基礎上計算積分。
- 每次調用優惠卷先調用
- 優惠卷單獨創建一個類,裏面寫各類優惠卷的計算方式,例如:滿100減20優惠卷,cou_method(計算方法)裏面存值1,cou_num(計算量)裏面存值100,20,
- 優惠卷計算分類設計:滿減、折扣、現金卷:1、2、3
- 優惠卷投放人羣設計:所有用戶、v0用戶(新用戶)、v0以上用戶(老用戶)、v3及以上用戶(高消費用戶):1、2、3、4
- 避免優惠卷重複領取,優惠卷採取邏輯刪除字段is_del(是否被刪除),用戶每次領取優惠卷前讀取UserCoupon(用戶領取的優惠卷)表裏的cou_id(優惠卷id)是否存在
4、項目常量定義
商品的排序及類型
# 所有類型
ALL_TPYE = "0"
# 綜合排序
ORDER_TOTAL = "0"
# 價格升序降序
ORDER_PRICE_UP = "1"
ORDER_PRICE_DOWN = "2"
# 銷量升序降序
ORDER_SALE_UP = "3"
ORDER_SALE_DOWN = "4"
訂單狀態
# 已下單未付款
ORDER_STATUS_NOT_PAY = 1
# 已下單已付款未發貨
ORDER_STATUS_NOT_SEND = 2
# 已下單已付款已發貨未發貨
ORDER_STATUS_NOT_RECEIVE = 3
會員等級
VIP1 = 99
VIP2 = 499
VIP3 = 999
VIP4 = 2999
VIP5 = 9999
優惠卷類型
# 滿減類型優惠卷
FULL_DISCOUNT_COUPON = 1
# 折扣優惠卷
DISCOUNT_COUPON = 2
# 現金優惠卷
CASH_COUPON = 3
優惠卷投放人羣
# 所有用戶
ALL_USER = 1
# 新用戶
NEW_USER = 2
# 老用戶
OLD_USER = 3
# 高消費用戶
HIGH_CONSUMPTION_USER = 4
優惠卷狀態
# 優惠卷已被刪除或過期
COU_CANNOT_BE_USED = 0
# 優惠卷可以使用
COU_CAN_BE_USED = 1
# 優惠卷已被使用
COU_HAS_BEEN_USED =2
在App下新建constant.py,把上面這些常量寫進去