6.动态设置serializer和permission、个人中心修改(用户信息、收藏、留言、收货)
1.drf的api文档自动生成和功能详解
1 # urls.py 2 ... 3 urlpatterns = [ 4 ... 5 url(r'docs/', include_docs_urls(title='接口说明')), 6 ] 7 ... 8 9 # 访问报错“UnicodeDecodeError at /docs/”,解决如下: 10 # settings.py 11 reload(sys) 12 sys.setdefaultencoding('utf8')
具体使用参考:http://www.django-rest-framework.org/topics/documenting-your-api/
2.动态设置serializer和permission获取用户信息
1 # users/serializers.py 2 ... 3 class UserDetailSerializer(serializers.ModelSerializer): 4 class Meta: 5 model = User 6 fields = ('id', 'name', 'mobile', 'birthday', 'gender') 7 ... 8 9 # users/views.py 10 # 动态设置serializer 与 permission 11 ... 12 # CreateModelMixin:创建数据;UpdateModelMixin:更新数据;RetrieveModelMixin:获取某条数据 13 class UserViewset(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, viewsets.GenericViewSet): 14 # serializer_class = UserRegSerializer 15 queryset = User.objects.all() 16 17 # 动态定义serializer_class 18 def get_serializer_class(self): 19 if self.action == 'create': 20 return UserRegSerializer 21 return UserDetailSerializer 22 23 # 动态定义权限 24 def get_permissions(self): 25 if self.action == 'retrieve': 26 return [IsAuthenticated(),] 27 return [] 28 29 # 自定义返回的信息 30 def get_object(self): 31 return self.request.user
3.用户收藏功能
1 # user_operation/serializers.py 2 ... 3 from goods.serializers import GoodsSerializer 4 from .models import UserFav 5 6 class UserFavDetailSerializer(serializers.ModelSerializer): 7 goods = GoodsSerializer() 8 class Meta: 9 model = UserFav 10 fields = ['goods', 'id'] 11 ... 12 13 # 动态设置serializers 14 # user_operation/views.py 15 ... 16 from .serializers import UserFavSerializer, UserFavDetailSerializer 17 18 class UserFavViewset(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet): 19 ... 20 # serializer_class = UserFavSerializer 21 ... 22 def get_serializer_class(self): 23 if self.action == "list": 24 return UserFavDetailSerializer 25 elif self.action == 'create': 26 return UserFavSerializer 27 return UserFavSerializer
4.用户留言功能
1 # user_operation/serializers.py 2 ... 3 from .models import UserFav, UserLeavingMessage, UserAddress 4 5 class LeavingMessageSerializer(serializers.ModelSerializer): 6 # 设置为当前用户 7 user = serializers.HiddenField( 8 default=serializers.CurrentUserDefault() 9 ) 10 # 格式化输出 11 add_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M') 12 class Meta: 13 model = UserLeavingMessage 14 fields = ['id', 'user', 'message_type', 'subject', 'message', 'file', 'add_time'] 15 ... 16 17 # user_operation/views.py 18 ... 19 from .serializers import UserFavSerializer, UserFavDetailSerializer, LeavingMessageSerializer, AddressSerializer 20 ... 21 class LeavingMessageViewset(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet): 22 ''' 23 用户留言管理 24 list: 25 获取用户留言 26 create: 27 创建用户留言 28 update: 29 删除用户留言 30 delete 31 ''' 32 serializer_class = LeavingMessageSerializer 33 permission_classes = (IsAuthenticated, IsOwnerOrReadOnly) 34 authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication,) 35 36 # 只获取当前用户的数据 37 def get_queryset(self): 38 return UserLeavingMessage.objects.filter(user=self.request.user) 39 ... 40 41 # urls.py 42 # 配置用户留言 43 router.register(r'messages', LeavingMessageViewset, base_name='messages')
5.用户收货地址功能
1 # user_operation/serializers.py 2 ... 3 from .models import UserFav, UserLeavingMessage, UserAddress 4 5 class AddressSerializer(serializers.ModelSerializer): 6 # 设置为当前用户 7 user = serializers.HiddenField( 8 default=serializers.CurrentUserDefault() 9 ) 10 class Meta: 11 model = UserAddress 12 fields = ['id', 'user', 'province', 'city', 'district', 'address', 'signer_name', 'signer_mobile', 'add_time'] 13 ... 14 15 # user_operation/views.py 16 ... 17 from .serializers import UserFavSerializer, UserFavDetailSerializer, LeavingMessageSerializer, AddressSerializer 18 19 class AddressViewset(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.DestroyModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet): 20 ''' 21 收货地址管理 22 list: 23 获取收货地址 24 create: 25 创建收货地址 26 update: 27 更新收货地址 28 partial_update: 29 更新收货地址 30 delete: 31 删除收货地址 32 ''' 33 serializer_class = AddressSerializer 34 permission_classes = (IsAuthenticated, IsOwnerOrReadOnly) 35 authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication,) 36 37 # 只获取当前用户的数据 38 def get_queryset(self): 39 return UserAddress.objects.filter(user=self.request.user) 40 ... 41 42 # urls.py 43 # 配置用户收货地址 44 router.register(r'address', AddressViewset, base_name='address')
                    
                
                
            
        
浙公网安备 33010602011771号