1. 程式人生 > 其它 >django的一些筆記

django的一些筆記

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]