国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

記錄Django開發心得

2019-11-25 18:19:20
字體:
來源:轉載
供稿:網友

概念層面

概括

Django是屬于MVC的Web框架。

Model:負責與數據庫打交道

View:負責獲取或者增強從Models得到的數據

Controller:這是Django本身

Project與App的區別

Project:提供各種配置文件 App:功能的結合,包括Model和view,需要在根目錄下添加”__init__.py”,使得Python可以識別

ManyToMany與ForeignKey的區別

ForeignKey例子:

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

ManyToMany例子:

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

ManyToMany還有一種特殊的結構,非常類似Twitter的Follow。

假設 A Follow了 B,但是B并沒有Follow A,他們之間的Follow是不對等的,要實現這種關系,要在Meta里面設置symetric=False

SexyCode

這是我理解后覺得“性感到死”的一些代碼:

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(**{key:value}) 

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

q_dict = reduce(lambda x,y: x&y, [ Q(**{"%s__slug_name" % taxonomy:request.GET.get(taxonomy)}    ) 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來獲得真正的數據實體

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巩留县| 中阳县| 怀安县| 呈贡县| 怀仁县| 柳河县| 双桥区| 新余市| 昭苏县| 马公市| 武乡县| 裕民县| 招远市| 龙南县| 宁波市| 敦化市| 开原市| 类乌齐县| 大荔县| 龙泉市| 长顺县| 襄城县| 沙田区| 调兵山市| 仁寿县| 邵武市| 绥宁县| 子洲县| 安岳县| 尉氏县| 保德县| 黑山县| 柳河县| 镇巴县| 濮阳市| 广灵县| 安平县| 临朐县| 铁力市| 新宁县| 五大连池市|