1. # 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发
  2. # 公司里主流
  3. -后端,使用worldmd写,提到git
  4. -公司有接口平台,后端开发在接口平台录入(yapi,第三方),可以批量导入
  5. -后端项目自动生成接口文档(不是特别美观或友好,有时候还需要配合上面两种)
  6. -djangodrf自动生成 coerapiswaggerjavagopython
  1. 接口文档 coreapiswagger
  2. 安装依赖:REST framewrok生成接口文档需要coreapi库的支持。
  3. pip3 install coreapi
  4. 使用步骤:
  5. 1 urls.py 路由中
  6. from rest_framework.documentation import include_docs_urls
  7. urlpatterns = [
  8. path('doc/', include_docs_urls(title='图书管理项目接口文档')),
  9. ]
  10. 2 settings.py 配置文件中
  11. REST_FRAMEWORK = {
  12. 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
  13. }
  14. 3 view.py 视图类中对应的方法上加注释即可
  15. 4 如果是ModelViewSet
  16. from app01 import models
  17. from app01 import serializer
  18. from rest_framework.viewsets import ModelViewSet
  19. from rest_framework.filters import OrderingFilter
  20. class BookView(ModelViewSet):
  21. """
  22. list:
  23. 返回图书列表数据,通过Ordering字段排序
  24. retrieve:
  25. 返回图书详情数据
  26. latest:
  27. 返回最新的图书数据
  28. read:
  29. 查询单个图书接口
  30. """
  31. queryset = models.Book.objects.all()
  32. serializer_class = serializer.BookModelSerializer
  33. # 排序
  34. filter_backends = [OrderingFilter,]
  35. ordering_fields = ['price','name']
  36. 5 字段描述,写在models.pyhelp_text
  37. from django.db import models
  38. class Book(models.Model):
  39. name = models.CharField(max_length=34,help_text='名字字段,字符串')
  40. price = models.IntegerField(help_text='价格字段,整型')
  41. 6 浏览的地址(浏览器中)
  42. http://127.0.0.1:8000/doc/
  43. # 如果继承的是其它视图类,直接在对应的def函数下面写注释即可,例:
  44. class BookView(APIView):
  45. def get(self, request):
  46. """
  47. 所有图书信息
  48. :param request:
  49. :return:
  50. """
  51. res = models.Book.objects.all()
  52. ser = serializer.BookModelSerializer(instance=res, many=True)
  53. return Response(ser.data)

img

  1. 1 三种分页方式
  2. -基本分页:PageNumberPagination
  3. page_size = 2 # 每页显示两条
  4. page_query_param = 'page' #查询第几页的参数 ?page=3
  5. max_page_size = 4 #每页最大显示多少条
  6. page_size_query_param = 'size' #每页显示的条数查询条件(默认是page_size显示的条数) # ?page=3&size=3
  7. -偏移分页:LimitOffsetPagination
  8. default_limit=2 #默认显示几条
  9. limit_query_param='limit' # ?limit=3 表示取3条
  10. offset_query_param = 'offset' #偏移 ?offset=5&limit=3 #从第5个位置开始,取3条数据
  11. max_limit = 5 #最多显示5条
  12. -游标分页:CursorPagination
  13. cursor_query_param = 'cursor' # 查询的key值
  14. page_size = 2 # # 每页显示两条
  15. ordering = 'id' # 按id字段排序
  16. 2 如何使用
  17. - APP下创建一个自定义py文件,egpage.py
  18. - 在文件中写一个自定义分页类,继承三个之一,并重写类属性
  19. - 在视图类中配置
  20. class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
  21. queryset = models.Book.objects.all()
  22. serializer_class = serializer.BookModelSerializer
  23. # 配置使用的分页类
  24. pagination_class = CustomNumberPagination
  25. - 局部使用
  26. pagination_class = CustomNumberPagination
  27. - 全局使用,在配置文件中(以后所有视图的查询所有方法都用这个分页)
  28. REST_FRAMEWORK = {
  29. 'DEFAULT_PAGINATION_CLASS':'app01.page.CustomNumberPagination'
  30. }
  1. 创建一个py文件 # 任意名字 例如:page.py
  2. 1、在page.py 中自定义一个类,继承PageNumberPagination,并重写类属性
  3. from rest_framework.pagination import PageNumberPagination # 导入模块
  4. class CustomNumberPagination(PageNumberPagination): # 定义类名继承父类 重写属性
  5. page_size = 2 # 每页显示两条
  6. page_query_param = 'page' #查询第几页的参数 ?page=3
  7. max_page_size = 4 # 每页最大显示多少条
  8. page_size_query_param = 'size' #每页显示的条数查询条件(默认是page_size显示的条数) # ?page=2&size=3
  9. 2、在views.py 视图类中配置
  10. from rest_framework.generics import ListAPIView, CreateAPIView
  11. from rest_framework.viewsets import ViewSetMixin
  12. from app01.page import CustomNumberPagination # 导入自定义分页类
  13. class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
  14. queryset = models.Book.objects.all()
  15. serializer_class = serializer.BookModelSerializer
  16. # 配置使用的分页类
  17. pagination_class = CustomNumberPagination # 自己定义的类名
  18. 4、请求方式:(postman中测试)
  19. http://127.0.0.1:8000/books/?page=3 # 查第3页
  20. http://127.0.0.1:8000/books/?page=2&size=3 # 第2页显示3条
  21. 3、局部使用(视图类中)
  22. pagination_class = CustomNumberPagination
  23. 4、全局使用,在settings.py 配置文件中(以后所有视图的查询所有方法都用这个分页)
  24. REST_FRAMEWORK = {
  25. 'DEFAULT_PAGINATION_CLASS':'app01.page.CustomNumberPagination'
  26. }

img

  1. 1、在page.py 中自定义一个分页类,继承LimitOffsetPagination,并重写类属性
  2. from rest_framework.pagination import LimitOffsetPagination # 导入模块
  3. class CustomLimitOffsetPagtion(LimitOffsetPagination):
  4. default_limit=2 # 默认显示几条
  5. limit_query_param='limit' # ?limit=3 表示取3条
  6. offset_query_param = 'offset' #偏移 ?offset=5&limit=3 从第5个位置开始,取3条数据
  7. max_limit = 5 #最多显示5条
  8. # 手动写显示10条 也是显示5条 因为这已经写死了
  9. 2、在views.py 视图类中配置
  10. from rest_framework.generics import ListAPIView, CreateAPIView
  11. from rest_framework.viewsets import ViewSetMixin
  12. from app01.page import CustomLimitOffsetPagtion # 导入自定义偏移分页类
  13. class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
  14. queryset = models.Book.objects.all()
  15. serializer_class = serializer.BookModelSerializer
  16. # 配置使用的分页类
  17. pagination_class = CustomLimitOffsetPagtion
  18. 4、请求方式:(postman中测试)
  19. http://127.0.0.1:8000/books/ # 默认从0开始取2条
  20. http://127.0.0.1:8000/books/?limit=3&offset=2 # 取3条,从第2条开始
  21. 3、局部使用(视图类中)
  22. pagination_class = CustomLimitOffsetPagtion
  23. 4、全局使用,在settings.py 配置文件中(以后所有视图的查询所有方法都用这个分页)
  24. REST_FRAMEWORK = {
  25. 'DEFAULT_PAGINATION_CLASS':'app01.page.CustomLimitOffsetPagtion'
  26. }

img

  1. 1、在page.py 中自定义一个分页类,继承CursorPagination,并重写类属性
  2. ## 优点:速度最快,数据量越大,越有优势
  3. ## 缺点:只能前一页和后一页,不能直接跳到某一页
  4. from rest_framework.pagination import CursorPagination
  5. class CustomCursorPagination(CursorPagination): # 查询速度最快
  6. cursor_query_param = 'cursor' # 查询的key值
  7. page_size = 2 # 每页显示两条
  8. ordering = 'id' # 按id字段排序 必须写不然报错
  9. # 下面两个基本不用可配可不配
  10. page_size_query_param = 'size' # 通过这个参数决定每页显示多少条
  11. max_page_size = 5 # 每页最大显示多少条
  12. 2、在views.py 视图类中配置
  13. from rest_framework.generics import ListAPIView, CreateAPIView
  14. from rest_framework.viewsets import ViewSetMixin
  15. from app01.page import CustomCursorPagination # 导入自定义游标分页类
  16. class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
  17. queryset = models.Book.objects.all()
  18. serializer_class = serializer.BookModelSerializer
  19. # 配置使用的分页类
  20. pagination_class = CustomCursorPagination
  21. 4、请求方式:(postman中测试)
  22. http://127.0.0.1:8000/books/?cursor=cD0y # 按照cursor给的key值查找下一页
  23. http://127.0.0.1:8000/books/?cursor=cj0xJnA9Mw%3D%3D # 按照cursor给的key值查找上一页
  24. 3、局部使用(视图类中)
  25. pagination_class = CustomCursorPagination
  26. 4、全局使用,在settings.py 配置文件中(以后所有视图的查询所有方法都用这个分页)
  27. REST_FRAMEWORK = {
  28. 'DEFAULT_PAGINATION_CLASS':'app01.page.CustomCursorPagination'
  29. }
  1. class BookViewALL(APIView): # 继承APIView 需要自己写路由
  2. def get(self,request,*args,**kwargs):
  3. book_list=Books.objects.all()
  4. #实例化得到一个对象
  5. pagination=CommonPageNumberPagination() # 只需要换此处的类就可以实现三种分页的效果
  6. # 修改对象属性,我们不需要改
  7. # pagination.page_query_param='page'
  8. #调用对象方法,传入要分页的数据,book_list,返回分页号的数据
  9. book_list2=pagination.paginate_queryset(book_list,request,self)
  10. ser=BookSerializer(instance=book_list2,many=True) # 序列化器
  11. # 自己写返回格式
  12. res={'pre':pagination.get_previous_link(),'next':pagination.get_next_link(),'count':pagination.page.paginator.count,'data':ser.data}
  13. return Response(res)
  14. # 另一种返回方式 调用父类中的方法返回
  15. return pagination.get_paginated_response(ser.data)

img

版权声明:本文为liupengfei1123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/liupengfei1123/p/14983698.html