03-資源導入

1、導入商品類別數據

一、導入商品類別數據數據庫

  咱們添加一條條數據是很費時間的,爲了更好地將精力全身心投入開發邏輯,所以將傳入數據用其餘更快的方式上傳數據,拷貝完成後,必定要覈對模型類中的文件上傳路徑是否同樣。肯定同樣後,Django查詢的時候纔不會出錯,所以咱們將獨立使用Djangomodel將數據存儲到數據庫。django

 

 

 

 

 

   而後接下來在db_tools文件夾下面寫腳本,讓數據導入數據庫中,再導入商品前,必定要先導入咱們的category,由於categorygoods的外鍵,必須將外鍵先導入,在進行導入纔不會出錯。所以在db_tools下面建立py文件import_category_data文件,在裏面編寫咱們導入數據的邏輯。app

 

 

 代碼以下:url

__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,運行後咱們去數據庫查看有沒有數據,有數聽說明成功。數據導入是否是很輕鬆。接下來咱們能夠導入商品數據啦。spa

 

 

 2、導入商品數據以及外鍵商品類別數據

  與上面同理,在db_tools文件夾下面創建py文件,import_goods_data.py,而後將數據的路徑和細節表導入進來,遍歷實例化模型類將數據存儲到數據庫表中。code

 

 

 代碼邏輯以下:對象

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()

數據導入完成後,去數據庫查看是否成功導入,數據成功導入。blog

 

 

   數據錄入完成,而後去系統管理後臺查看,是否顯示正確。而後發現後臺管理系統沒有讀出數據的路徑,說明要麼數據路徑錯誤,要麼數據的配置沒有完成,固然數據路徑這裏沒有錯誤,所以咱們應該去項目設置裏面將路徑配置完成,讓Django識別文件路徑(MEDIA_URL、MEDIA_ROOT),不然是不會識別出路徑的。圖片

 

 

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

 

 這樣圖片訪問成功,數據的靜態文件訪問就完成啦。

相關文章
相關標籤/搜索