1. 程式人生 > 實用技巧 >1911A:課程主頁面三個介面開發

1911A:課程主頁面三個介面開發

0.課程主頁面介面對應頁面效果

1.課程類別介面開發

1.1 course/urls.py 新增路由

from django.urls import path, re_path
from rest_framework.routers import DefaultRouter # 匯入DRF得DefaultRouter

from . import views

router = DefaultRouter() # 有根路由
router.register(r'type', views.CourseTypeViewSet) # 寫路由

urlpatterns = [
     
]

urlpatterns 
+= router.urls # 把兩個路由列表相加

1.2 course/serializers.py 寫序列化器

from rest_framework import serializers
from course.models import CourseType

class CourseTypeSerializer(serializers.ModelSerializer):
    class Meta:
        model = CourseType
        fields = '__all__'

1.3 course/views.py 新增檢視函式

from rest_framework import
viewsets from rest_framework.pagination import PageNumberPagination from course.models import * from course.serializers import * class PageNum(PageNumberPagination): page_size_query_param = 'page_size' class CourseTypeViewSet(viewsets.ModelViewSet): queryset = CourseType.objects.all() serializer_class
= CourseTypeSerializer

1.4 course/admin.py 註冊後臺管理

from django.contrib import admin
from . import models

admin.site.register(models.CourseType)

1.5 測試介面

http://192.168.56.100:8888/course/type/

2.標籤介面開發

2.1 course/urls.py 新增路由

router.register(r'tag', views.CourseTagViewSet)

2.2 course/serializers.py 寫序列化器

from rest_framework import serializers
from course.models import CourseTag

class CourseTagSerializer(serializers.ModelSerializer):
    class Meta:
        model = CourseTag
        fields = '__all__'

2.3 course/views.py 新增檢視函式

from course.models import *
from course.serializers import *

class CourseTagViewSet(viewsets.ModelViewSet):
    queryset = CourseTag.objects.all()
    serializer_class = CourseTagSerializer

2.4 course/admin.py 註冊後臺管理

from django.contrib import admin
from . import models

admin.site.register(models.CourseTag)

2.5 測試介面

http://192.168.56.100:8888/course/tag/

3.課程介面開發

3.1 course/urls.py 新增路由

router.register(r'course', views.CourseViewSet)

3.2 course/serializers.py 寫序列化器

# -*- coding: utf-8 -*-
from rest_framework import serializers
from course.models import *

class CourseSerializer(serializers.ModelSerializer):
    class Meta:
        model = Course
        fields = '__all__' # 所有欄位

class SectionsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sections
        fields = '__all__'

class ChaptersSerializer(serializers.ModelSerializer):
    sections = SectionsSerializer(many=True)
    class Meta:
        model = Chapters
        fields = '__all__'

class CourseDeepSerializer(CourseSerializer):
    # 欄位名名, 必須是模型可以 . 引用到的變數
    # Course(). "chapters" 才能作為欄位名, 如果是集合, 需要加many=True,
    chapters = ChaptersSerializer(many=True)

3.3 course/views.py 新增檢視函式

from django.shortcuts import render
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import viewsets
from rest_framework.filters import OrderingFilter
from rest_framework.pagination import PageNumberPagination

from course.models import *
from course.serializers import *

class CourseViewSet(viewsets.ModelViewSet):
    queryset = Course.objects.all()
    serializer_class = CourseDeepSerializer
    
    # 指定過濾方法類, 排序方法類, 一個或多個
    filter_backends = (DjangoFilterBackend, OrderingFilter) # 同時支援過濾和排序

    # 指定排序欄位, 不設定, 排序功能不起效
    ordering_fields = ('attention', 'learner', 'create_time')
    
    # 指定過濾欄位, 不設定, 過濾功能不起效
    filter_fields = ('title', 'desc', 'status', 'course_type', 'course_tag')

    # 自定義分頁器 覆蓋全域性配置
    pagination_class = PageNum

    def get_serializer_class(self):
        if self.action == 'list':
            return CourseSerializer
        else:
            return CourseDeepSerializer

3.4 course/admin.py 註冊後臺管理

from django.contrib import admin
from . import models

admin.site.register(models.Course)

3.5 測試介面

http://192.168.56.100:8888/course/course/