zoukankan      html  css  js  c++  java
  • 03-资源导入

    一、导入商品类别数据

    1、导入商品类别数据

      我们添加一条条数据是很费时间的,为了更好地将精力全身心投入开发逻辑,因此将传入数据用其他更快的方式上传数据,拷贝完成后,一定要核对模型类中的文件上传路径是否一样。确定一样后,Django查询的时候才不会出错,因此我们将独立使用Djangomodel将数据存储到数据库。

     

       然后接下来在db_tools文件夹下面写脚本,让数据导入数据库中,再导入商品前,一定要先导入我们的category,因为categorygoods的外键,必须将外键先导入,在进行导入才不会出错。因此在db_tools下面创建py文件import_category_data文件,在里面编写我们导入数据的逻辑。

     代码如下:

    __author__ = "lishuntao"
    __date__ = "2019/11/14 0014 16:38"
    
    #独立使用django的model(也就是不启动整个项目单独使用数据保存到数据库)
    import sys
    import os
    
    
    pwd = os.path.dirname(os.path.realpath(__file__))
    sys.path.append(pwd+"../")
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MxShop.settings")
    #上面设置好环境变量路径
    import django
    django.setup()
    #一定要先设置django的设置模型,也就是上面的DJANGO_SETTINGS_MODULE,否则先导入models会出现错误
    from goods.models import GoodsCategory
    #将data中的数据导入进来,里面是列表字典一层一层的关系,因此遍历这个变量,将数据保存到models.py中的模型类中
    from 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()#保存1级目录
    
        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()
    
            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#三级目录有父目录二级目录,因此指向二级目录的实例化对象
                lev3_intance.save()

    运行这个py文件,而不用运行整个项目,这就是独立使用Djangomodel,运行后我们去数据库查看有没有数据,有数据说明成功。数据导入是不是很轻松。接下来我们可以导入商品数据啦。

     二、导入商品数据以及外键商品类别数据

      与上面同理,在db_tools文件夹下面建立py文件,import_goods_data.py,然后将数据的路径和细节表导入进来,遍历实例化模型类将数据存储到数据库表中。

     代码逻辑如下:

    import sys
    import os
    
    
    pwd = os.path.dirname(os.path.realpath(__file__))
    sys.path.append(pwd+"../")
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MxShop.settings")
    
    import django
    django.setup()
    #导入模型类,进行数据存储
    from goods.models import Goods, GoodsCategory, GoodsImage
    #导入商品的具体信息对象,进行遍历存储数据库
    from db_tools.data.product_data import row_data
    
    for goods_detail in row_data:
        goods = Goods()
        goods.name = goods_detail["name"]
        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)#有可能有多张图片,get会抛出异常
        if category:
            goods.category = category[0]#只需要取一张做封面图
        goods.save()
    
        for goods_image in goods_detail["images"]:
            goods_image_instance = GoodsImage()
            goods_image_instance.image = goods_image
            goods_image_instance.goods = goods
            goods_image_instance.save()

    数据导入完成后,去数据库查看是否成功导入,数据成功导入。

       数据录入完成,然后去系统管理后台查看,是否显示正确。然后发现后台管理系统没有读出数据的路径,说明要么数据路径错误,要么数据的配置没有完成,当然数据路径这里没有错误,因此我们应该去项目设置里面将路径配置完成,让Django识别文件路径(MEDIA_URL、MEDIA_ROOT),否则是不会识别出路径的。

     三、media路径的相关配置

      在项目设置里添加media路径,以及url配置。

    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR,"media")#这样会让Django找到media路径,当然还有url配置

     Mxshop.urls.py的文件路由配置:

    from django.urls import path,re_path
    #将设置里的media路径导入进来进行配置,还有用到静态文件的serve方法
    from MxShop.settings import MEDIA_ROOT
    from django.views.static import serve
    import xadmin
    
    urlpatterns = [
        path('xadmin/', xadmin.site.urls),
        #用正则匹配media路径下的文件进行访问
        re_path('media/(?P<path>.*)$',serve,{"document_root":MEDIA_ROOT}),
    ]

     这样图片访问成功,数据的静态文件访问就完成啦。

  • 相关阅读:
    青蛙学Linux—软件安装
    青蛙学Linux—文本编辑器Vi/Vim
    linux下安装java
    anaconda 换源
    origin从图中获得数据
    endnote X7参考文献缩进设置
    endnote X7 加入文献
    endnote X7使用方法
    linux下安装openmpi
    origin添加error bar
  • 原文地址:https://www.cnblogs.com/lishuntao/p/11859152.html
Copyright © 2011-2022 走看看