Django REST framework+Vue 打造生鲜超市(三)
代码下载
github
教程
学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市
四、xadmin后台管理
4.1.xadmin添加富文本插件
(1)xadmin/plugins文件夹下新建文件ueditor.py
代码如下:
# xadmin/plugins/ueditor.pyimport xadmin from xadmin.views import BaseAdminPlugin, CreateAdminView, ModelFormAdminView, UpdateAdminView from DjangoUeditor.models import UEditorField from DjangoUeditor.widgets import UEditorWidget from django.conf import settingsclass XadminUEditorWidget(UEditorWidget):def __init__(self, **kwargs):self.ueditor_options = kwargsself.Media.js = Nonesuper(XadminUEditorWidget,self).__init__(kwargs)class UeditorPlugin(BaseAdminPlugin):def get_field_style(self, attrs, db_field, style, **kwargs):if style == 'ueditor':if isinstance(db_field, UEditorField):widget = db_field.formfield().widgetparam = {}param.update(widget.ueditor_settings)param.update(widget.attrs)return {'widget':XadminUEditorWidget(**param)}return attrsdef block_extrahead(self, context, nodes):js = '<script type="text/javascript" src="%s"></script>' %(settings.STATIC_URL + "ueditor/ueditor.config.js")js += '<script type="text/javascript" src="%s"></script>' %(settings.STATIC_URL + "ueditor/ueditor.all.min.js")nodes.append(js)xadmin.site.register_plugin(UeditorPlugin, UpdateAdminView) xadmin.site.register_plugin(UeditorPlugin, CreateAdminView)
(2)把插件添加到__init__.py里面
# xadmin/plugins/__init__.pyPLUGINS = ('ueditor', )
4.2.url配置
配置xadmin和ueditor的路由
# MxShop/urls.pyimport xadminfrom django.urls import path,includeurlpatterns = [path('xadmin/', xadmin.site.urls),path('ueditor/', include('DjangoUeditor.urls')), ]
4.3.注册app到xadmin后台
四个app下面都新建文件adminx.py,然后分别注册到后台
(1)users/adminx.py
# users/adminx.py __author__ = 'derek'import xadmin from xadmin import views from .models import VerifyCodeclass BaseSetting(object):#添加主题功能enable_themes = Trueuse_bootswatch = Trueclass GlobalSettings(object):#全局配置,后台管理标题和页脚site_title = "仙剑奇侠传"site_footer = "http://www.cnblogs.com/derek1184405959/"#菜单收缩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)
修改app名字为中文
# users/apps.pyfrom django.apps import AppConfigclass UsersConfig(AppConfig):name = 'users'#app名字后台显示中文verbose_name = "用户管理"
还需要__init__.py中修改默认配置才生效
# users/__init__.pydefault_app_config = 'users.apps.UsersConfig'
其它三个app一样的操作
(2)goods/adminx.py
# goods/adminx.pyimport xadmin from .models import Goods, GoodsCategory, GoodsImage, GoodsCategoryBrand, Banner, HotSearchWords from .models import IndexAdclass 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 = GoodsImageexclude = ["add_time"]extra = 1style = '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 contextclass 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)
# goods/apps.pyfrom django.apps import AppConfigclass GoodsConfig(AppConfig):name = 'goods'verbose_name = '商品管理'
# good/__init__.pydefault_app_config = 'goods.apps.GoodsConfig'
(3)trade/adminx.py
# trade/adminx.py __author__ = 'derek'import xadmin from .models import ShoppingCart, OrderInfo, OrderGoodsclass ShoppingCartAdmin(object):list_display = ["user", "goods", "nums", ]class OrderInfoAdmin(object):list_display = ["user", "order_sn", "trade_no", "pay_status", "post_script", "order_mount","order_mount", "pay_time", "add_time"]class OrderGoodsInline(object):model = OrderGoodsexclude = ['add_time', ]extra = 1style = 'tab'inlines = [OrderGoodsInline, ]xadmin.site.register(ShoppingCart, ShoppingCartAdmin) xadmin.site.register(OrderInfo, OrderInfoAdmin)
# trade/apps.pyfrom django.apps import AppConfigclass TradeConfig(AppConfig):name = 'trade'verbose_name = '交易管理'
# trade/__init__.pydefault_app_config = 'trade.apps.TradeConfig'
(4)user_operation/adminx.py
# user_operation/adminx.py __author__ = 'derek'import xadmin from .models import UserFav, UserLeavingMessage, UserAddressclass UserFavAdmin(object):list_display = ['user', 'goods', "add_time"]class UserLeavingMessageAdmin(object):list_display = ['user', 'message_type', "message", "add_time"]class UserAddressAdmin(object):list_display = ["signer_name", "signer_mobile", "district", "address"]xadmin.site.register(UserFav, UserFavAdmin) xadmin.site.register(UserAddress, UserAddressAdmin) xadmin.site.register(UserLeavingMessage, UserLeavingMessageAdmin)
# user_operation/apps.pyfrom django.apps import AppConfigclass UserOperationConfig(AppConfig):name = 'user_operation'verbose_name = '操作管理'
# user_operation/__init__.pydefault_app_config = 'user_operation.apps.UserOperationConfig'
(5)生成数据库表
python manage.py makemigrationspython manage.py migrate
4.4.导入商品类别数据
由于分类和商品很多,就写个脚本导入数据
单独使用django的model,批量导入数据
- db_tools下新建文件夹data,然后把前端的json文件(category_data和product_data)拷贝到里面
- 把brands和goods图片拷贝到media目录下
db_tools下新建文件 import_category_data.py
代码如下:
# db_tools/data/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 GoodsCategoryfrom 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 = 2lev2_intance.parent_category = lev1_intancelev2_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 = 3lev3_intance.parent_category = lev2_intancelev3_intance.save()
然后运行脚本 import_category_data.py 数据就可以保存到数据库了
4.5.导入商品
在data目录下新建import_goods_data.py
import sys import ospwd = 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, GoodsImagefrom db_tools.data.product_data import row_datafor 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_imagegoods_image_instance.goods = goodsgoods_image_instance.save()
然后运行,把商品生产到数据库中
配置media路径
settings中
# 设置上传文件的路径 MEDIA_URL="/media/" MEDIA_ROOT=os.path.join(BASE_DIR,"media")
urls.py
# MxShop/urls.py __author__ = 'derek'from django.urls import path,include import xadmin from django.views.static import serve from MxShop.settings import MEDIA_ROOTurlpatterns = [path('xadmin/', xadmin.site.urls),path('ueditor/',include('DjangoUeditor.urls' )),#文件path('media/<path:path>',serve,{'document_root':MEDIA_ROOT}), ]
目录结构
Django REST framework+Vue 打造生鲜超市(三)相关推荐
- Django REST framework+Vue 打造生鲜超市(四)
目录 生鲜超市(一) 生鲜超市(二) 生鲜超市(三) 生鲜超市(四) 生鲜超市(五) 生鲜超市(六) 生鲜超市(七) 生鲜超市(八) 生鲜超市(九) 生鲜超市(十) ...
- Django REST framework+Vue 打造生鲜超市(二)
代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 三.Models设计 3.1.项目初始化 (1)进虚拟环境下安装 django2.0.2 d ...
- Django REST framework+Vue 打造生鲜超市(六)
目录 生鲜超市(一) 生鲜超市(二) 生鲜超市(三) 生鲜超市(四) 生鲜超市(五) 生鲜超市(六) 生鲜超市(七) 生鲜超市(八) 生鲜超市(九) 生鲜超市(十) ...
- Django REST framework+Vue 打造生鲜超市(十)
目录 生鲜超市(一) 生鲜超市(二) 生鲜超市(三) 生鲜超市(四) 生鲜超市(五) 生鲜超市(六) 生鲜超市(七) 生鲜超市(八) 生鲜超市(九) 生鲜超市(十) ...
- Django REST framework+Vue 打造生鲜超市(十三)
目录 生鲜超市(一) 生鲜超市(二) 生鲜超市(三) 生鲜超市(四) 生鲜超市(五) 生鲜超市(六) 生鲜超市(七) 生鲜超市(八) 生鲜超市(九) 生鲜超市(十) ...
- Django REST framework+Vue 打造生鲜超市(五)
六.商品类别数据展示 6.1. 商品类别数据接口 (1)商品分类有两个接口: 一种是全部分类:一级二级三级 一种是某一类的分类以及商品详细信息: 开始写商品分类的接口 (2)序列化 给分类添加三级分类 ...
- Django进阶 Django REST framework+Vue 打造生鲜超市第一天 搭建环境
新人学习django 是按照这个大佬的教程学习的 链接: https://www.cnblogs.com/derek1184405959/p/8733194.html. 很多步骤都是按照上面的教程学习 ...
- Django REST framework+Vue 打造生鲜电商项目(笔记八)
(form:http://www.cnblogs.com/derek1184405959/p/8862569.html) 十一.pycharm 远程代码调试 第三方登录和支付,都需要有服务器才行(回调 ...
- python全栈生鲜电商_Django REST framework+Vue 打造生鲜电商项目(笔记十)
(from:https://www.cnblogs.com/derek1184405959/p/8877643.html 有修改) 十三.首页.商品数量.缓存和限速功能开发 首先把pycharm环境 ...
最新文章
- SQLServer之ISO游标使用
- 苹果服务器修改主目录就打不开,苹果应用商店又挂了 App Store打不开怎么修复...
- MYSQL因为索引问题导致的死锁分析
- ROS知识[14]:安装ubuntu 18.04和eclipse+CDT(installer)
- 笔记-高项案例题-2013年下-计算题
- 跑三小时的monkey测试该怎么算_百亿次的锤炼 - 带逛Dragonboat的各类测试
- Gym102028G Shortest Paths on Random Forests 生成函数、多项式Exp
- javascript练习案例--消失的星星
- 第3关:HTML表格:日常消费账单表格展示网页
- 51单片机蓝牙小车程序详解
- 傅里叶变换的性质及证明(CTFT)
- 我的个人知识管理PKM
- 霍尼韦尔和陕西西咸新区签订投资战略协议;雀巢专业餐饮成都客户交流体验中心落成 | 美通企业日报...
- 宏转录组方法_土壤宏转录组RNA的提取方法评价
- linux常用的基本指令
- execjs 调用js出现找不到windows对象
- U3D控制摄像头第一人称WASD移动旋转
- Oracle数据库导入导出emp文件
- html列表详情页,如何区分一个页面是列表页还是详情页
- 核烧写及UBOOT调试经验总结