2015年7月10日 星期五

Python筆記:Django(2)建立 Django application

Web Framework

簡單定義是說”開發 Web 應用程式時所用的框架”。
一個既定的程式骨架 – 你必須按照它的規範寫程式,例如把資料庫相關的程式與跟畫面溝通的程式分開,而不是全部寫在同一個檔案。這對於程式的開發速度、再利用性、和程式可讀性等等都有相當大的好處。
強大且豐富的函式庫 ( Libraries ) – 通常會提供一些開發網站所需要且常用的功能,例如使用者認證、安全機制、URL mapping、資料庫連接等等。讓你在開發網站時可以直接使用函式庫,然後專注在客製化自己的功能。

Django簡介

Django使用了類似 MVC 的架構,只是在定義和解釋上略為不同,稱為 MTV ( Model–Template–View ),我們可以透過下面這張圖來了解其運作方式:
  • Models通常是用來與資料庫溝通,與MVC相同。
  • Templates 代表把東西呈現給使用者的媒介。
  • Views 用來處理 models,以將其呈現於 templates 中,或者處理使用者送來的資料(以 HTTP POST等方式),並存入 models。
Django templates 比較像 MVC 的 views,但是比起後者,templates只負責資料呈現,幾乎不包含任何邏輯(除非是用來呈現的邏輯)。Django views 則介於 MVC 的 views 與 controllers 之間。但 MVC 中 controllers 的邏輯不全然包含在 Django views;Django 通常習慣把部分邏輯放在 models,並且提供了一些額外的工具,來簡化 views 需要承擔的責任。但即使如此,Django views 仍然會像 MVC 的 controllers 一樣,負責連結 models、templates、以及 Django 提供的其他工具。
enter image description here
Template: 大部分都是 HTML 的程式碼,只有資料的部份會用特殊的 Django template 格式來取代,當然還有一些控制的機制例如 for 迴圈、if else 判斷等。這樣一來,網頁設計的部份就和資料的處理分離,不論是資料處理或是網頁的部份,程式碼看起來都乾淨許多。
Django運作方式: 主要就是先對照 url,找到適當程式後,進入該程式;接著處理完資料部份後,就將樣板叫出來,並把資料的部份放上去,接著回傳。

Django 環境設定

首先假設我們利用django-admin.py來建置django的專案:
$ django-admin.py startproject mysite
專案結構如下:

settings.py

settings.py是整個專案的主設定檔,檔案中有很多使用大寫的變數.
在settings.py中,對於該專案的基本路徑已經設定好了
 BASE_DIR = os.path.dirname(os.path.dirname(__file__))
這裡的BASE_DIR指的是專案目錄的路徑.
在Python中,_file _ 指的是當下該命令檔的檔名,而使用os.path.dirname(_file _)會找出該檔所在目錄的路徑.即為子目錄mysite,而連續使用兩次得到的路徑(子目錄的目錄)就會是上層mysite.

除錯模式設定

Django中有非常強大的除錯模式,在建置專案時是預設打開的
DEBUG = True
TEMPLATE_DEBUG = True
要記得的事在網站上真正上線時,絕對要將DEBUG關閉.

資料庫設定

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
Django預設是使用 SQLite 3,不過如果你的機器裡有 PostgreSQL、MySQL 或 Oracle,Django 也有官方支援(還有些非官方的模組支援其他的)。因為網站正式部署時也會和你本機用的不同,所以我們同樣要把這段放到 local.py 裡。如果你想用其他資料庫,請參考官方文件(https://docs.djangoproject.com/en/1.7/ref/databases/)。
注意你必須安裝合適的 Python 函式庫:
PostgreSQL:pip install psycopg2
MySQL(或 MariaDB):pip install mysqlclient
Oracle:pip install cx_Oracle

語言與時區

預設設定都是美國時間,如下:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
我們可以將LANGUAGE_CODE的值改為zh-TW就能將主語言改成中文,並將TIME_ZONE改為Asia/Taipei.
LANGUAGE_CODE = 'zh-TW'
TIME_ZONE = 'Asia/Taipei'

App安裝

settings.py中,INSTALLED_APPS這個元組可以指定想要安裝的app,而預設在settings.py中的那些app都是Django內建的
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

ROOT URL配置

ROOT_URLCONF = 'mysite.urls'
預設的檔案就是當前目錄中(下層mysite)的urls.py,這裡的形式是匯入會用到的namespace形式,在這邊urls不加.py.
在資料庫裡建立預設需要的表格:(請 cd 到 manage.py 所在的目錄再執行)
python manage.py migrate

利用 startapp 建立 Django app

$ python manage.py startapp store
建立一個叫 stores 的目錄,用來包裝我們的 app. 。這個 app 主要負責管理店家.
Dinbendon
├──Dinbendon
│ ├── settings.py
│ ├── init.py
│ ├── urls.py
│ └── wsgi.py
├── stores
│ ├── migrations
│ │ └── init.py
│ ├── init.py
│ ├── admin.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── manage.py
來看看 stores 裡面各項目的用途:
  • migrations: 用來存放 database migration,也就是資料庫結構改變的資料。這些檔案通常不會直接被執行,而是在你透過Django 指令改變資料庫結構時,用來提示 Django 你的資料在某個時間點的結構。
  • admins.py: 是用來設定 Django admin。
  • models.py: 和 views.py 是用來放 models 和 views 的程式碼。
  • tests.py: 是用來放單元測試。
參考網址:
http://ithelp.ithome.com.tw/question/10157871

沒有留言:

張貼留言