Django-rest-framework 06-1(实例:生鲜购物商城)

写在前面

①这个项目与之前直接用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,把上面这些常量写进去
在这里插入图片描述

发布了136 篇原创文章 · 获赞 30 · 访问量 7058

猜你喜欢

转载自blog.csdn.net/a__int__/article/details/104827720