深淺賦值+orm操做+Django-admin簡單配置

知識點
深淺copy
淺值深id
orm操做
ManyToManyField 虛擬字段
告訴Django orm 自動幫你建立第三張表
查詢的時候能夠藉助該字段跨表
外鍵屬性可賦值外聯對象
Model.object下13個必會操做
返回QuerySet對象的方法有
all()
filter()
exclude()
order_by()
reverse()
distinct()
特殊的QuerySet
values() 返回一個可迭代的字典序列
values_list() 返回一個可迭代的元祖序列
返回具體對象的
get()
first()
last()
返回布爾值的方法有:
exists()
返回數字的方法有
count()
外鍵操做
add
remove
set
上面三個能夠傳一個或多個參數(可迭代數據類型) 而且便可以是數字也能夠是對象
clear
不傳參數 直接清空
以上方法使用時會清空緩存,因此不須要再用save()。
跨表查詢
基於對象的跨表查詢 (都是子查詢),‘.’鏈接
基於對象的反向查詢 除了一對一直接點表名小寫就能夠拿到關聯對象
一對多個多對多反向都必須 表名小寫_set
基於雙下劃線的跨表查詢 (都是聯表查詢)
關鍵是:正向字段反向表名小寫
正-反向查詢
外鍵正向,按外鍵字段
被外鍵反向,按表名小寫python

8|0Django終端打印SQL語句算法

if __name__ == '__main__':
    做爲腳本執行時內容
else:
    做爲模塊時內容

查詢集
    Django中的QuerySet本質上是一個懶加載的對象,做用是進行表級操做,返回結果集(一張視圖:類型<class 'django.db.models.query.QuerySet'>值<QuerySet [<Person: Person object (1)>, <Person: Person object (2)>]>或一條記錄:類型<class 'TestModels.models.Person'>值Person object (1)),當結果集是視圖時可鏈式調用。<QuerySet [<Person: Person object (1)>, <Person: Person object (2)>]>
URL路由反向解析---後臺反向解析
    django.urls.reverse(name,args)

只有理解並記住的才能算是本身的。纔是對將來學習內容作減法。越接近本質、簡潔模型,越利於理解、記憶。學習、運用、減負效果越好。
10m對人隕石 100m對地區 1km對洲 10km 對行星隕石django

settings源碼
算法
總結:manage.py 中設置'DJANGO_SETTINGS_MODULE'缺省值爲'untitled.settings'模塊字符串,再利用上述方法讀取全局設置'global_settings'爲字典再向字典中寫入用戶設置(有優勢:利用了鍵的再賦值實現了用戶設置高優先級,和用戶設置參數的可擴展性)
'DJANGO_SETTINGS_MODULE'='untitled.settings'
'DJANGO_SETTINGS_MODULE'+'global_settings'->'ENVIRONMENT_VARIABLE'
第三方存儲(如os.environ)暴露給用戶的設置文件模塊導入名,構造一個類來存儲設置鍵值對,導入兩個設置模塊(用戶設置文件要先從第三方讀取模塊名再利用importlib模塊導入),依次利用getattr()、setattr()將兩個設置模塊的名稱空間內鍵值對寫入該類
知識點
importlib模塊
利用importlib能夠導入‘模塊名字符串’表明的模塊
os與sys
os模塊負責程序與操做系統的交互,提供了訪問操做系統底層的接口;sys模塊負責程序與python解釋器的交互,提供了一系列的函數和變量,用於操控python的運行時環境。
項目測試啓動文件
/xxx.py
import os
import sys
BASE_DIR=os.path.dirname(file)
sys.path.append(BASE_DIR)
···
from importlib模塊
getattr(名稱空間(模塊名))、setattr(object,name,value)緩存

admin文件用戶配置
配置類,繼承admin.ModelAdmin類
五大配置參數
list_display 控制展現字段 注意不能放多對多字段
list_display_links 控制連接展現字段 注意不能放多對多字段
search_fields 多字段檢索 注意不能放多對多字段
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):#固定參數
queryset.update(price=666)#2.queryset選擇集操做方法邏輯
patch_init.short_description = '價格批量修改'#3.方法簡稱
actions = [patch_init]#1.actions操做框批量處理函數方法列
admin.site.register(models.Book,BookConfig)app

admin運行邏輯
1.admin啓動源碼
django在啓動的時候會依次執行每個應用下的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.註冊源碼
admin.py註冊語句
admin.site.register(models.Publish) # 僅僅是將註冊了的模型表和以模型表爲參數實例化產生的對象分佈式

當作鍵值對存入了site對象中的_registry字段

3.URL
    admin會給每個註冊了的表生成增刪改查四條url

路由分發的本質
路由:url('',func,None,None) 可迭代 路由分發的本質爲視圖函數替換爲路由數列,多級爲視圖函數替換爲標準路由分發組ide

個性化後臺管理應用設計與實現
stark(自定義後臺管理應用應用名)
    啓動 經過stark讀取其餘應用中的stark.py
        令django一啓動就要執行每個應用下的stark.py文件#該文件若是被用戶在應用下建立,替代應用下的admin.py文件
        算法:
            配置文件中註冊:
                INSTALLED_APPS = [
                    'stark.apps.StarkConfig',
                ]           
            app配置模塊apps.py 添加:
                def ready(self):#函數重寫
                    from django.utils.module_loading import autodiscover_modules
                    return autodiscover_modules('stark')
    註冊 在其餘應用admin.py和urls.py中替代django.contrib.admin.site使用
        應用下建立stark.py
            快複製Django默認admin配置 django.contrib.admin.sites和django.contrib.admin.ModelAdmin中的內容,根據須要重寫方法
            算法:
                site=管理站點類(admin中是AdminSite()),
                管理站點類中須要用到模型管理類(admin中是django.contrib.admin.ModelAdmin),這兩個類中的諸般方法根據用戶須要重寫
            1.二級路由分發
                爲了實現二級路由生成,一級路由寫在管理站點類,二級路有寫在模型管理類,由於:
                    class ModelStark(object):
                        list_display = ['__str__',]
                        def __init__(self,model):
                            self.model = model

[學習python分佈式爬蟲-從基礎到實戰]函數

相關文章
相關標籤/搜索