chapter 8 商品

目录

 

8.1 商品详情

8.3商品收藏

8.4用户权限设置


8.1 商品详情

goods.views.py修改GoodsListView

class GoodsListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin,viewsets.GenericViewSet):

goods.serializer.py

class GoodsImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = GoodsImage
        fields = ("image",)


class GoodsSerialize(serializers.ModelSerializer):#serializers.ModelSerializer不再继承serializers.Serializer了
    category = GoodsCategorySerialize()#category 为goods的外键这里直接继承外键的内容,就可以将外键的内容全部显示,但是前端无影响!!!
    images = GoodsImageSerializer(many=True)
    class Meta:
        model = Goods
        fields = "__all__"

8.3商品收藏

user_operator.serializers.py

from rest_framework.validators import UniqueTogetherValidator
from rest_framework import serializers
from .models import UserFav,UserLeavingMessage,UserAddress
from goods.serializer import GoodsSerializer



class UserFavSerializer(serializers.ModelSerializer):
    user = serializers.HiddenField(#收藏使用当前用户
        default=serializers.CurrentUserDefault()
    )

    class Meta:
        model = UserFav

        # 使用validate方式实现唯一联合
        validators = [
            UniqueTogetherValidator(
                queryset=UserFav.objects.all(),
                fields=('user', 'goods'),
                message="已经收藏"#消息会返回到前端
            )
        ]

        fields = ("user", "goods", "id")

user_operator.views.py

class UserFavViewset(viewsets.GenericViewSet, mixins.ListModelMixin, mixins.CreateModelMixin, mixins.RetrieveModelMixin,
                     mixins.DestroyModelMixin):
    """
    list:
        获取用户收藏列表
    retrieve:
        判断某个商品是否已经收藏
    create:
        收藏商品
    """
    queryset = UserFav.objects.all()
    # permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
    serializer_class = UserFavSerializer

8.4用户权限设置

1、在utils中新建premissions.py 文件

from rest_framework import permissions

#验证是否为当前用户
class IsOwnerOrReadOnly(permissions.BasePermission):
    """
    Object-level permission to only allow owners of an object to edit it.
    Assumes the model instance has an `owner` attribute.
    """

    def has_object_permission(self, request, view, obj):
        # Read permissions are allowed to any request,
        # so we'll always allow GET, HEAD or OPTIONS requests.
        if request.method in permissions.SAFE_METHODS:
            return True

        # Instance must have an attribute named `owner`.
        return obj.user == request.user

修改user_operatior.views.py文件

from django.shortcuts import render
from rest_framework import viewsets
from rest_framework import mixins
# Create your views here.
from .models import UserFav, UserLeavingMessage, UserAddress
from .serializers import UserFavSerializer, UserFavDetailSerializer, LeavingMessageSerializer, AddressSerializer
from rest_framework.permissions import IsAuthenticated
from utils.permissions import IsOwnerOrReadOnly
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.authentication import SessionAuthentication


class UserFavViewset(viewsets.GenericViewSet, mixins.ListModelMixin, mixins.CreateModelMixin, mixins.RetrieveModelMixin,
                     mixins.DestroyModelMixin):
    """
    list:
        获取用户收藏列表
    retrieve:
        判断某个商品是否已经收藏
    create:
        收藏商品
    """
    # queryset = UserFav.objects.all()
    #验证是否登陆
    permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
    serializer_class = UserFavSerializer
    lookup_field = 'goods_id'
    # lookup_field = 'goods'
    #用户权限认证
    authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)

    # 收藏数+1
    # def perform_create(self, serializer):
    #     instance = serializer.save()
    #     # 通过这个instance Userfav找到goods
    #     goods = instance.goods
    #     goods.fav_num +=1
    #     goods.save()

    #值获取当前用户收藏
    def get_queryset(self):
        return UserFav.objects.filter(user=self.request.user)

8.5用户收藏功能和前端联调

前端代码有bug,需要修改cookie.setCkooie(),cookie.getCookie(),还有收藏的函数

猜你喜欢

转载自blog.csdn.net/bobbykey/article/details/81335698
今日推荐