1. 程式人生 > >Django框架全面講解

Django框架全面講解

Python的WEB框架有Django、Tornado、Flask 等多種,Django相較與其他WEB框架其優勢為:大而全,框架本身集成了ORM、模型繫結、模板引擎、快取、Session等諸多功能。

本文將以下方面帶大家全面瞭解Django框架,筆者使用的版本為1.10.

  1. 流程

  2. 基本配置
  3. 路由系統
  4. 檢視view
  5. 模板
  6. Model
  7. 中介軟體
  8. Form
  9. 認證系統
  10. CSRF
  11. 分頁
  12. Cookie
  13. Seesion
  14. 快取
  15. 序列化
  16. 訊號
  17. admin

一、 Django流程介紹

MVC是眾所周知的模式,即:將應用程式分解成三個組成部分:model(模型),view(檢視),和 controller(控制 器)。其中:
      M——管理應用程式的狀態(通常儲存到資料庫中),並約束改變狀態的行為(或者叫做“業務規則”)。
      C——接受外部使用者的操作,根據操作訪問模型獲取資料,並呼叫“檢視”顯示這些資料。控制器是將“模型”和“檢視”隔離,併成為二者之間的聯絡紐帶。
      V——負責把資料格式化後呈現給使用者。

Django也是一個MVC框架。但是在Django中,控制器接受使用者輸入的部分由框架自行處理,所以 Django 裡更關注的是模型(Model)、模板(Template)和檢視(Views),稱為 MTV模式:

    M 代表模型(Model),即資料存取層。 該層處理與資料相關的所有事務: 如何存取、如何驗證有效性、包含哪些行為以及資料之間的關係等。

    T 代表模板(Template),即表現層。 該層處理與表現相關的決定: 如何在頁面或其他型別文件中進行顯示。

    V 代表檢視(View),即業務邏輯層。 該層包含存取模型及調取恰當模板的相關邏輯。 你可以把它看作模型與模板之間的橋樑。

二、 Django 基本配置

1. 建立django程式

  • 終端命令:django-admin startproject sitename  (在當前目錄下建立一個Django程式)
  • IDE建立Django程式時,本質上都是自動執行上述命令

其他常用命令:

  python manage.py runserver ip:port  (啟動伺服器,預設ip和埠為http://127.0.0.1:8000/)

  python manage.py startapp appname  (新建 app)

  python manage.py syncdb  (同步資料庫命令,Django 1.7及以上版本需要用以下的命令)

  python manage.py makemigrations  (顯示並記錄所有資料的改動)

  python manage.py migrate  (將改動更新到資料庫)

  python manage.py createsuperuser  (建立超級管理員)

  python manage.py dbshell  (資料庫命令列)

  python manage.py  (檢視命令列表)

2. 程式目錄

3. 配置檔案

a、資料庫

支援SQLite 3(預設)、PostgreSQL 、MySQL、Oracle資料庫的操作

 具體配置

Django框架對於開發者而言高度透明化,對於不同資料庫的具體使用方法是一致的,改變資料庫型別只需要變動上述配置即可。

想要了解更多請戳這裡

b、靜態檔案新增

 settings配置

三、 Django 路由系統

URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL模式以及要為該URL模式呼叫的檢視函式之間的對映表;你就是以這種方式告訴Django,對於這個URL呼叫這段程式碼,對於那個URL呼叫那段程式碼。URL的載入是從配置檔案中開始。

引數說明:

  • 一個正則表示式字串
  • 一個可呼叫物件,通常為一個檢視函式或一個指定檢視函式路徑的字串
  • 可選的要傳遞給檢視函式的預設引數(字典形式)
  • 一個可選的name引數

1. 示例

1 2 3 4 5 6 7 8 9 10 from django.conf.urls import url from import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ]

說明:

  • 要捕獲從URL中的值,用括號括起來,會當引數傳入 views 檢視。
  • 沒有必要新增一個斜線,因為每個URL都有。例如,它^articles不是^/articles
  • 'r'前面的每個正則表示式字串中是可選的,但建議。它告訴Python字串是“原始” -沒有什麼字串中應該進行轉義。

請求示例:

  • 一個請求 /articles/2005/03/ 會匹配上面列表中的第三條. Django 會呼叫函式 views.month_archive(request, '2005', '03').
  • /articles/2005/3/ 不會匹配上面列表中的任何條目, 因為第三條的月份需要二位數字.
  • /articles/2003/ 會匹配上第一條而不是第二條,因為匹配是按照從上到下順序而進行的, Django 會呼叫函式 views.special_case_2003(request)
  • /articles/2003 不會匹配上面列表中的任何條目, 因為每個URL應該以 / 結尾.
  • /articles/2003/03/03/ 會匹配上最後一條. Django 會呼叫函式 views.article_detail(request, '2003', '03', '03').

2. 命名組(Named groups)

在上面的簡單例子中,並沒有使用正則表示式分組,在更高階的用法中,很有可能使用正則分組來匹配URL並且將分組值通過引數傳遞給view函式。

在Python的正則表示式中,分組的語法是 (?P<name>pattern), name表示分組名,pattern表示一些匹配正則.

這裡是一個簡單的小例子:

1 2 3 4 5 6 7 8 9 10 11 12 # 正則知識 import re ret=