Django Web開發指南筆記
語句VS表達式
- python代碼由表達式和語句組成,由解釋器負責執行。
- 主要區別:表達式是一個值,它的結果一定是一個python對象;如:12,1+2,int('123')
- 結果不是對象的代碼是語句,如:if、print、for
python中可變、不可變類型
- 簡單類型或者標量類型,包括整數等其他數字類型,str和unicode這樣的字符串類型,以及元祖都是不可變。
-
列表、字典、類都是可變的
-
python對象都有三個屬性(類型、標識符、值)
-
標識符:運行在解釋器里所有對象都有的唯一的一個標識號
*args 和 **kwargs
- 單*表示有元祖或list出現
- 兩個*表示有字典出現
re.match 和 re.search
- match :只從字符串的開始與正則表達式匹配,匹配成功返回match對象,否則返回none;
- search :將字符串的所有字串嘗試與正則表達式匹配,如果所有的字串都沒有匹配成功,返回none,否則返回match對象;(re.search相當於perl中的默認行為)
- 然后再用match對象的group和groups方法獲取匹配模式
import random vs from randow import choice
Package
http://www.crifan.com/pythonmodulevs_libraryvspackage/
python 的淺拷貝和深拷貝
http://www.tuicool.com/articles/nuQFbqe
python 動態實例屬性
模板繼承
` {% extends "base.html" %}
{% block content %}
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp }}</p>
<p>{{ post.body }}</p>
{% endfor %}
{% endblock %}
`
Django模型層Meta內部類詳解
http://blog.chinaunix.net/uid-21633169-id-4374219.html
模板過濾器
- 日期
`
<p>{{ post.timestamp|date }}</p>
`
ORM關系映射
-
多對一: ForeignKeyField
-
多對多: ManyToManyField(會自動創建關系表)
-
一對一: OneToOneField
模型繼承
- 抽象基礎類
抽象類不會生成數據表
- 多表繼承
被繼承的類(父類)就是一張數據表,其實就是在子類和父類之間設置了一個OneToOneField。 由於這種形式的繼承允許父類擁有自己的屬性,Meta的繼承很可能導致兩端的沖突(父類的Meta會被子類繼承)。
什么是鴨子類型(duck typing)
- 關心對象是什么類型,只關心行為!
- 比如在python中,有很多file-like的東西,比如StringIO,GzipFile,socket。它們有很多相同的方法,我們把它們當作文件使用。
中間件
視圖與邏輯
視圖(也叫控制器),時所有DjangoWeb應用程序的核心。在定義和使用模型的時候,我們是數據庫管理員;在編寫模板的時候,我們時界面設計師;而在編寫視圖的時候,我們才是真正的軟件工程師。