一.DRF文档生成及用户相关信息修改
1.1 访问http://127.0.0.1:8000/docs 可以生成文档
①.urls 添加
#drf文档,title自定义 path(‘docs‘,include_docs_urls(title=‘Rc生鲜‘)),
1.2 用户收藏详情
①.user_operation/serializer.py中添加
class UserFavDetailSerializer(serializers.ModelSerializer): ‘‘‘ 用户收藏详情 ‘‘‘ #通过商品id获取收藏的商品,需要嵌套商品的序列化 goods = GoodsSerializer() class Meta: model = UserFav fields = ("goods", "id")
②.user_operation/view.py中添加
from rest_framework import viewsets from rest_framework import mixins from .models import UserFav from .serializers import UserFavSerializer,UserFavDetailSerializer 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.DestroyModelMixin): ‘‘‘ list: 用户收藏列表 create: 收藏 destroy: 取消收藏 ‘‘‘ serializer_class = UserFavSerializer # permission是用来做权限判断的 # IsAuthenticated:必须登录用户;IsOwnerOrReadOnly:必须是当前登录的用户 permission_classes = (IsAuthenticated, IsOwnerOrReadOnly) # auth使用来做用户认证的 authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication) # 搜索的字段 lookup_field = ‘goods_id‘ # 动态选择serializer def get_serializer_class(self): if self.action == "list": return UserFavDetailSerializer elif self.action == "create": return UserFavSerializer return UserFavSerializer def get_queryset(self): # 只能查看当前登录用户的收藏,不会获取所有用户的收藏 return UserFav.objects.filter(user=self.request.user)
1.3 用户留言功能
①.user_operation下serializers.py添加
class LeavingMessageSerializer(serializers.ModelSerializer): ‘‘‘ 用户留言 ‘‘‘ # 获取当前登录的用户 user = serializers.HiddenField( default=serializers.CurrentUserDefault() ) #read_only:只返回,post时候可以不用提交,format:格式化输出 add_time = serializers.DateTimeField(read_only=True, format=‘%Y-%m-%d %H:%M‘) class Meta: model = UserLeavingMessage fields = ("user", "message_type", "subject", "message", "file", "id" ,"add_time")
②.user_operation下view.py添加
class LeavingMessageViewset(mixins.ListModelMixin, mixins.DestroyModelMixin, mixins.CreateModelMixin, viewsets.GenericViewSet): """ list: 获取用户留言 create: 添加留言 delete: 删除留言功能 """ permission_classes = (IsAuthenticated, IsOwnerOrReadOnly) authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication) serializer_class = LeavingMessageSerializer # 只能看到自己的留言 def get_queryset(self): return UserLeavingMessage.objects.filter(user=self.request.user)
③.urls.py 配置
# 配置用户留言的url router.register(r‘messages‘, LeavingMessageViewset, basename="messages")
1.4 用户收货地址
①.user_operation下序列化文件
class AddressSerializer(serializers.ModelSerializer): user = serializers.HiddenField( default=serializers.CurrentUserDefault() ) add_time = serializers.DateTimeField(read_only=True, format=‘%Y-%m-%d %H:%M‘) class Meta: model = UserAddress fields = ("id", "user", "province", "city", "district", "address", "signer_name", "add_time", "signer_mobile")
②.user_operation下view.py文件
class AddressViewset(viewsets.ModelViewSet): """ 收货地址管理 list: 获取收货地址 create: 添加收货地址 update: 更新收货地址 delete: 删除收货地址 """ permission_classes = (IsAuthenticated, IsOwnerOrReadOnly) authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication) serializer_class = AddressSerializer def get_queryset(self): return UserAddress.objects.filter(user=self.request.user)
③.urls.py配置
# 配置收货地址 router.register(r‘address‘,AddressViewset , basename="address")
二.订单支付相关操作
1.1 购物车
①.ulrs.py以及相关配置
from rest_framework import viewsets from rest_framework.permissions import IsAuthenticated from utils.permissions import IsOwnerOrReadOnly from rest_framework_jwt.authentication import JSONWebTokenAuthentication from rest_framework.authentication import SessionAuthentication from .serializers import ShopCartSerializer, ShopCartDetailSerializer from .models import ShoppingCart class ShoppingCartViewset(viewsets.ModelViewSet): """ 购物车功能 list: 获取购物车详情 create: 加入购物车 delete: 删除购物记录 """ permission_classes = (IsAuthenticated, IsOwnerOrReadOnly) authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication) serializer_class = ShopCartSerializer lookup_field = "goods_id" def get_queryset(self): return ShoppingCart.objects.filter(user=self.request.user) def get_serializer_class(self): if self.action == ‘list‘: return ShopCartDetailSerializer
from goods.serializers import GoodsSerializer from .models import ShoppingCart, OrderGoods, OrderInfo from rest_framework import serializers from goods.models import Goods import time class ShopCartSerializer(serializers.Serializer): # 获取当前登录的用户 user = serializers.HiddenField( default=serializers.CurrentUserDefault() ) nums = serializers.IntegerField(required=True, label="数量", min_value=1, error_messages={ "min_value": "商品数量不能小于一", "required": "请选择购买数量" }) # 这里是继承Serializer,必须指定queryset对象,如果继承ModelSerializer则不需要指定 # goods是一个外键,可以通过这方法获取goods object中所有的值 goods = serializers.PrimaryKeyRelatedField(required=True, queryset=Goods.objects.all()) # 继承的Serializer没有save功能,必须写一个create方法 def create(self, validated_data): # validated_data是已经处理过的数据 # 获取当前用户 # view中:self.request.user;serizlizer中:self.context["request"].user user = self.context["request"].user nums = validated_data["nums"] goods = validated_data["goods"] existed = ShoppingCart.objects.filter(user=user, goods=goods) # 如果购物车中有记录,数量+1 # 如果购物车车没有记录,就创建 if existed: existed = existed[0] existed.nums += nums existed.save() else: # 添加到购物车 existed = ShoppingCart.objects.create(**validated_data) return existed def update(self, instance, validated_data): # 修改商品数量 instance.nums = validated_data["nums"] instance.save() return instance class ShopCartDetailSerializer(serializers.ModelSerializer): ‘‘‘ 购物车商品详情信息 ‘‘‘ # 一个购物车对应一个商品 goods = GoodsSerializer(many=False, read_only=True) class Meta: model = ShoppingCart fields = ("goods", "nums")
# 配置购物车的url router.register(r‘shopcarts‘, ShoppingCartViewset, basename="shopcarts")
原文:https://www.cnblogs.com/JangNara/p/12991134.html