文章目录
Web开发 ------ 基于Django+Vue网上购物商城(二)
完整项目地址:https://gitee.com/dadadaliuliuliiu/ShopProject
一、API接口开发 准备工作
1.准备工作
安装模块 djangorestframework
:用于构建Web API 的强大而灵活的工具包
pip install -i https://pypi.douban.com/simple djangorestframework
在extre_apps下建一个db_tools包存放我们批量导入商品信息数据的文件
在根目录ShopProject下创建一个media目录,存放相关商品图片
之前我们在setting中已经设置了图片存放路径,如下:
# 设置media的保存路径: media/hello.png
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
2.批量导入商品分类信息和商品信息数据
manage.py
import sys
# 获取脚本传入的参数, 列表存储。 第一个元素是脚本的名称, 第二个元素是脚本传入的第一个参数
print(sys.argv)
设置中文、时区
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
#ShopProject\app\extra_apps\db_tools
# -*- coding: utf-8 -*-
#独立使用django的model
import sys
import os
# 加载Django配置和Django APP的注册。
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ShopProject.settings")
import django
"""
Configure the settings (this happens as a side effect of accessing the
first setting), configure logging and populate the app registry.
"""
django.setup()
from app.goods.models import GoodsCategory
from app.extra_apps.db_tools.data.category_data import row_data
# 依次遍历一级分类数据
for lev1_cat in row_data:
lev1_intance = GoodsCategory()
lev1_intance.code = lev1_cat["code"]
lev1_intance.name = lev1_cat["name"]
lev1_intance.category_type = 1
lev1_intance.save()
print("添加一级分类 [%s] 成功" % (lev1_intance.name))
# 依次遍历指定的一级分类包含的二级分类
for lev2_cat in lev1_cat["sub_categorys"]:
lev2_intance = GoodsCategory()
lev2_intance.code = lev2_cat["code"]
lev2_intance.name = lev2_cat["name"]
lev2_intance.category_type = 2
# 指定二级分类对象的父分类对象。
lev2_intance.parent_category = lev1_intance
lev2_intance.save()
print(" --添加二级分类 [%s] 成功" % (lev2_intance.name))
# 依次遍历指定的二级分类包含的三级分类
for lev3_cat in lev2_cat["sub_categorys"]:
lev3_intance = GoodsCategory()
lev3_intance.code = lev3_cat["code"]
lev3_intance.name = lev3_cat["name"]
lev3_intance.category_type = 3
lev3_intance.parent_category = lev2_intance
# 讲Object对象写入数据库中.(ORM)
lev3_intance.save()
print(" ----添加三级分类 [%s] 成功" % (lev3_intance.name))
类别
数据库加载成功
商品信息加载
#ShopProject\app\extra_apps\db_tools\import_goods_data.py
# -*- coding: utf-8 -*-
import os
import sys
pwd = os.path.dirname(os.path.realpath(__file__))
sys.path.append(pwd + "../")
# 加载Django配置和Django APP的注册。
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ShopProject.settings")
import django
django.setup()
# 注意:导入数据库模型,一定要先加载Django配置和注册Django app。
from app.goods.models import Goods, GoodsCategory, GoodsImage
from app.extra_apps.db_tools.data.product_data import row_data
# 依次遍历商品信息
for goods_detail in row_data:
# 实例化商品对象;
goods = Goods()
goods.name = goods_detail["name"]
# 价格处理方式: '¥232元'处理格式为 232
goods.market_price = float(int(goods_detail["market_price"].replace("¥", "").replace("元", "")))
goods.shop_price = float(int(goods_detail["sale_price"].replace("¥", "").replace("元", "")))
goods.goods_brief = goods_detail["desc"] if goods_detail["desc"] is not None else ""
goods.goods_desc = goods_detail["goods_desc"] if goods_detail["goods_desc"] is not None else ""
# 将产品轮播图片的第一张图片作为商品列表页显示的图片
goods.goods_front_image = goods_detail["images"][0] if goods_detail["images"] else ""
# 商品的三级分类
# 将商品和商品分类关联。 商品分类只存储的三级分类(可以根据三级分类找到二级分类再找到一级分类)
category_name = goods_detail["categorys"][-1] # 获取到三级分类的名称
category = GoodsCategory.objects.filter(name=category_name) # 根据分类名称找到分类对象。
if category:
# 将商品分类对象和商品对象绑定。
goods.category = category[0]
goods.save()
print("添加商品 [%s] 成功" % (goods.name))
# 添加商品图片
for goods_image in goods_detail["images"