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}),
]

再访问后台如下:


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

相关文章
|
26天前
|
存储 缓存 前端开发
Django 后端架构开发:存储层调优策略解析
Django 后端架构开发:存储层调优策略解析
36 2
|
26天前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
36 2
|
26天前
|
消息中间件 存储 监控
Django后端架构开发:Celery异步调优,任务队列和调度
Django后端架构开发:Celery异步调优,任务队列和调度
40 1
|
21天前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
12 0
|
26天前
|
存储 缓存 关系型数据库
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
29 0
|
26天前
|
存储 API 数据库
Django后端架构开发:构建在线云媒资系统思路解析
Django后端架构开发:构建在线云媒资系统思路解析
32 0
|
26天前
|
存储 监控 开发工具
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
26 0
|
JavaScript 网络架构 Python
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
|
1月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。