zoukankan      html  css  js  c++  java
  • Django API接口FK ManyTo Many 模板

    Url

    from django.contrib import admin
    from django.urls import path, re_path
    from django.urls import include
    
    urlpatterns = [
        re_path(r'^admin/', admin.site.urls),
        re_path('^api/(?P<version>[v1|v2]w+)/', include('app01.urls')),
    ]
    from django.urls import path, re_path
    from django.urls import include
    from app01.views import account, coursehost, newspapers
    
    urlpatterns = [
        re_path('login/$', account.LoginView.as_view()),
    
        re_path('course/$', coursehost.CourseView.as_view({"get": "list"})),
        re_path('course/(?P<pk>d+)/$', coursehost.CourseView.as_view({"get": "retrieve"})),
        re_path(r'coursecategory/$', coursehost.CourseCategoryView.as_view({'get': 'list'})),
    
    ]

    序列化

    """
    * coding: utf-8
    
    CreateTime:2019/12/18
    Version: v1
    DocName: account.py
    Edit: Riven
    
    Effect: Course serializers
    
    SourceStorageLocation: RivenShop / app01 / views / coursehost.py
    Modify and add function record:
            ModifyTime:
                1.
                2.
            Add function Time :
                1.
                2.
    
    """
    
    from app01 import models
    from rest_framework import serializers
    
    
    # Course
    class CourseSerializer(serializers.ModelSerializer):
        # (0, '初级'), (1, '中级'), (2, '高级') Can get value
        course_type = serializers.CharField(source='get_course_type_display')
        status = serializers.CharField(source='get_status_display')
        level = serializers.CharField(source='get_level_display')
    
        class Meta:
            model = models.Course
            fields = ['id', 'name', 'course_type', 'level', 'sub_category', 'degree_course', 'course_img', 'status',
                      'brief', 'pub_date', 'period', 'attachment_path']
    
    
    # CourseCategory
    class CourseCategorySerializer(serializers.ModelSerializer):
        class Meta:
            model = models.CourseCategory
            fields = '__all__'
    
    
    class CourseDetailSerializer(serializers.ModelSerializer):
        # one2one/fk/choice  Fk inquire
        name = serializers.CharField(source='course.name')
        img = serializers.CharField(source='course.course_img')
        level = serializers.CharField(source='course.get_level_display')
    
        # m2m
        recommend_courses = serializers.SerializerMethodField()
        teachers = serializers.SerializerMethodField()
    
        # FK reverse
        coursechapter = serializers.SerializerMethodField()
    
        class Meta:
            model = models.CourseDetail
            fields = ['id', 'hours', 'course_slogan', 'video_brief_link', 'why_study', 'what_to_study_brief',
                      'career_improvement', 'prerequisite', 'name', 'level', 'img', 'recommend_courses', 'teachers',
                      'coursechapter']
    
        def get_recommend_courses(self, obj):
            """acquire recommend course"""
            queryset = obj.recommend_courses.all()
            return [{'id': row.id, 'name': row.name} for row in queryset]
    
        def get_teachers(self, obj):
            """acquire teachers all"""
            obj = obj.teachers.all()
            return [{'id': row.id, 'name': row.name} for row in obj]
    
        def get_coursechapter(self, obj):
            """acquire chapter all base on reverse"""
            obj = obj.course.coursechapters.all()
    
            return [{'id': row.id} for row in obj]

    视图

    """
    * coding: utf-8
    
    CreateTime:2019/12/17
    Version: v1
    DocName: account.py
    Edit: Riven
    
    Effect: Supply data for Course
    
    SourceStorageLocation: RivenShop / app01 / views / Coursehost
    Modify and add function record:
            ModifyTime:
                1.
                2.
            Add function Time :
                1.
                2.
    
    """
    
    from app01 import models
    from serializers.course import CourseCategorySerializer, CourseDetailSerializer, CourseSerializer
    
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework.viewsets import ViewSetMixin
    
    
    class CourseCategoryView(ViewSetMixin, APIView):
        """
            Course main class
    
        """
    
        def list(self, request, *args, **kwargs):
    
            ret = {"code": 1000, "data": None}
            try:
                queryset = models.CourseCategory.objects.all()
                ser = CourseCategorySerializer(instance=queryset, many=True)
                ret['data'] = ser.data
            except Exception as e:
                ret['code'] = 1001
                ret['error'] = '获取课程失败'
    
            return Response(ret)
    
    
    class CourseView(ViewSetMixin, APIView):
    
        def list(self, request, *args, **kwargs):
            """
             Course list Api
    
            """
    
            ret = {'code': 1000, 'data': None}
            try:
                queryset = models.Course.objects.all()
                ser = CourseSerializer(instance=queryset, many=True)
                print(ser.data)
                ret['data'] = ser.data
    
            except Exception as e:
                ret['code'] = 1001
                ret['error'] = '获取课程失败'
    
            return Response(ret)
    
        def retrieve(self, request, *args, **kwargs):
            """
    
            CourseDetail api
    
            """
    
            ret = {'code': 1000, 'data': None}
    
            try:
                # Acquire course id
                pk = kwargs.get('pk')
                # CourseDetail object
                obj = models.CourseDetail.objects.filter(course_id=pk).first()
                ser = CourseDetailSerializer(instance=obj, many=False)
                ret['data'] = ser.data
    
            except Exception as e:
                ret['code'] = 1001
                ret['error'] = '获取课程详细失败'
    
            return Response(ret)
  • 相关阅读:
    【InfoPath2007】The form has been closed
    深入浅出Nintex——调用子流程
    深入浅出Nintex——使用查询XML动作
    深入浅出Nintex——使用Call WebService来查询Item ID
    深入浅出Nintex——获得某群组的用户集合
    深入浅出SharePoint2007——Webpart开发
    深入浅出Nintex——获得指定用户的角色
    深入浅出Nintex——使用构建动态字符串动作
    Lucene.net 实现全文搜索
    DotLucene源码浅读笔记(1)补遗:编写简单中文分词器ChineseAnalyzer
  • 原文地址:https://www.cnblogs.com/Rivend/p/12060480.html
Copyright © 2011-2022 走看看