Django+Vue开发生鲜电商平台之3.数据模型设计和资源导入(下)

简介: 文章目录一、项目初始化二、数据模型设计1.用户数据模型设计2.商品数据模型设计3.交易数据模型设计4.用户操作数据模型设计三、xadmin后台管理系统的配置四、数据迁移和数据导入1.migration原理和表的生成2.导入商品类别和商品数据

2.导入商品类别和商品数据

现在是没有数据的,但是为了测试的方便,需要制造一些测试数据并导入。需要将测试商品的图片文件导入到media/goods目录下,将测试品牌的图片文件导入到media/brands目录下。

然后在db_tools目录下创建名为data的Package,下创建商品数据product_data.py如下:

row_data = [
    {
        'images': [
            'goods/images/1_P_1449024889889.jpg',
            'goods/images/1_P_1449024889264.jpg',
            'goods/images/1_P_1449024889726.jpg',
            'goods/images/1_P_1449024889018.jpg',
            'goods/images/1_P_1449024889287.jpg'
        ],
        'categorys': [
            '首页',
            '生鲜食品',
            '根茎类'
        ],
        'market_price': '¥232元',
        'name': '新鲜水果甜蜜香脆单果约800克',
        'desc': '食用百香果可以增加胃部饱腹感,减少余热量的摄入,还可以吸附胆固醇和胆汁之类有机分子,抑制人体对脂肪的吸收。因此,长期食用有利于改善人体营养吸收结构,降低体内脂肪,塑造健康优美体态。',
        'sale_price': '¥156元',
        'goods_desc': '<p><img src="/media/goods/images/2_20170719161405_249.jpg" title="" alt="2.jpg"/></p><p><img src="/media/goods/images/2_20170719161414_628.jpg" title="" alt="2.jpg"/></p><p><img src="/media/goods/images/2_20170719161435_381.jpg" title="" alt="2.jpg"/></p>'
    },
    ...,
    {
        'sale_price': '¥12元',
        'images': [
            'goods/images/29_P_1448947631994.jpg'
        ],
        'market_price': '¥14元',
        'categorys': [
            '首页',
            '粮油副食',
            '食用油'
        ],
        'desc': None,
        'name': '融氏纯玉米胚芽油5l桶',
        'goods_desc': '<p><img src="/media/goods/images/2_20170719161405_249.jpg" title="" alt="2.jpg"/></p><p><img src="/media/goods/images/2_20170719161414_628.jpg" title="" alt="2.jpg"/></p><p><img src="/media/goods/images/2_20170719161435_381.jpg" title="" alt="2.jpg"/></p>'
    }
]
pass

再创建category_data.py如下:

row_data = [
    {
        'sub_categorys': [
            {
                'sub_categorys': [
                    {
                        'code': 'yr',
                        'name': '羊肉'
                    },
                    {
                        'code': 'ql',
                        'name': '禽类'
                    },
                    {
                        'code': 'zr',
                        'name': '猪肉'
                    },
                    {
                        'code': 'nr',
                        'name': '牛肉'
                    }
                ],
                'code': 'jprl',
                'name': '精品肉类'
            },
            {
                'sub_categorys': [
                    {
                        'code': 'cb',
                        'name': '参鲍'
                    },
                    {
                        'code': 'yu',
                        'name': '鱼'
                    },
                    {
                        'code': 'xia',
                        'name': '虾'
                    },
                    {
                        'code': 'xb',
                        'name': '蟹/贝'
                    }
                ],
                'code': 'hxsc',
                'name': '海鲜水产'
            },
            {
                'sub_categorys': [
                    {
                        'code': 'xhd_xyd',
                        'name': '松花蛋/咸鸭蛋'
                    },
                    {
                        'code': 'jd',
                        'name': '鸡蛋'
                    }
                ],
                'code': 'dzp',
                'name': '蛋制品'
            },
            {
                'sub_categorys': [
                    {
                        'code': 'sc',
                        'name': '生菜'
                    },
                    {
                        'code': 'bc',
                        'name': '菠菜'
                    },
                    {
                        'code': 'yj',
                        'name': '圆椒'
                    },
                    {
                        'code': 'xlh',
                        'name': '西兰花'
                    }
                ],
                'code': 'ycl',
                'name': '叶菜类'
            },
            {
                'sub_categorys': [
                ],
                'code': 'gjl',
                'name': '根茎类'
            },
            {
                'sub_categorys': [
                ],
                'code': 'qgl',
                'name': '茄果类'
            },
            {
                'sub_categorys': [
                ],
                'code': 'jgl',
                'name': '菌菇类'
            },
            {
                'sub_categorys': [
                ],
                'code': 'jksx',
                'name': '进口生鲜'
            }
        ],
        'code': 'sxsp',
        'name': '生鲜食品'
    },
    ...,
    {
        'sub_categorys': [
            {
                'sub_categorys': [
                ],
                'code': '白茶',
                'name': '白茶'
            },
            {
                'sub_categorys': [
                ],
                'code': '红茶',
                'name': '红茶'
            },
            {
                'sub_categorys': [
                ],
                'code': '绿茶',
                'name': '绿茶'
            }
        ],
        'code': '精选茗茶',
        'name': '精选茗茶'
    }
]

因为存在外键的限制,因此必须先导入category数据,再导入商品数据,这里需要独立于项目单独使用Django的Model。

先创建import_category_data.py如下:

import sys, os
pwd = os.path.dirname(os.path.realpath(__file__))
sys.path.append(pwd + '../')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Fresh_Ecommerce.settings')
import django
django.setup()
from goods.models import GoodsCategory  # 不能位于前面的代码之前,否则会出错
from db_tools.data.category_data import raw_data
for lev1_cat in raw_data:
    lev1_instance = GoodsCategory()
    lev1_instance.code = lev1_cat['code']
    lev1_instance.name = lev1_cat['name']
    lev1_instance.category_type = 1
    lev1_instance.save()
    for lev2_cat in lev1_cat['sub_categorys']:
        lev2_instance = GoodsCategory()
        lev2_instance.code = lev2_cat['code']
        lev2_instance.name = lev2_cat['name']
        lev2_instance.category_type = 2
        lev2_instance.parent_category = lev1_instance
        lev2_instance.save()
        for lev3_cat in lev2_cat['sub_categorys']:
            lev3_instance = GoodsCategory()
            lev3_instance.code = lev3_cat['code']
            lev3_instance.name = lev3_cat['name']
            lev3_instance.category_type = 3
            lev3_instance.parent_category = lev2_instance
            lev3_instance.save()
print('Category data imported successfully')

单独运行该文件,打印:

Category data imported successfully

显然,执行成功。

说明:

因为这里是单独使用Django的model,因此需要先进行路径的设置,来保证可以访问项目和app中的内容,所以:

from goods.models import GoodsCategory

必须在

import sys, os
pwd = os.path.dirname(os.path.realpath(__file__))
sys.path.append(pwd + '../')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Fresh_Ecommerce.settings')
import django
django.setup()

之后,否则会报错。

此时再查询数据据库如下:

select * from goods_goodscategory;

打印:

+-----+---------------------+---------------------+------+---------------+--------+-----------+--------------------+------------+
| id  | name                | code                | desc | category_type | is_tab | is_delete | parent_category_id | add_time   |
+-----+---------------------+---------------------+------+---------------+--------+-----------+--------------------+------------+
|   1 | 生鲜食品            | sxsp                |      |             1 |      0 |         0 |               NULL | 2020-07-21 |
|   2 | 精品肉类            | jprl                |      |             2 |      0 |         0 |                  1 | 2020-07-21 |
|   3 | 羊肉                | yr                  |      |             3 |      0 |         0 |                  2 | 2020-07-21 |
|   4 | 禽类                | ql                  |      |             3 |      0 |         0 |                  2 | 2020-07-21 |
|   5 | 猪肉                | zr                  |      |             3 |      0 |         0 |                  2 | 2020-07-21 |
...
| 116 | 腊味                | 腊味                |      |             2 |      0 |         0 |                108 | 2020-07-21 |
| 117 | 精选茗茶            | 精选茗茶            |      |             1 |      0 |         0 |               NULL | 2020-07-21 |
| 118 | 白茶                | 白茶                |      |             2 |      0 |         0 |                117 | 2020-07-21 |
| 119 | 红茶                | 红茶                |      |             2 |      0 |         0 |                117 | 2020-07-21 |
| 120 | 绿茶                | 绿茶                |      |             2 |      0 |         0 |                117 | 2020-07-21 |
+-----+---------------------+---------------------+------+---------------+--------+-----------+--------------------+------------+
120 rows in set (0.01 sec)

可以看到,共120条数据,分3个类别。

再查看后台管理系统如下:


显然,可以清晰地看到每个商品类别的信息。

再新建import_goods_data.py如下:

import sys, os
pwd = os.path.dirname(os.path.realpath(__file__))
sys.path.append(pwd + '../')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Fresh_Ecommerce.settings')
import django
django.setup()
from goods.models import Goods, GoodsCategory, GoodsImage
from db_tools.data.product_data import raw_data
for goods_detail in raw_data:
    goods = Goods()
    goods.name = goods_detail['name']
    goods.market_price = float(goods_detail['market_price'].replace('¥', '').replace('元', ''))
    goods.shop_price = float(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['desc'] if goods_detail['desc'] is not None else ''
    goods.goods_front_image = goods_detail['images'][0] if goods_detail['images'] is not None else ''
    category_name = goods_detail['categorys'][-1]
    category = GoodsCategory.objects.filter(name=category_name)
    if category:
        goods.category = category[0]
    goods.save()
    for goods_image in goods_detail['images']:
        goods_iamge_instance = GoodsImage()
        goods_iamge_instance.image = goods_image
        goods_iamge_instance.goods = goods
        goods_iamge_instance.save()
print('Goods data imported successfully')

单独运行该文件,打印:

Goods data imported successfully

即数据导入成功。

因为商品关系到图片,因此需要再settings.py中设置图访问路径,如下:

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

urls.py配置如下:

from django.conf.urls import url
from django.views.static import serve
import xadmin
from Fresh_Ecommerce.settings import MEDIA_ROOT
urlpatterns = [
       url(r'^xadmin/', xadmin.site.urls),
       url(r'^media/(?P<path>.*)$', serve, {'document_root':MEDIA_ROOT}),
]

再访问后台如下:


显然,数据已经插入成功。

相关文章
|
8月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
461 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
7月前
|
前端开发 JavaScript 关系型数据库
基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行
该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。
233 6
|
10月前
|
存储 设计模式 JavaScript
Vue 组件化开发:构建高质量应用的核心
本文深入探讨了 Vue.js 组件化开发的核心概念与最佳实践。
756 1
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发
|
JavaScript 前端开发 测试技术
组件化开发:创建可重用的Vue组件
【10月更文挑战第21天】组件化开发:创建可重用的Vue组件
151 1
|
JavaScript 前端开发
vue全局公共组件自动引入并注册,开发效率直接起飞!
【10月更文挑战第14天】vue全局公共组件自动引入并注册,开发效率直接起飞!
336 1
|
存储 前端开发 中间件
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
1742 0
|
存储 JSON JavaScript
Vue.js开发中基于localStorage与sessionStorage的本地存储利器:Vue-ls插件使用详解
Vue.js开发中基于localStorage与sessionStorage的本地存储利器:Vue-ls插件使用详解
539 0
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
300 2
|
1月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
280 137