20歲大學生,目前負責處理 django 在 Query 的整理,並可逐步支援 nosql 並以 mongo 作為測試案例。
相關連結:
20歲大學生,目前負責處理 django 在 Query 的整理,並可逐步支援 nosql 並以 mongo 作為測試案例。
相關連結:
codeIgniter 將 控制器與模型 物件都定位在函式 的集合,比較接近靜態類別的函式集如 Math.abs ..Math.pie 。
django 則沒說明 控制器與模型 需要用物件來設計,給使用者自行抉擇的空間,都採用 module 內包含數 func 來實做, 但支援的 orm 可以讓存取資料表等同於物件的操作。
如果沒特別設計,依照兩個框架最原始的介紹與建議的基礎開發,兩者在控制器的差異不大,但 django 較沒有去解釋物件的用法,大都是用在各種工具元件的情況 如 Form , Session,因為原先物件導向的設計就比較偏向元件的重用,而不是函式的集合,所以 django 較符合原始意義。
那 codeIgniter 這樣設計有什麼好處呢?
將 PHP 按照順序執行的流程,整理成物件的生命週期,雖然異於物件導向原始的意義,但流程控制較容易掌控,在程式規模擴增時,也讓尋找程式碼實際檔案變的更加容易,且也提供 library 的方式來讓使用者擺放擴增的 classes。
但其 library 對於各式的 classes 的引入,不夠 friendly ,對檔案與類別名字有所限制。
整體來說,物件雖重用性不高,但對於限制程式擴增的模式來說,有良好的效果,如能搭配 modules 的概念,系統也能成長到一定的規模。
對於 php 還沒有支援命名空間的版本來說,當用 函式 來組織,很容易會有名稱的衝突,如果要退一步,就要用各種累贅的命名慣例,而透過多一層類別封裝函式,解決了這種情況,但遇到控制器與模型名稱衝突時,可能還是需要靠命名空間來解決,抑或是這種設計容易造成不具意義的物件(函式集),所以命名才會成為煩惱吧。
django 的彈性
….
nginx (Engine X ) 是比 Apache 小巧快速的網頁伺服器,設定上相對沒有那麼強大與複雜。
Apache 是採用行程池運作比較消耗資源,而 nginx 則是 event based,不會依照 request 生成 process or thread。
下載網址:http://nginx.org/en/download.html
只是操作起來比較不熟悉,跟 apache 用 service 的方式比較不同,所以比較不親和一點…但是相對來說設定的細節都比較容易
設定檔在 /etc/nginx.conf
nginx 當初是為了 reverse porxy 所設計的,所以在 r-proxy 上理當應該比 apache 為更適當的選擇[1]
$ nginx # 啟動 $ nginx -t # 檢查設定檔格式是否正確 $ nginx -s [stop|reload|...] # 送訊號給正在執行的 nginx
可以用 fastcgi 搭配 django 運作,
可以額外 include 一個 django 的設定檔,內容如下:
server { listen 80; server_name server.com; location / { fastcgi_pass unix:/home/www/server.sock; # fastcgi_pass 127.0.0.1:8000; include fastcgi.conf; access_log /var/log/nginx_django.log; } }
然後用 django 內建的 server 跑 fastcgi 模式,就能讓 django 跟 nginx 接起來囉。
$ kill `cat /home/www/server.pid` $ python ./manage.py runfcgi method=threaded \ socket=/home/www/server.sock pidfile=/home/www/server.pid
這邊指定用 thread 的方式跑,然後把 socket 建在該檔案位置,用在重開的時候要用,這個 socket 位置對應到上面的 nginx 設定的 socket 位置,
也可以跑在某個 port 上面去對應,只是用檔案的方式好像比較安全?!..我也不太懂=_=
另外 django 內的 fastcgi.conf 內要注意一點:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; <strong>fastcgi_param SCRIPT_NAME $fastcgi_script_name;</strong> fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; <strong>fastcgi_param PATH_INFO $fastcgi_script_name;</strong>
粗體的設定是 django url 在 route 會用來判斷的變數要設定對。
然後在專案內的 setting.py 的裡面加上 FORCE_SCRIPT_NAME=”/”
原因跟上面 route 路由規則有關,否則網址倒頁的時候會出問題。 參考資源:
一個完整簡潔有力的學習專案,twissandra 用 django 與 cassandra 實作 twitter 最簡單重要的功能,有網頁介面。
此專案展示了 cassandra 資料模型的設計以及 API 的使用,又能大略學習 django 的簡單使用,安裝與運作又十分容易,
後端 API 是採用 high level api pycassa ,原先是 Thrift ,而透過 pycassa 做中介層,幫忙做一些控管讓資料存取更順暢。
資料來源
http://code.google.com/appengine/articles/django.html
官方佈署文件 ,部署錯誤的話參考下面這篇…
http://justinlilly.com/blog/2009/feb/06/django-app-engine-doc-fix/
環境是 python 2.6 + gae 1.4.1 + eclipse pydev + django 1.2.4
應該是 django 的版本不一樣…只是本地端跟遠端會有不一樣的運作情形,就有點怪了…