当前位置: 首页 > news >正文

网站设计模板怎么使用上海抖音seo公司

网站设计模板怎么使用,上海抖音seo公司,备案域名出售,北京黄页01用户模块模型定义_哔哩哔哩_bilibili 本博客借鉴至大佬的视频学习笔记 用户模块及商品数据表结构设计 from ckeditor.fields import RichTextField # pip install django-ckeditor from django.db import models# Create your models here. # from wx.richtext import Ri… 01用户模块模型定义_哔哩哔哩_bilibili  本博客借鉴至大佬的视频学习笔记 用户模块及商品数据表结构设计 from ckeditor.fields import RichTextField # pip install django-ckeditor from django.db import models# Create your models here. # from wx.richtext import RichTextFieldfrom common.db import BaseModelclass GoodsGroup(BaseModel):商品分类name models.CharField(verbose_name分类名称, help_text分类名称, max_length15,blankTrue,nullTrue)image models.CharField(verbose_name图片链接, help_text图片链接, max_length200, blankTrue, nullTrue)status models.BooleanField(verbose_name是否启用, help_text是否启用, defaultFalse,blankTrue,nullTrue)class Meta:db_table goods_groupverbose_name 商品分类表verbose_name_plural verbose_namedef __str__(self):return self.nameclass Goods(BaseModel):商品group models.ForeignKey(GoodsGroup, verbose_name分类, help_text分类, max_length15, on_deletemodels.CASCADE)image models.CharField(verbose_name图片链接, help_text图片链接, max_length200, blankTrue, nullTrue)title models.CharField(verbose_name标题, help_text标题, max_length20, blankTrue,nullTrue)desc models.CharField(verbose_name商品描述, help_text商品描述, max_length200, blankTrue,nullTrue)price models.DecimalField(verbose_name商品价格, help_text商品价格, max_digits10, decimal_places2, blankTrue,nullTrue)cover models.ImageField(verbose_name封面图链接, help_text封面图链接, max_length200, blankTrue,nullTrue)stock models.IntegerField(verbose_name库存, help_text库存, blankTrue, nullTrue, default1)sales models.IntegerField(verbose_name销量, help_text销量, blankTrue, nullTrue, default0)is_on models.BooleanField(verbose_name是否上架, help_text是否上架, blankTrue, nullTrue, defaultFalse)recommend models.BooleanField(verbose_name是否推荐, help_text是否推荐, blankTrue, nullTrue, defaultFalse)class Meta:db_table goodsverbose_name 商品表verbose_name_plural verbose_namedef __str__(self):return self.titleclass Detail(BaseModel):商品详情goods models.OneToOneField(Goods, verbose_name商品, on_deletemodels.CASCADE, max_length200)producer models.CharField(verbose_name厂商, help_text厂商, max_length200, blankTrue,nullTrue)norms models.CharField(verbose_name规格, help_text规格, max_length200, blankTrue,nullTrue)details RichTextField(verbose_name商品详情, help_text商品详情, max_length200,blankTrue,nullTrue)class Meta:db_table detailsverbose_name 详情verbose_name_plural verbose_namedef __str__(self):return self.goodsclass GoodsBanner(BaseModel):商品轮播图title models.CharField(verbose_name轮播图名称, help_text轮播图名称, max_length20, blankTrue)image models.ImageField(verbose_name轮播图链接, help_text轮播图链接, max_length200, blankTrue)# url models.CharField(verbose_name跳转的地址,help_text跳转的地址,max_length200,blankTrue)status models.BooleanField(verbose_name是否启用, help_text是否启用, defaultFalse,blankTrue,nullTrue)seq models.IntegerField(verbose_name顺序, help_text顺序, default1, blankTrue,nullTrue)class Meta:db_table bannerverbose_name 首页商品轮播verbose_name_plural verbose_namedef __str__(self):return self.titleclass Collect(models.Model):商品收藏user models.ForeignKey(users.User, help_text用户ID, verbose_name用户ID, on_deletemodels.CASCADE,blankTrue,nullTrue)goods models.ForeignKey(goods.Goods, help_text商品ID, verbose_name商品ID, on_deletemodels.CASCADE,blankTrue,nullTrue)class Meta:db_table collectverbose_name 收藏商品verbose_name_plural verbose_namedef __str__(self):return self.goodsDjango自带admin配置 from django.contrib import admin from .models import GoodsGroup,Goods,Detail,GoodsBanner,Collect # Register your models here.admin.register(GoodsGroup) class GoodsGroupAdmin(admin.ModelAdmin):list_display [name,status]admin.register(Goods) class GoodsAdmin(admin.ModelAdmin):list_display [title,group,price,stock,sales,is_on]admin.register(Detail) class DetailGroupAdmin(admin.ModelAdmin):list_display [goods, producer,norms]admin.register(GoodsBanner) class GoodsBannerAdmin(admin.ModelAdmin):list_display [title, status]admin.register(Collect) class CollectAdmin(admin.ModelAdmin):list_display [user, goods]商品首页接口实现 class IndexView(APIView):首页数据展示def get(self,request):返回轮播图、商品分类group GoodsGroup.objects.filter(statusTrue)groupSer GoodsGroupSerializer(group,manyTrue)# 轮播图banner GoodsBanner.objects.filter(statusTrue)bannerSer GoodsBannerSerializer(banner,manyTrue)# 推荐的商品goods Goods.objects.filter(recommendTrue)goodsSer GoodsSerializer(goods,manyTrue)# 返回数据result {banner: bannerSer.data,goods:goodsSer.data,group:groupSer.data}return Response({message:ok,data:result},statusstatus.HTTP_200_OK)# 商品首页 path(index/, IndexView.as_view()), 商品列表获取和分类排序接口 # view class GoodsView(ReadOnlyModelViewSet):商品列表接口serializer_class GoodsSerializer# 选择上架的商品queryset Goods.objects.filter(is_onTrue),# 实现商品分类和推荐类过滤filterset_fields (group,recommend)# 通过价格和销量排序ordering_fields (sales,price,create_time)# url # 商品列表接口 path(goods/, GoodsView.as_view({get:list})), # 单个商品获取 path(goods/int:pk/, GoodsView.as_view({get:retrieve})),# setting # 过滤器信息配置、排序器配置 DEFAULT_FILTER_BACKENDS:[django_filters.rest_framework.DjangoFilterBackend,rest_framework.filters.OrderingFilter]# 注册 django_filters, 商品的收藏与取消收藏接口 # view class CollectView(mixins.RetrieveModelMixin,mixins.CreateModelMixin,mixins.ListModelMixin,mixins.DestroyModelMixin,GenericViewSet):商品收藏与取消create: 收藏delete: 取消list: 收藏列表queryset Collect.objects.all()serializer_class CollectSerializerpermission_classes [IsAuthenticated,CollectPermissions]filterset_fields (user,)def create(self, request, *args, **kwargs):# 获取请求参数user request.userparams_user_id request.data.get(user)# 检验请求参数中的id是否当前登录的用户IDif user.id ! params_user_id:return Response({error:你没有用户权限访问该信息},statusstatus.HTTP_400_BAD_REQUEST)return super().create(request, *args, **kwargs)def list(self, request, *args, **kwargs):商品收藏列表queryset self.filter_queryset(self.get_queryset())queryset queryset.filter(userrequest.user)serializer self.get_serializer(queryset, manyTrue)return Response(serializer.data)# perssion from rest_framework import permissions class CollectPermissions(permissions.BasePermission):Custom permission to only allow owners of an object to edit it.def has_object_permission(self, request, view, obj):# 判断是否是管理员if request.user.is_superuser:return True# 判断当前的用户对象和登录的用户对象是否是同一个防止越权return obj request.user# url # 收藏商品 path(collect/, CollectView.as_view({post:create,get:list})), # 取消收藏 path(collect/del/int:pk/, CollectView.as_view({delete:destroy})), 商品购物车的接口实现 购物车添加数量、修改商品购物车状态、加购商品 # serializer from rest_framework import serializers from apps.cart.models import Cart from apps.goods.serializers import GoodsSerializerclass CartSerializer(serializers.ModelSerializer):用户的模型序列化器-写入class Meta:model Cartfields __all__class ReadInfoSerializer(serializers.ModelSerializer):用户的模型序列化器-读取goods GoodsSerializer()class Meta:model Cartfields __all__# view from rest_framework import status from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet,mixins from .models import Cart from .serializers import CartSerializer, ReadInfoSerializer# Create your views here.class CartViecw(GenericViewSet,mixins.CreateModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,mixins.ListModelMixin):queryset Cart.objects.all()serializer_class CartSerializerdef get_serializer_class(self):# 实现读写操作使用不同的序列化器if self.action list:return ReadInfoSerializerelse:return self.serializer_classdef create(self, request, *args, **kwargs):user request.usergoods request.data.get(goods)if Cart.objects.filter(useruser,goodsgoods):# 该商品存在cart_goods Cart.objects.get(useruser,goodsgoods)cart_goods.number 1cart_goods.save()# 商品序列化serializer self.get_serializer(cart_goods)return Response(serializer.data,statusstatus.HTTP_201_CREATED)else:# 没有该商品则进行添加该商品request.data[user] user.idreturn super().create(request,*args,**kwargs)def list(self, request, *args, **kwargs):query self.get_queryset().filter(userrequest.user)serializer self.get_serializer(query, manyTrue)return Response(serializer.data)def update_goods_status(self,request, *args, **kwargs):obj self.get_object()obj.is_checked not obj.is_checkedobj.save()return Response({message:修改成功},statusstatus.HTTP_200_OK)def update_goods_number(self,request, *args, **kwargs):number request.data.get(number)obj self.get_object()if not isinstance(number,int): return Response({error:参数number只可为INT类型})if number obj.goods.stock:return Response({message: 数量不可超过该商品的库存数量}, statusstatus.HTTP_422_UNPROCESSABLE_ENTITY)elif number 0:obj.delete()return Response({message:修改成功,已删除},statusstatus.HTTP_200_OK)else:obj.number numberobj.save()return Response({message: 修改成功}, statusstatus.HTTP_200_OK)# url from apps.cart.views import CartViecw urlpatterns [# 商品首页path(cart/, CartViecw.as_view({post:create,get:list})),# 修改商品购物车的状态path(cart/int:pk/checked/, CartViecw.as_view({put:update_goods_status})),# 修改商品数量path(cart/int:pk/number/, CartViecw.as_view({put: update_goods_number})),] 以上是django restframework商城的后端实现。
http://www.hkea.cn/news/14514449/

相关文章:

  • 龙岗商城网站建设宜昌营销网站建设
  • 苏州做网站设计的公司洪山网站建设
  • 哪个网站有做视频转场的素材微商城官网登陆入口
  • 京东网站建设设计框架图太原最新新闻消息
  • 介绍自己做的网站的论文软件开发一般用什么软件
  • 如何让网站自适应wordpress不能添加用户
  • 网站开发前端和后端2022营业执照年审入口
  • 网站内页301重定向个人性质网站
  • 中国企业网站设计案例大连建设网站制作
  • 无锡网站设计公司引擎优化搜索
  • 海参企业网站怎么做网站专题设计
  • 漯河网站制作辽宁建设工程信息网开标大厅
  • 广州网页设计网站临淄找工作信息网
  • 电子科技企业网站建设重庆建设集团网站
  • 怎么做公司内网网站珠海免费景点
  • 网站制作与网页制作建设项目环境登记表辽宁省网站
  • 长沙做网站开发多少钱vi设计什么意思
  • 淘宝券商城网站制作网站如何被收录情况
  • 基于互联网 模式下的安全网站建设seo深圳网络推广
  • 建筑网站可以ai绘画吗wordpress 珠宝
  • 聊城网站建设包括哪些效果好网站建设哪家好
  • 南宁网站建设技术精粹优化设计五年级下册语文答案
  • 网站备案在哪里查询视频推广平台
  • 一级a做爰片免费网站体验网络规划设计师教程第2版2021版pdf
  • 用cms创建自己带数据库的网站WordPress不收录首页
  • 优秀网站模板如何用抖音做推广
  • 网站是如何建立的wordpress怎样上传目录本
  • 网站做菠菜开发平台游戏
  • 公司网站优化怎么做网站权重和什么有关
  • 大型网站开发价格惠州网站建设哪家强