1. 关联表查询效率提升, 使用连表查询 在for循环中每次都需要跨表查询效率极低
q = models.UserInfo.objects.all().select_related('ut', 'gp') # 查询连表操作
q = models.UserInfo.objects.all().prefetch_related('ut') # 不做连表,做多次查询
2. 跨表查询方式
BOY(name) Girl(nick)-> Love(foreign_key gt,ut)
# 1 反向解析
# obj = models.Boy.objects.filter(name='zhangsan').first()
# love_list = obj.love_set.all()
# for raw in love_list:
# print(raw.gg.nick)
# 2 连表查询 多次查询 影响效率
# love_list = models.Love.objects.filter(gb__name="lisi")
# for row in love_list:
# print(row.gg.nick)
# 3 连表查询 拿到的是字典,其他返回的是对象
# love_list = models.Love.objects.filter(gb__name="lisi").values("gg__nick")
# for item in love_list:
# print(item['gg__nick'])
# 4 关联查询 拿到的是对象
# love_list = models.Love.objects.filter(gb__name="lisi").select_related("gg")
# for obj in love_list:
# print(obj.gg.nick)
3 数据库创建多个对象
use bulk_create 批量创建
use create(**dic) 利用字典创建
# obj_list = [models.Boy(id=1,name='zhangsan'),
# models.Boy(id=2,name='lisi'),
# ]
# obj_lists = [models.Girl(nick='xaoyu'),
# models.Girl(nick='xiaosi'),
# ]
# Boy.objects.bulk_create(obj_list, 1)
# Girl.objects.bulk_create(obj_lists, 1)
4. CBV装饰器
def wrapper(func):
def inner(*args, **kwargs)
return func(*args, **kwargs)
return inner
# 2.在类上添加
@mthod_decorator(wrapper, name='dispatch') 利用分流器在类上添加,则在每个方法上都装上修饰器
class Foo(View):
#@mthod_decorator(wrapper)
def get(self, requst):
pass
def post(self, request):
pass
5. 模板的使用
-模板继承 extends block xx
-include 导入小组件
-函数->自动执行
-模板自定义函数 可带参数 -simple filter simple tag
# 分别加入模板函数的装饰器名称 模板函数是可以带参数的函数 可以在页面渲染时传递参数
# filter对参数有限制 最多2个 传参方式别扭,但是可以和if条件语句结合使用
# {{第一个参数|函数名: 第二个参数}}
# simple_tag 对参数无限制,传参方式简单,对参数个数没有限制
# {% 函数名 参数 参数%}
6 Session
可在settings配置文件中设置session的参数
request.session.set['name'] = value 设定的值为字典类型
request.session.get['name]