zoukankan      html  css  js  c++  java
  • django-rest-framework框架 第二篇 之Mixin扩展类

    Mixin扩展类     ['列表操作','过滤','搜索','排序']

    <一>:<1>创建项目:

    配置 urls 主路由 

      配置model文件(举个例子,就以book为模型)

     

    当完成这步时  进行数据的 ''迁移''   然后 '执行'  操作

     

    <2>在views中 导入通用视图类 (只要是用mixin就要导入通用视图类)
    导入通用视图类 (from rest_framework.generics import GenericAPIView)
    导入mixin (from rest_framework.mixins import ListModelMixin)
    定义一个类  类 中get函数  class BookListView(GenericAPIView,ListModelMixin):
                       def get(self,request):
                         return self.list(request)

    <3> 创建一个序列化文件
    导入 序列化 from rest_framework import serializers
    导入 模型文件
    定义 一个序列化的类
    class BookSerializer(serializers.ModelSerializer):
    class Meta: #修饰内部类
    model = Book
    fields = '__all__'             如下图所示

    <4>在views中 导入 序列化文件from .sers import *
    在views中的get函数上方 写
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    设置子路由 path('books/',BooklistView.as_view()), (books是变量不是固定)
    并在setting 中添加框架INSTALLED_APPS='rest_framework'

    配置子路由如图下

     

    完成过滤 搜索 排序 的操作
    <1>都是在后台过滤器中完成的
    1,这里要使用Django_filters模块 没有下载的去下载  pip install django_filters     可在Windows中cmd 添加即可

    2,使用Django_filters提供的后台过滤器类

    在views中 get函数上方 操作程序 注意在setting中添加框架
    INSTALLED_APPS 添加 'Django_filters'

    导入 from django_filters.rest_framework import DjangoFilterBackend
    filter_backends = [DjangoFilterBackend,SearchFilter,OrderingFilter]    #用来做过滤后台的 括号内可填写 过滤后台属性

    filter_fields = ['name'] #过滤 精确查找
    search_fields = ['name'] #搜索 模糊查找
    ordering_fields = ['price'] #排序
    数据库 添加数据 越多越好!!!!!
    在views中 过滤后台写 属性   如下图所示

    完成过滤
    导入 搜索(from rest_framework.filters import SearchFilter)
    再加个搜索在 过滤后台中      如下图所示
    search_fields = ['name']

    完成排序
    导入 OrderingFilter 放在搜索后边 即可

    在 过滤后台属性中 添加OrderingFilter


    完成 分页 功能
    导入分页(from rest_framework.pagination import PageNumberPagination)
    过滤后台属性下 写
    (1) pagination_class = PageNumberPagination #分页功能
    页码分页 (默认是100条数据 分页 可自定义 并继承 PageNumberPagination)    如下图所示


    (2)可以在 views中 重写属性 自定义一页显示的数据   如下:
    class BookPage(PageNumberPagination):
    # 重写属性

    ① page_size = 3 #一页几条数据
    重新写好代码后 将pagination_class = (重写的类名) 注:
    ② page_query_param = 'bw' #查找网页的参数名 默认page
    ③ page_size_query_param=2 #设置一页显示的数据 并自动将数据分好总页数
    ④ max_page_size = 2 # 一页 最大设置的数据个数            如下图所示

    简化代码 class BookListView(GenericAPIView,ListModelMixin):
    其中 括号内要显示两个参数 有方法合并两个参数 ListAPIView合并
    导入 from rest_framework.generics import ListAPIView
    将简化代码 替换
    将 类中的get函数 注释 完结   续更...

  • 相关阅读:
    python学习day3--python基础
    python学习day2--python基础
    python学习day1--python基础
    包导入原则
    模块搜索路径
    继承顺序
    继承,派生,组合
    面向对象程序设计
    类和对象
    递归
  • 原文地址:https://www.cnblogs.com/zhichao123/p/10555207.html
Copyright © 2011-2022 走看看