本块 学习的 用户操作包括 用户收藏 用户地址填写 用户留言
用户收藏 包括了 list create delete retrieve 基本功能 都包含了
views 这里面 我基本写的比较明白了
class UserFavViewset(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin,
mixins.DestroyModelMixin, viewsets.GenericViewSet):
"""
list:
获取用户收藏列表
retrieve:
判断某个商品是否已经收藏
create:
收藏商品
"""
# 不能获取全部
# queryset = UserFav.objects.all()
# IsAuthenticated 验证用户是否登录 IsOwnerOrReadOnly 用户只能操作属于自己的东西
permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
# serializer_class = UserFavSerializer
authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
lookup_field = 'goods_id' # 以前是搜索的数据表本身id 这里就是使用goods_id进行搜索 不用数据表id
def get_queryset(self):
# 获取属于用户的收藏list
return UserFav.objects.filter(user=self.request.user)
def get_serializer_class(self): #动态设置 serializer 前面讲过了
if self.action == 'list':
return UserFavDetailserializer # 个人中心
elif self.action == 'create':
return UserFavSerializer # 收藏功能
return UserFavSerializer
serializer
# 个人中心商品收藏
class UserFavDetailserializer(serializers.ModelSerializer):
goods = GoodsSerializer() # 获取goods商品的详情
class Meta:
model = UserFav
fields = ['goods', 'id']
# 商品详情页收藏功能
class UserFavSerializer(serializers.ModelSerializer):
# 获取当前用户 如果不定义 直接用user字段 就会把所有用户都取出来
user = serializers.HiddenField(
default=serializers.CurrentUserDefault()
)
class Meta:
model = UserFav
# 唯一集合 所以不能多选 model 和serializer 只用配置一个
validators = [
UniqueTogetherValidator(
queryset=UserFav.objects.all(),
fields=('user', 'goods'),
message="已经收藏"
)
]
fields = ['user', 'goods', 'id']
基本都差不多
所以我就不把 用户留言和 用户地址 放上来了