zoukankan      html  css  js  c++  java
  • Django+Vue打造购物网站(二)

    配置后台管理

    xadmin直接使用之前的在线教育的那个就可以了

    users/adminx.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/9/19 下午 01:15
    # @Author  : gao
    # @File    : adminx.py
    import xadmin
    from users.models import VerifyCode
    from xadmin import views
    
    
    class BaseSetting(object):
        enable_themes = True
        use_bootswatch = True
    
    
    class GlobalSettings(object):
        site_title = "慕学生鲜后台"
        site_footer = "mxshop"
        menu_style = "accordion"
    
    
    class VerifyCodeAdmin(object):
        list_display = ['code', 'mobile', "add_time"]
    
    
    xadmin.site.register(VerifyCode, VerifyCodeAdmin)
    xadmin.site.register(views.BaseAdminView, BaseSetting)
    xadmin.site.register(views.CommAdminView, GlobalSettings)
    

    goods/adminx.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/9/19 下午 01:15
    # @Author  : gao
    # @File    : adminx.py
    import xadmin
    from goods.models import Goods, GoodsCategory, Banner, GoodsCategoryBrand, HotSearchWords, IndexAd, GoodsImage
    
    
    class GoodsAdmin(object):
        list_display = ["name", "click_num", "sold_num", "fav_num", "goods_num", "market_price",
                        "shop_price", "goods_brief", "goods_desc", "is_new", "is_hot", "add_time"]
        search_fields = ['name', ]
        list_editable = ["is_hot", ]
        list_filter = ["name", "click_num", "sold_num", "fav_num", "goods_num", "market_price",
                       "shop_price", "is_new", "is_hot", "add_time", "category__name"]
        style_fields = {"goods_desc": "ueditor"}
    
        class GoodsImagesInline(object):
            model = GoodsImage
            exclude = ["add_time"]
            extra = 1
            style = 'tab'
    
        inlines = [GoodsImagesInline]
    
    
    class GoodsCategoryAdmin(object):
        list_display = ["name", "category_type", "parent_category", "add_time"]
        list_filter = ["category_type", "parent_category", "name"]
        search_fields = ['name', ]
    
    
    class GoodsBrandAdmin(object):
        list_display = ["category", "image", "name", "desc"]
    
        def get_context(self):
            context = super(GoodsBrandAdmin, self).get_context()
            if 'form' in context:
                context['form'].fields['category'].queryset = GoodsCategory.objects.filter(category_type=1)
            return context
    
    
    class BannerGoodsAdmin(object):
        list_display = ["goods", "image", "index"]
    
    
    class HotSearchAdmin(object):
        list_display = ["keywords", "index", "add_time"]
    
    
    class IndexAdAdmin(object):
        list_display = ["category", "goods"]
    
    
    xadmin.site.register(Goods, GoodsAdmin)
    xadmin.site.register(GoodsCategory, GoodsCategoryAdmin)
    xadmin.site.register(Banner, BannerGoodsAdmin)
    xadmin.site.register(GoodsCategoryBrand, GoodsBrandAdmin)
    
    xadmin.site.register(HotSearchWords, HotSearchAdmin)
    xadmin.site.register(IndexAd, IndexAdAdmin)
    

    trade/adminx.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/9/19 下午 01:15
    # @Author  : gao
    # @File    : adminx.py
    import xadmin
    from goods.models import Goods, GoodsCategory, Banner, GoodsCategoryBrand, HotSearchWords, IndexAd, GoodsImage
    
    
    class GoodsAdmin(object):
        list_display = ["name", "click_num", "sold_num", "fav_num", "goods_num", "market_price",
                        "shop_price", "goods_brief", "goods_desc", "is_new", "is_hot", "add_time"]
        search_fields = ['name', ]
        list_editable = ["is_hot", ]
        list_filter = ["name", "click_num", "sold_num", "fav_num", "goods_num", "market_price",
                       "shop_price", "is_new", "is_hot", "add_time", "category__name"]
        style_fields = {"goods_desc": "ueditor"}
    
        class GoodsImagesInline(object):
            model = GoodsImage
            exclude = ["add_time"]
            extra = 1
            style = 'tab'
    
        inlines = [GoodsImagesInline]
    
    
    class GoodsCategoryAdmin(object):
        list_display = ["name", "category_type", "parent_category", "add_time"]
        list_filter = ["category_type", "parent_category", "name"]
        search_fields = ['name', ]
    
    
    class GoodsBrandAdmin(object):
        list_display = ["category", "image", "name", "desc"]
    
        def get_context(self):
            context = super(GoodsBrandAdmin, self).get_context()
            if 'form' in context:
                context['form'].fields['category'].queryset = GoodsCategory.objects.filter(category_type=1)
            return context
    
    
    class BannerGoodsAdmin(object):
        list_display = ["goods", "image", "index"]
    
    
    class HotSearchAdmin(object):
        list_display = ["keywords", "index", "add_time"]
    
    
    class IndexAdAdmin(object):
        list_display = ["category", "goods"]
    
    
    xadmin.site.register(Goods, GoodsAdmin)
    xadmin.site.register(GoodsCategory, GoodsCategoryAdmin)
    xadmin.site.register(Banner, BannerGoodsAdmin)
    xadmin.site.register(GoodsCategoryBrand, GoodsBrandAdmin)
    
    xadmin.site.register(HotSearchWords, HotSearchAdmin)
    xadmin.site.register(IndexAd, IndexAdAdmin)
    

    user_operation/adminx.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/9/19 下午 01:15
    # @Author  : gao
    # @File    : adminx.py
    import xadmin
    from goods.models import Goods, GoodsCategory, Banner, GoodsCategoryBrand, HotSearchWords, IndexAd, GoodsImage
    
    
    class GoodsAdmin(object):
        list_display = ["name", "click_num", "sold_num", "fav_num", "goods_num", "market_price",
                        "shop_price", "goods_brief", "goods_desc", "is_new", "is_hot", "add_time"]
        search_fields = ['name', ]
        list_editable = ["is_hot", ]
        list_filter = ["name", "click_num", "sold_num", "fav_num", "goods_num", "market_price",
                       "shop_price", "is_new", "is_hot", "add_time", "category__name"]
        style_fields = {"goods_desc": "ueditor"}
    
        class GoodsImagesInline(object):
            model = GoodsImage
            exclude = ["add_time"]
            extra = 1
            style = 'tab'
    
        inlines = [GoodsImagesInline]
    
    
    class GoodsCategoryAdmin(object):
        list_display = ["name", "category_type", "parent_category", "add_time"]
        list_filter = ["category_type", "parent_category", "name"]
        search_fields = ['name', ]
    
    
    class GoodsBrandAdmin(object):
        list_display = ["category", "image", "name", "desc"]
    
        def get_context(self):
            context = super(GoodsBrandAdmin, self).get_context()
            if 'form' in context:
                context['form'].fields['category'].queryset = GoodsCategory.objects.filter(category_type=1)
            return context
    
    
    class BannerGoodsAdmin(object):
        list_display = ["goods", "image", "index"]
    
    
    class HotSearchAdmin(object):
        list_display = ["keywords", "index", "add_time"]
    
    
    class IndexAdAdmin(object):
        list_display = ["category", "goods"]
    
    
    xadmin.site.register(Goods, GoodsAdmin)
    xadmin.site.register(GoodsCategory, GoodsCategoryAdmin)
    xadmin.site.register(Banner, BannerGoodsAdmin)
    xadmin.site.register(GoodsCategoryBrand, GoodsBrandAdmin)
    
    xadmin.site.register(HotSearchWords, HotSearchAdmin)
    xadmin.site.register(IndexAd, IndexAdAdmin)
    

    后台菜单变中文

    两种方式,主要根据INSTALLED_APPS来决定

    第一种

    使用config来配置

        'users.apps.UsersConfig',
    

    users/apps.py

    from django.apps import AppConfig
    
    
    class UsersConfig(AppConfig):
        name = 'users'
        verbose_name = "用户管理"
    
    第二种
    'users',
    

    users/apps.py

    from django.apps import AppConfig
    
    
    class UsersConfig(AppConfig):
        name = 'users'
        verbose_name = "用户管理"
    

    users/__ini__.py

    default_app_config = 'users.apps.UsersConfig'
    

    具体使用哪种可自行决定,并修改其它三处

    user_operation/apps.py

    from django.apps import AppConfig
    
    
    class UserOperationConfig(AppConfig):
        name = 'user_operation'
        verbose_name = "用户操作管理"
    

    trade/apps.py

    from django.apps import AppConfig
    
    
    class TradeConfig(AppConfig):
        name = 'trade'
        verbose_name = "交易管理"
    

    goods/apps.py

    from django.apps import AppConfig
    
    
    class GoodsConfig(AppConfig):
        name = 'goods'
        verbose_name = "商品"
    

    导入数据

    由于分类和商品很多,就写个脚本导入数据
    单独使用django的model,批量导入数据
    db_tools下新建文件夹data,将category_data.py和product_data.py拷贝到这里面
    把图片都拷贝到media目录下

    db_tools目录下新建文件 import_category_data.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/9/19 下午 04:01
    # @Author  : gao
    # @File    : import_category_data.py
    
    
    # 独立使用django的model
    import sys
    import os
    
    # 获取当前文件的路径(运行脚本)
    pwd = os.path.dirname(os.path.realpath(__file__))
    # 获取项目的根目录
    sys.path.append(pwd + "../")
    # 要想单独使用django的model,必须指定一个环境变量,会去settings配置找
    # 参照manage.py里面就知道为什么这样设置了
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MxShop.settings")
    
    import django
    
    django.setup()
    
    from goods.models import GoodsCategory
    
    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()
        # 二级类
        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()
    

    db_tools目录下新建文件import_goods_data.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/9/19 下午 04:02
    # @Author  : gao
    # @File    : 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"]
        #前端中是“¥232”,数据库中是float类型,所以要替换掉
        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]
        # 取出当前子类对应的GoodsCategory对象,filter没有匹配的会返回空数组,不会抛异常。
        category = GoodsCategory.objects.filter(name=category_name)
        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()
    

    运行这两个脚本文件,将数据添加到数据库中

    配置media路径

    settings.py

    # 设置上传文件的路径
    MEDIA_URL="/media/"
    MEDIA_ROOT=os.path.join(BASE_DIR,"media")
    

    urls.py

    from django.views.static import serve
    
    import xadmin
    from django.urls import path, include
    
    from MxShop.settings import MEDIA_ROOT
    
    urlpatterns = [
        path('admin/', xadmin.site.urls),
        path('ueditor/', include('DjangoUeditor.urls')),
        path('media/<path:path>', serve, {'document_root': MEDIA_ROOT}),
    ]
    
  • 相关阅读:
    vue :调用子组件 ,watch props 时,监听不到
    table 》 td 超出内容过长显示...
    kendo 服务端排序
    Highcharts的基本属性和方法详解
    使用vue element table 自定义列模版
    vue 结合JQ ajax 作用域会改变
    实用的javascript 简写--读后感~
    【iOS】iOS13新增的暗黑模式(Dark Mode)
    【iOS】iOS13后新增的Scene Delegate和不使用工程自带的Main.storyboard
    【iOS】检测项目中是否包含UIWebView
  • 原文地址:https://www.cnblogs.com/gaoyongjian/p/9985513.html
Copyright © 2011-2022 走看看