記錄Django開發心得

2021-06-22 18:52:08 字數 3572 閱讀 2157

www.usus.cc概念層面

概括django是屬於mvc的web框架。

model:負責與資料庫www.usus.cc打交道

view:負責獲取或者增www.usus.cc強從models得到的資料

controller:這是django本身

manytomany與foreignkey的區別

www.e78.com

foreignkey例子:

員工打卡上班的記錄——員工可有多次打卡記錄,但是一次刷卡記錄只能有單一員工屬性(一對多)

manytomany例子:

一篇文章可以有多個標籤,而乙個標籤對應的文章也可以是多篇的(多對多)

manytomany還有一種特殊的www.e78.com結構,非常類似twitter的follow。

假設 a follow了 b,但是b並沒有follow a,他們之間的follow是不對等的,要實現這種關係,要在meta裡面設定symetric=false

***ycode

這是我理解後覺得「**到死」的一些**:

lambda x, y: x+y 

lambda其實和js中的匿名函www.e78.com數有這異曲同工的作用,嫌起名麻煩,就丟進去,lambda預設返回裡面的值,所以不需要return

map(lambda x: x+1, [1,2,3]) #得到[2,3,4] 

也就是每個都執行一次前面的函式

reduce(lambda x, y: x+y, [1,2,3]) #得到6 

也就是每個都和之前的元素執行一次操作

[i for i in xrange(0,100) if i%2==0] 

得到100以下所有偶數。學術上叫「列表推導」,但在現實案例中是遍歷的好工具。

q(**) 

我在培訓的時候,學到的是q、f這兩個django函式是不接受字串的,即 q("abc=1") 是不能接受的。但是這段****之處就是徹底擺脫了這條束縛(其實就是重寫了keyword對),可以隨意構造你喜歡的查詢段,這在構造搜尋功能時十分有用。比如:

www.e78.com

q_dict = reduce(lambda x,y: x&y, [ q(**

) for taxonomy in request.get.keys() if taxonomy in searchable_list ])

@property 

這個@符號的用法叫「修飾器」,個人感覺這是python比其他語言優美的地方,如何構造修飾器的話,還是看文件的好。這裡只是說在class中使用 @property 的話,這個函式就自動地變成class的屬性了,這和js的set、get很像

super超類的使用,super一出,繼承的子class一概不執行自身的函式,而是執行super指定的函式

annotate和aggregate。這兩個傢伙在構造新的query_set時非常有用。比如要統計出一台電腦的總價時,在computermanager裡面使用

def get_query_set(self):

query_set = super(computermanager, self).get_query_set()

query_set = query_set.annotate(price=sum('devices__price'))

這樣,每台電腦就有了總**。這在構造商品集的時候很方便,但是admin.py的編寫就略顯羅嗦了。

error集

取出資料時:xxmanager object is not iterable

這是因為django不會在執行**過程中得出sql語句並查詢(所以想獲得sql語句也是不可能的)。所以需要使用.get(),.all(),.filter來獲得真正的資料實體

概念層面

概括django是屬於mvc的web框架。

model:負責與資料庫打交道

view:負責獲取或者增強從models得到的資料

controller:這是django本身

manytomany與foreignkey的區別

foreignkey例子:

員工打卡上班的記錄——員工可有多次打卡記錄,但是一次刷卡記錄只能有單一員工屬性(一對多)

manytomany例子:

一篇文章可以有多個標籤,而乙個標籤對應的文章也可以是多篇的(多對多)

manytomany還有一種特殊的結構,非常類似twitter的follow。

假設 a follow了 b,但是b並沒有follow a,他們之間的follow是不對等的,要實現這種關係,要在meta裡面設定symetric=false

***ycode

這是我理解後覺得「**到死」的一些**:

lambda x, y: x+y 

lambda其實和js中的匿名函式有這異曲同工的作用,嫌起名麻煩,就丟進去,lambda預設返回裡面的值,所以不需要return

map(lambda x: x+1, [1,2,3]) #得到[2,3,4] 

也就是每個都執行一次前面的函式

reduce(lambda x, y: x+y, [1,2,3]) #得到6 

也就是每個都和之前的元素執行一次操作

[i for i in xrange(0,100) if i%2==0] 

得到100以下所有偶數。學術上叫「列表推導」,但在現實案例中是遍歷的好工具。

q(**) 

我在培訓的時候,學到的是q、f這兩個django函式是不接受字串的,即 q("abc=1") 是不能接受的。但是這段****之處就是徹底擺脫了這條束縛(其實就是重寫了keyword對),可以隨意構造你喜歡的查詢段,這在構造搜尋功能時十分有用。比如:

q_dict = reduce(lambda x,y: x&y, [ q(**

) for taxonomy in request.get.keys() if taxonomy in searchable_list ])

@property 

這個@符號的用法叫「修飾器」,個人感覺這是python比其他語言優美的地方,如何構造修飾器的話,還是看文件的好。這裡只是說在class中使用 @property 的話,這個函式就自動地變成class的屬性了,這和js的set、get很像

super超類的使用,super一出,繼承的子class一概不執行自身的函式,而是執行super指定的函式

annotate和aggregate。這兩個傢伙在構造新的query_set時非常有用。比如要統計出一台電腦的總價時,在computermanager裡面使用

def get_query_set(self):

query_set = super(computermanager, self).get_query_set()

query_set = query_set.annotate(price=sum('devices__price'))

這樣,每台電腦就有了總**。這在構造商品集的時候很方便,但是admin.py的編寫就略顯羅嗦了。

error集

取出資料時:xxmanager object is not iterable

這是因為django不會在執行**過程中得出sql語句並查詢(所以想獲得sql語句也是不可能的)。所以需要使用.get(),.all(),.filter來獲得真正的資料實體

Django開發查錯記錄

有多個post按鈕且action相同時需要放到同乙個form中 mysql需要支援中文編碼 若需要啟用後台管理模組,需要啟動session服務 python manage.py makemigrations sessions python manage.py migrae sessions 如果在t...

Django開發記錄 2

配置view.py檔案 新增url,配置urls.py檔案 import blog.views as bv urlpatterns path admin admin.site.urls path index bv.index 通過include方法,匯入外部檔案。修改myblog.urls.py f...

Django開發記錄 4

admin介紹 admin是django自帶的乙個功能強大的自動化資料管理介面,被授權的使用者可以直接在admin中管理資料庫。django提供了許多針對admin的定製功能。admin配置 建立使用者 python manage.py createsuperuser 建立超級使用者 修改setti...