Web开发 ------ 基于Django+Vue网上购物商城(二):商品以及商品类 API接口设计

本文档介绍了基于Django+Vue开发网上购物商城的API接口设计,涵盖商品列表页和详情页API的开发过程。内容包括Django REST framework的安装、配置、序列化、分页、过滤、搜索和排序功能,以及商品类别的API接口开发。通过实例展示了如何使用Django REST framework创建高效API,并提供了可能遇到的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值