zoukankan      html  css  js  c++  java
  • restframework CBV试图的4种方式

    day100



    上节回顾

    1 APIView流程

    2 序列化组件(restframework)

    1 # 自定义序列化组件
    class BookSerializers(serializers.Serializer):
    title=serializers.CharField()
    price=serializers.CharField()
    publishDate=serializers.DateField()

    # 针对一对多
    publish=serializers.CharField(source="publish.name")
    publish_email=serializers.CharField(source="publish.email")
    # 针对多对多
    authors=serializers.SerializerMethodField()
    def get_authors(self,obj):
    data=[]
    for i in obj.authors.all():
    temp=[]
    temp.append(i.pk)
    temp.append(i.name)
    data.append(temp)
    return data
    # ModelSerializer序列化组件
    class BookSerializers(serializers.ModelSerializer):
    class Meta:
    model=Book
    fields="__all__"

    publish = serializers.CharField(source="publish.name")
    authors=serializers.SerializerMethodField()
    def get_authors(self,obj):
    data=[]
    for i in obj.authors.all():
    temp=[]
    temp.append(i.pk)
    temp.append(i.name)
    data.append(temp)
    return data


    2 5个接口

    "books" GET:获取所有数据
    POST:添加一条数据

    "book/1" GET:获取单条数据
    DELETE:删除一条数据
    PUT/PATCH:更新一条数据


    3
    (1) 功能之序列化:
    book_list = Book.objects.all()
    ps = BookSerializers(book_list, many=True)
    ps.data

    book_obj=Book.objects.filter(pk=pk).first()
    bs=BookSerializers(book_obj,many=False)

    (2) 校验字段与操作记录(ModelSerializer拥有)
    # 添加数据
    bs=BookSerializers(data=request.data)
    if bs.is_valid(): #校验字段接口
    bs.save() # 生成记录接口
    return Response(bs.data) # 序列化接口


    # 更新数据
    bs=BookSerializers(data=request.data,instance=book_obj)
    if bs.is_valid(): #校验字段接口
    bs.save() #更新记录接口
    return Response(bs.data) # 序列化接口


    3 视图

    (1)

    class AuthorView(APIView):
    def get():
    pass
    def post():
    pass

    class AuthorDetailView(APIView):
    def get():
    pass
    def delete():
    pass
    def put():
    pass

    (2) class AuthorView(CreateModelMixin,ListModelMixin,generics.GenericAPIView,):

    queryset=Author.objects.all
    serializer_class=AuthorSerializers

    def get(self,request):
    return self.list(request)
    def post(self,request):

    return self.create(request)

    class AuthorDetailView(DestroyModelMixin,UpdateModelMixin,RetrieveModelMixin,generics.GenericAPIView,):
    queryset = Author.objects.all
    serializer_class = AuthorSerializers

    def get(self,request, *args, **kwargs):
    return self.retrieve(request, *args, **kwargs)

    def put(self,request, *args, **kwargs):
    return self.update(request, *args, **kwargs)

    def delete(self,request, *args, **kwargs):
    return self.destroy(request, *args, **kwargs)
    (3) class AuthorView(generics.ListCreateAPIView):

    queryset=Author.objects.all
    serializer_class=AuthorSerializers

    class AuthorDetailView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Author.objects.all
    serializer_class = AuthorSerializers


    (4) class AuthorModelView(ModelViewSet):

    queryset=Author.objects.all()
    serializer_class=AuthorSerializers

    ViewSetMixIn


        第4种的url要传参数,注意 如:

          url(r'^publishs/$',views.PublishView.as_view({"get":"list","post":"create"})),
      
    url(r'^publishs/(?P<pk>d+)/$',views.PublishView.as_view({"put":"update","get":"retrieve","delete":"destroy"}))


    4 解析器
    class APIView:
    parser_classes = api_settings.DEFAULT_PARSER_CLASSES


  • 相关阅读:
    OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
  • 原文地址:https://www.cnblogs.com/zhaoweihang/p/9407876.html
Copyright © 2011-2022 走看看