• django rest framework


    1 设置版本信息

    from rest_framework.versioning import URLPathVersioning

    1.1 settings.py 

    全局设置版本信息

    #全局设置版本信息
    REST_FRAMEWORK={
        'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
        'VERSION_PARAM':'version',
        'DEFAULT_VERSION':'v1',
        'ALLOWED_VERSIONS':['v1','v2'],
        'PAGE_SIZE':1,
    }

    1.2 day97luffcity/urls.py

    在url中体现版本信息

    from django.contrib import admin
    from django.urls import path,include,re_path
    from api import urls
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('api/<str:version>/',include('api.urls')),
    ]

    1.3 views/course.py 

    在视图中查看版本信息

    
    
    from rest_framework.views import APIView
    from rest_framework.versioning import URLPathVersioning
    class CoursesView(APIView):
    
        #设置版本信息
        #versioning_class = URLPathVersioning
    
        def get(self,request,*args,**kwargs):
            res=BaseResponse()
            #查看版本信息
            #print(request.version)

     2 分页处理

    from rest_framework.pagination import PageNumberPagination

    2.1 settings.py

    在全局设置中设置分页的信息

    #全局设置版本信息
    REST_FRAMEWORK={
        'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
        'VERSION_PARAM':'version',
        'DEFAULT_VERSION':'v1',
        'ALLOWED_VERSIONS':['v1','v2'],
        'PAGE_SIZE':1,
    }

    2.2 view/course.py 

    在视图中查看版本信息

    from django.shortcuts import HttpResponse
    from rest_framework.views import APIView
    from rest_framework.versioning import URLPathVersioning
    from rest_framework.response import Response
    from rest_framework.pagination import PageNumberPagination
    from api.serializers.course import CourseSerializer
    from api.serializers.course import CourseModelSerializer
    from api import models
    from api.utils.response import BaseResponse
    
    
    class CoursesView(APIView):
    
        #设置版本信息
        #versioning_class = URLPathVersioning
    
        def get(self,request,*args,**kwargs):
            res=BaseResponse()
            #查看版本信息
            #print(request.version)
            try:
                #方式一
                course_set=models.Course.objects.all()
                # 分页的处理
                page = PageNumberPagination()
                ser_page = page.paginate_queryset(course_set, request, self)
                #ser=CourseSerializer(instance=ser_page,many=True)
                ser = CourseModelSerializer(instance=ser_page,many=True)
                res.code=1000
                res.data=ser.data
            except Exception as e:
                res.code=500
                res.error='获取数据失败'
    
            return Response(res.dict)

    3  序列化的使用

    设置序列化为  

    from rest_framework import serializers

    3.1 在app中创建 serializers 的python包

    serializers/course.py  设置 model中数据的 一对多,一对一,普通字段,还有选择字段的 取值序列化的展示方式

    from rest_framework import serializers
    from api import models
    class CourseSerializer(serializers.Serializer):
        id=serializers.IntegerField()
        name=serializers.CharField()
    
    class CourseModelSerializer(serializers.ModelSerializer):
        #(level_choices = ((0, '初级'), (1, '中级'), (2, '高级'))  这种实现方式
        level_name=serializers.CharField(source='get_level_display')
        #一对一,一对多的实现方式
        hours=serializers.CharField(source='coursedetail.hours')
        #多对多的实现方式
        recommend_courses=serializers.SerializerMethodField()
    
        #serializers.ModelSerializer 的实现方式
        class Meta:
            model=models.Course
            fields=['id','name','level_name','hours','recommend_courses']
    
        #多对多
        def get_recommend_courses(self,row):
            recommend_list=row.coursedetail.recommend_courses.all()
            return [{'id':item.id,'name':item.name} for item in recommend_list]

    3.2 views/course.py

    在视图中取的数据后交给序列化的对象去处理

    from django.shortcuts import HttpResponse
    from rest_framework.views import APIView
    from rest_framework.versioning import URLPathVersioning
    from rest_framework.response import Response
    from rest_framework.pagination import PageNumberPagination
    from api.serializers.course import CourseSerializer
    from api.serializers.course import CourseModelSerializer
    from api import models
    from api.utils.response import BaseResponse
    
    
    class CoursesView(APIView):
    
        #设置版本信息
        #versioning_class = URLPathVersioning
    
        def get(self,request,*args,**kwargs):
            res=BaseResponse()
            #查看版本信息
            #print(request.version)
            try:
                #方式一
                course_set=models.Course.objects.all()
                # 分页的处理
                page = PageNumberPagination()
                ser_page = page.paginate_queryset(course_set, request, self)
                #ser=CourseSerializer(instance=ser_page,many=True)
                ser = CourseModelSerializer(instance=ser_page,many=True)
                res.code=1000
                res.data=ser.data
            except Exception as e:
                res.code=500
                res.error='获取数据失败'
    
            return Response(res.dict)
    
    class CourseDetailView(APIView):
    
        def get(self,request,pk,*args,**kwargs):
            course_set = models.Course.objects.filter(pk=pk).first()
            # course_set_2=models.Course.objects.get(pk=pk)
            # print(type(course_set),type(course_set_2))
            ser=CourseModelSerializer(instance=course_set)
            return Response(ser.data)



  • 相关阅读:
    寻找我的黑客偶像
    20201215 《信息安全专业导论》第三周学习总结
    罗马数字
    base编码
    20201215 王馨瑶 第2周学习总结
    罗马数字转阿拉伯数字
    2020-2021-1 20201226 《信息安全专业导论》第三周学习总结
    IEEE754 浮点数
    Base64
    2020-2021-1 20201226 《信息安全专业导论》第2周学习总结
  • 原文地址:https://www.cnblogs.com/hexintong/p/10210502.html
Copyright © 2020-2023  润新知