$Django importlib与dir知识,手写配置文件, 配置查找顺序 drf分页器&drf版本控制

1  importlib与dir知识

# importlib简介动态导入字符串模块
# 常规导入
from ss.aa import b
from ss import a
print(b,type(b))
#<module 'ss.aa.b' from 'F:\\python37\\pythonfiles\\ss\\aa\\b.py'> #<class 'module'>

# importlib动态导入
import importlib
mod=importlib.import_module('ss.aa.b')
print(mod,type(mod))
#<module 'ss.aa.b' from 'F:\\python37\\pythonfiles\\ss\\aa\\b.py'> #<class 'module'>
print(dir(a))

2  手写配置文件

#默认配置setting包下的init.py内部
import os
from setting import settings   #settings.py 内部 AAA=NONE
class setting:
    def __init__(self):
        user_setting=os.environ.get('user_setting')
        for key in dir(settings):
            if key.isupper():
                setattr(self,key,getattr(settings,key))
        import importlib
        mod=importlib.import_module(user_setting)
        for key in dir(mod):
            if key.isupper():
                setattr(self,key,getattr(mod,key))
setting_obj=setting()

#用户user_setting包下的setting.py 内部 AAA="aaa"

#run.py执行文件
import os
os.environ.setdefault('user_setting','user_setting.user_setting')
from setting import setting_obj
print(setting_obj.AAA)

3 配置查找顺序

 1先找类里的 2再找setting里用户配置的 3最后找默认django.conf.setting内默认的

4  drf分页器

from paginnator import models
from rest_framework.viewsets import ViewSetMixin
from rest_framework.views import APIView
from paginnator import myserverlize
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
from rest_framework.response import Response
# 普通分页器  #当前页的数据 序列化 返回
class Book(ViewSetMixin,APIView): #半自动路由控制
    def list(self,request,*args,**kwargs):
        books=models.Book.objects.all()
        p=PageNumberPagination()
        #每页显示不超过
        p.max_page_size=10
        #每页默认显示几条
        p.page_size=2
        #第几页
        p.page_query_param='aaa'
        #第几页显示几条(修改默认显示)
        p.page_size_query_param = 'bbb'
        # 当前页对象
        p_now=p.paginate_queryset(books,request,view=self)
        # 序列化
        p_now_now=myserverlize.Myserializers(p_now,many=True)
        # 返回分页器自带的Response(上下页链接,总条数,当前页数据)
        # return p.get_paginated_response(data=p_now_now.data)
        #返回当前页数据
        return Response(p_now_now.data)
    def list_one(self,request,*args,**kwargs):
        #查看某条数据,1条数据
        pass

# 偏移分页器
class Book(ViewSetMixin,APIView): #半自动路由控制
    def list(self,request,*args,**kwargs):
        books=models.Book.objects.all()
        p=LimitOffsetPagination()
        # 默认显示几条
        p.default_limit=3
        # 最大显示条数
        p.max_limit =10
        # p.limit_query_param = 'limit'
        # 偏移(?limit=13&offset=3) 从4算起显示10条
        # p.offset_query_param = 'offset'
        # 当前页数据
        p_now=p.paginate_queryset(books,request,view=self)
        p_now_now=myserverlize.Myserializers(p_now,many=True)
        return Response(p_now_now.data)
    def list_one(self,request,*args,**kwargs):
        #查看某条数据,1条数据
        pass
#加密分页器
#http://127.0.0.1:8000/book/?cursor=cD0xMg%3D%3D
class Book(ViewSetMixin,APIView): #半自动路由控制
    def list(self,request,*args,**kwargs):
        books=models.Book.objects.all()
        p=CursorPagination()
        p.ordering='id'
        p.page_size=4
        p.cursor_query_param = 'cursor'
        p_now=p.paginate_queryset(books,request,view=self)
        p_now_now=myserverlize.Myserializers(p_now,many=True)
        return p.get_paginated_response(p_now_now.data)
    def list_one(self,request,*args,**kwargs):
        #查看某条数据,1条数据
        pass
3种分页器

猜你喜欢

转载自www.cnblogs.com/3sss-ss-s/p/10139128.html
今日推荐