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)