您好,登錄后才能下訂單哦!
知識(shí)點(diǎn)
深淺copy
淺值深id
orm操作
ManyToManyField 虛擬字段
告訴Django orm 自動(dòng)幫你創(chuàng)建第三張表
查詢的時(shí)候可以借助該字段跨表
外鍵屬性可賦值外聯(lián)對(duì)象
Model.object下13個(gè)必會(huì)操作
返回QuerySet對(duì)象的方法有
all()
filter()
exclude()
order_by()
reverse()
distinct()
特殊的QuerySet
values() 返回一個(gè)可迭代的字典序列
values_list() 返回一個(gè)可迭代的元祖序列
返回具體對(duì)象的
get()
first()
last()
返回布爾值的方法有:
exists()
返回?cái)?shù)字的方法有
count()
外鍵操作
add
remove
set
上面三個(gè)可以傳一個(gè)或多個(gè)參數(shù)(可迭代數(shù)據(jù)類(lèi)型) 并且即可以是數(shù)字也可以是對(duì)象
clear
不傳參數(shù) 直接清空
以上方法使用時(shí)會(huì)清空緩存,所以不需要再用save()。
跨表查詢
基于對(duì)象的跨表查詢 (都是子查詢),‘.’連接
基于對(duì)象的反向查詢 除了一對(duì)一直接點(diǎn)表名小寫(xiě)就可以拿到關(guān)聯(lián)對(duì)象
一對(duì)多個(gè)多對(duì)多反向都必須 表名小寫(xiě)_set
基于雙下劃線的跨表查詢 (都是聯(lián)表查詢)
關(guān)鍵是:正向字段反向表名小寫(xiě)
正-反向查詢
外鍵正向,按外鍵字段
被外鍵反向,按表名小寫(xiě)
8|0Django終端打印SQL語(yǔ)句
if __name__ == '__main__':
作為腳本執(zhí)行時(shí)內(nèi)容
else:
作為模塊時(shí)內(nèi)容
查詢集
Django中的QuerySet本質(zhì)上是一個(gè)懶加載的對(duì)象,作用是進(jìn)行表級(jí)操作,返回結(jié)果集(一張視圖:類(lèi)型<class 'django.db.models.query.QuerySet'>值<QuerySet [<Person: Person object (1)>, <Person: Person object (2)>]>或一條記錄:類(lèi)型<class 'TestModels.models.Person'>值Person object (1)),當(dāng)結(jié)果集是視圖時(shí)可鏈?zhǔn)秸{(diào)用。<QuerySet [<Person: Person object (1)>, <Person: Person object (2)>]>
URL路由反向解析---后臺(tái)反向解析
django.urls.reverse(name,args)
只有理解并記住的才能算是自己的。才是對(duì)未來(lái)學(xué)習(xí)內(nèi)容做減法。越接近本質(zhì)、簡(jiǎn)潔模型,越利于理解、記憶。學(xué)習(xí)、運(yùn)用、減負(fù)效果越好。
10m對(duì)人隕石 100m對(duì)地區(qū) 1km對(duì)洲 10km 對(duì)行星隕石
settings源碼
算法
總結(jié):manage.py 中設(shè)置'DJANGO_SETTINGS_MODULE'缺省值為'untitled.settings'模塊字符串,再利用上述方法讀取全局設(shè)置'global_settings'為字典再向字典中寫(xiě)入用戶設(shè)置(有優(yōu)點(diǎn):利用了鍵的再賦值實(shí)現(xiàn)了用戶設(shè)置高優(yōu)先級(jí),和用戶設(shè)置參數(shù)的可擴(kuò)展性)
'DJANGO_SETTINGS_MODULE'='untitled.settings'
'DJANGO_SETTINGS_MODULE'+'global_settings'->'ENVIRONMENT_VARIABLE'
第三方存儲(chǔ)(如os.environ)暴露給用戶的設(shè)置文件模塊導(dǎo)入名,構(gòu)造一個(gè)類(lèi)來(lái)存儲(chǔ)設(shè)置鍵值對(duì),導(dǎo)入兩個(gè)設(shè)置模塊(用戶設(shè)置文件要先從第三方讀取模塊名再利用importlib模塊導(dǎo)入),依次利用getattr()、setattr()將兩個(gè)設(shè)置模塊的名稱(chēng)空間內(nèi)鍵值對(duì)寫(xiě)入該類(lèi)
知識(shí)點(diǎn)
importlib模塊
利用importlib可以導(dǎo)入‘模塊名字符串’代表的模塊
os與sys
os模塊負(fù)責(zé)程序與操作系統(tǒng)的交互,提供了訪問(wèn)操作系統(tǒng)底層的接口;sys模塊負(fù)責(zé)程序與python解釋器的交互,提供了一系列的函數(shù)和變量,用于操控python的運(yùn)行時(shí)環(huán)境。
項(xiàng)目測(cè)試啟動(dòng)文件
/xxx.py
import os
import sys
BASE_DIR=os.path.dirname(file)
sys.path.append(BASE_DIR)
···
from importlib模塊
getattr(名稱(chēng)空間(模塊名))、setattr(object,name,value)
admin文件用戶配置
配置類(lèi),繼承admin.ModelAdmin類(lèi)
五大配置參數(shù)
list_display 控制展示字段 注意不能放多對(duì)多字段
list_display_links 控制鏈接展示字段 注意不能放多對(duì)多字段
search_fields 多字段檢索 注意不能放多對(duì)多字段
list_filter 篩選列表 多用于放外鍵字段
class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish_date','publish']
list_display_links = ['title','price']
search_fields = ['title','price']
list_filter = ['publish','authors']
def patch_init(self,request,queryset):#固定參數(shù)
queryset.update(price=666)#2.queryset選擇集操作方法邏輯
patch_init.short_description = '價(jià)格批量修改'#3.方法簡(jiǎn)稱(chēng)
actions = [patch_init]#1.actions操作框批量處理函數(shù)方法列
admin.site.register(models.Book,BookConfig)
admin運(yùn)行邏輯
1.admin啟動(dòng)源碼
django在啟動(dòng)的時(shí)候會(huì)依次執(zhí)行每一個(gè)應(yīng)用下的admin.py文件
manage.py->settings.py~~~'django.contrib.admin'->autodiscover_modules('admin',register_to=site)->AdminSiteClass=import_string(apps.get_app_config('admin').default_site)
單例模式
2.注冊(cè)源碼
admin.py注冊(cè)語(yǔ)句
admin.site.register(models.Publish) # 僅僅是將注冊(cè)了的模型表和以模型表為參數(shù)實(shí)例化產(chǎn)生的對(duì)象
3.URL
admin會(huì)給每一個(gè)注冊(cè)了的表生成增刪改查四條url
路由分發(fā)的本質(zhì)
路由:url('',func,None,None) 可迭代 路由分發(fā)的本質(zhì)為視圖函數(shù)替換為路由數(shù)列,多級(jí)為視圖函數(shù)替換為標(biāo)準(zhǔn)路由分發(fā)組
個(gè)性化后臺(tái)管理應(yīng)用設(shè)計(jì)與實(shí)現(xiàn)
stark(自定義后臺(tái)管理應(yīng)用應(yīng)用名)
啟動(dòng) 通過(guò)stark讀取其他應(yīng)用中的stark.py
令django一啟動(dòng)就要執(zhí)行每一個(gè)應(yīng)用下的stark.py文件#該文件如果被用戶在應(yīng)用下創(chuàng)建,替代應(yīng)用下的admin.py文件
算法:
配置文件中注冊(cè):
INSTALLED_APPS = [
'stark.apps.StarkConfig',
]
app配置模塊apps.py 添加:
def ready(self):#函數(shù)重寫(xiě)
from django.utils.module_loading import autodiscover_modules
return autodiscover_modules('stark')
注冊(cè) 在其他應(yīng)用admin.py和urls.py中替代django.contrib.admin.site使用
應(yīng)用下創(chuàng)建stark.py
快復(fù)制Django默認(rèn)admin配置 django.contrib.admin.sites和django.contrib.admin.ModelAdmin中的內(nèi)容,根據(jù)需要重寫(xiě)方法
算法:
site=管理站點(diǎn)類(lèi)(admin中是AdminSite()),
管理站點(diǎn)類(lèi)中需要用到模型管理類(lèi)(admin中是django.contrib.admin.ModelAdmin),這兩個(gè)類(lèi)中的諸般方法根據(jù)用戶需要重寫(xiě)
1.二級(jí)路由分發(fā)
為了實(shí)現(xiàn)二級(jí)路由生成,一級(jí)路由寫(xiě)在管理站點(diǎn)類(lèi),二級(jí)路有寫(xiě)在模型管理類(lèi),因?yàn)椋? class ModelStark(object):
list_display = ['__str__',]
def __init__(self,model):
self.model = model
[學(xué)習(xí)python分布式爬蟲(chóng)-從基礎(chǔ)到實(shí)戰(zhàn)]
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。