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