zoukankan      html  css  js  c++  java
  • DRF 视图初识

    from django.shortcuts import render
    from rest_framework.generics import ListAPIView,CreateAPIView,UpdateAPIView,RetrieveAPIView,DestroyAPIView
    from rest_framework.filters import BaseFilterBackend
    from rest_framework import serializers
    from rest_framework.pagination import PageNumberPagination
    from newapi import models
    
    class ArticleSerializer(serializers.ModelSerializer):
        author_name = serializers.CharField(source="author.username",required=False)
        class Meta:
            model = models.Article
            exclude = ['author']
    
    class ArticleDetailSerializer(serializers.ModelSerializer):
        # 获取作者名称
        author_name = serializers.CharField(source="author.username")
        article_content = serializers.SerializerMethodField()
        article_comment = serializers.SerializerMethodField()
        class Meta:
            model = models.Article
    
            # 去除文章简介
            exclude = ['summary']
    
        # 获取文章内容
        def get_article_content(self,obj):
            result = obj.articledetail.content
            return result
    
        # 获取评论
        def get_article_comment(self,obj):
            result = obj.comment_set.all().values('id','content','user__username')
            return result
    
    class ArticleFilter(BaseFilterBackend):
        """
        查询:根据URL中的cagetory参数查询
        """
        def filter_queryset(self, request, queryset, view):
            val = request.query_params.get('cagetory')
            if val:
                return queryset.filter(category = val)
            return queryset
    
    
    class ArticleView(ListAPIView,CreateAPIView):
        # queryset对象
        queryset = models.Article.objects.all()
        # 序列化
        serializer_class = ArticleSerializer
        # 筛选规则
        filter_backends = [ArticleFilter,]
        # 分页
        pagination_class = PageNumberPagination
    
        def perform_create(self,serializer):
            serializer.save(author_id=2)
    
    
    class ArticleDetailView(UpdateAPIView,RetrieveAPIView,DestroyAPIView):
        queryset = models.Article.objects.all()
        serializer_class = ArticleDetailSerializer
        filter_backends = [ArticleFilter, ]
        pagination_class = PageNumberPagination
    
    
    class PostCommentSerializer(serializers.ModelSerializer):
        author_name = serializers.CharField(source="user.username",required=False)
        class Meta:
            model = models.Comment
            exclude = ['user']
    
    class CommentFilter(BaseFilterBackend):
    
        def filter_queryset(self, request, queryset, view):
            val = request.query_params.get('cagetory')
            if val:
                return queryset.filter(category = val)
            return queryset
    
    class CommentView(CreateAPIView,ListAPIView):
        queryset = models.Comment.objects.all()
        serializer_class = PostCommentSerializer
        filter_backends = [CommentFilter, ]
        pagination_class = PageNumberPagination
    
        def perform_create(self,serializer):
            serializer.save(user_id=2)
    
    ### 重写perform_create方法时,如果save自定义的字段数据,需要在检查数据时用exclude排除掉相应字段
    
    
    
  • 相关阅读:
    iOS 开发之粒子效果
    ios 中使用SBJson拼接和解析json
    iphone document 图片存储和读取
    ios项目绕过证书访问https程序
    我应该直接学Swift还是Objective-C?
    iOS中使用 Reachability 检测网络
    iOS App性能优化
    iOS中的堆(heap)和栈(stack)的理解
    iOS中引用计数内存管理机制分析
    iOS多线程编程Part 3/3
  • 原文地址:https://www.cnblogs.com/os-linux/p/11815388.html
Copyright © 2011-2022 走看看