ModelViewSet 笔记
2019-03-18 本文已影响0人
tingshuo123
ModelViewSet 源码
class ModelViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):
"""
A viewset that provides default `create()`, `retrieve()`, `update()`,
`partial_update()`, `destroy()` and `list()` actions.
"""
pass
使用
from rest_framework import serializers
from rest_framework.request import Request
from rest_framework.viewsets import ModelViewSet
from apps.user.models import User
from libs.api_tools.api_response import success_response
from libs.api_tools.pagination import StandardResultsSetPagination
from libs.swagger.swagger_param import swagger_doc
class CreateUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
exclude = ('flag', 'password')
class UserViewSet(ModelViewSet):
fields = (
swagger_doc(name="Authorization", description='用户token', location='header', required=False),
)
# 认证
# authentication_classes = [Authentication, ]
# queryset 和 serializer_class 必须指定
queryset = User.objects.all()
serializer_class = CreateUserSerializer
pagination_class = StandardResultsSetPagination
def retrieve(self, request, pk=None):
""" 用户详情 """
# 获取实例
user = self.get_object()
# 序列化
serializer = self.get_serializer(user)
return success_response(serializer.data)
def create(self, request, *args, **kwargs):
""" 创建用户 """
serializer = self.get_serializer(data=request.data)
# save 前必须先调用 is_valid()
serializer.is_valid(raise_exception=True)
serializer.save()
return success_response(serializer.data)
def update(self, request: Request, *args, **kwargs):
""" 更新用户信息 """
def destroy(self, request: Request, *args, **kwargs):
""" 删除用户 """
return success_response()
def list(self, request: Request, *args, **kwargs):
""" 获取用户列表 """
return success_response()
url 配置
from django.conf.urls import url, include
# 定义路由
from rest_framework.routers import SimpleRouter
from apps.user import user_views
router = SimpleRouter()
router.register(r'test-user', user_views.UserViewSet, base_name='user')
urlpatterns = [
url('^', include(router.urls)),
]
swagger 效果
结果