本塊 學(xué)習(xí)的 用戶操作包括 用戶收藏 用戶地址填寫 用戶留言
用戶收藏 包括了 list create delete retrieve 基本功能 都包含了
views 這里面 我基本寫的比較明白了
class UserFavViewset(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin,
mixins.DestroyModelMixin, viewsets.GenericViewSet):
"""
list:
獲取用戶收藏列表
retrieve:
判斷某個(gè)商品是否已經(jīng)收藏
create:
收藏商品
"""
# 不能獲取全部
# queryset = UserFav.objects.all()
# IsAuthenticated 驗(yàn)證用戶是否登錄 IsOwnerOrReadOnly 用戶只能操作屬于自己的東西
permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
# serializer_class = UserFavSerializer
authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
lookup_field = 'goods_id' # 以前是搜索的數(shù)據(jù)表本身id 這里就是使用goods_id進(jìn)行搜索 不用數(shù)據(jù)表id
def get_queryset(self):
# 獲取屬于用戶的收藏list
return UserFav.objects.filter(user=self.request.user)
def get_serializer_class(self): #動(dòng)態(tài)設(shè)置 serializer 前面講過了
if self.action == 'list':
return UserFavDetailserializer # 個(gè)人中心
elif self.action == 'create':
return UserFavSerializer # 收藏功能
return UserFavSerializer
serializer
# 個(gè)人中心商品收藏
class UserFavDetailserializer(serializers.ModelSerializer):
goods = GoodsSerializer() # 獲取goods商品的詳情
class Meta:
model = UserFav
fields = ['goods', 'id']
# 商品詳情頁收藏功能
class UserFavSerializer(serializers.ModelSerializer):
# 獲取當(dāng)前用戶 如果不定義 直接用user字段 就會(huì)把所有用戶都取出來
user = serializers.HiddenField(
default=serializers.CurrentUserDefault()
)
class Meta:
model = UserFav
# 唯一集合 所以不能多選 model 和serializer 只用配置一個(gè)
validators = [
UniqueTogetherValidator(
queryset=UserFav.objects.all(),
fields=('user', 'goods'),
message="已經(jīng)收藏"
)
]
fields = ['user', 'goods', 'id']
基本都差不多
所以我就不把 用戶留言和 用戶地址 放上來了