Django,發音爲[`dʒæŋɡəʊ],是用python語言寫的開源web開發框架,並遵循MVC設計。勞倫斯出版集團爲了開發以新聞內容爲主的網站,而開發出來了這個框架,於2005年7月在BSD許可證下發布。這個名稱來源於比利時的爵士音樂家DjangoReinhardt,他是一個吉普賽人,主要以演奏吉它爲主,還演奏太小提琴等。因爲Django在近年來的迅速發展,應用愈來愈普遍,被著名IT開發雜誌SDTimes評選爲2013SDTimes100,位列"API、庫和框架"分類第6位,被認爲是該領域的佼佼者。html
Django的主要目的是簡便、快速的開發數據庫驅動的網站。它強調代碼複用,多個組件能夠很方便的以"插件"形式服務於整個框架,Django有許多功能強大的第三方插件,你甚至能夠很方便的開發出本身的工具包。這使得Django具備很強的可擴展性。它還強調快速開發和DRY(DoNotRepeatYourself)原則。python
對比Flask框架,Django原生提供了衆多的功能組件,讓開發更簡便快速。web
有一種程序設計模式叫MVC,其核心思想是分工、解耦,讓不一樣的代碼塊之間下降耦合,加強代碼的可擴展性和可移植性,實現向後兼容。shell
MVC的全拼爲Model-View-Controller,最先由TrygveReenskaug在1978年提出,是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代爲程序語言Smalltalk發明的一種軟件設計模式,是爲了將傳統的輸入(input)、處理(processing)、輸出(output)任務運用到圖形化用戶交互模型中而設計的。隨着標準輸入輸出設備的出現,開發人員只須要將精力集中在業務邏輯的分析與實現上。後來被推薦爲Oracle旗下Sun公司Java EE平臺的設計模式,而且受到愈來愈多的使用ColdFusion和PHP的開發者的歡迎。如今雖然再也不使用原來的分工方式,可是這種分工的思想被沿用下來,普遍應用於軟件工程中,是一種典型而且應用普遍的軟件架構模式。後來,MVC的思想被應用在了Web開發方面,被稱爲Web MVC框架。數據庫
注:差別就在於黑線黑箭頭標識出來的部分django
mkvirtualenv django_py3_1.11 -p python3
注意須要聯網設計模式
使用django 1.11.11版本,注意須要聯網瀏覽器
pip install django==1.11.11
# 虛擬環境 mkvirtualenv # 建立虛擬環境 rmvirtualenv # 刪除虛擬環境 workon # 進入虛擬環境、查看全部虛擬環境 deactivate # 退出虛擬環境 # pip pip install # 安裝依賴包 pip uninstall # 卸載依賴包 pip list # 查看已安裝的依賴包 pip freeze # 凍結當前環境的依賴包
在使用Flask框架時,項目工程目錄的組織與建立是須要咱們本身手動建立完成的。緩存
在django中,項目工程目錄能夠藉助django提供的命令幫助咱們建立。服務器
建立工程的命令爲:
django-admin startproject 工程名稱
例如:想要在桌面的code目錄中建立一個名爲demo的項目工程,可執行以下命令:
cd ~/Desktop/code django-admin startproject demo
執行後,會多出一個新目錄名爲demo,此即爲新建立的工程目錄。
查看建立的工程目錄,結構以下
在開發階段,爲了可以快速預覽到開發的效果,django提供了一個純python編寫的輕量級web服務器,僅在開發階段使用。
運行服務器命令以下:
python manage.py runserver ip:端口 或: python manage.py runserver
能夠不寫IP和端口,默認IP是127.0.0.1,默認端口爲8000。
啓動後可見以下信息:
在瀏覽器中輸入網址「127.0.0.1:8000」即可看到效果。
在Web應用中,一般有一些業務功能模塊是在不一樣的項目中均可以複用的,故在開發中一般將工程項目拆分爲不一樣的子功能模塊,各功能模塊間能夠保持相對的獨立,在其餘工程項目中須要用到某個特定功能模塊時,能夠將該模塊代碼總體複製過去,達到複用。
在Flask框架中也有相似子功能應用模塊的概念,即藍圖Blueprint。
Django的視圖編寫是放在子應用中的。
在django中,建立子應用模塊目錄仍然能夠經過命令來操做,即:
python manage.py startapp 子應用名稱
manage.py 爲上述建立工程時自動生成的管理文件。
例如,在剛纔建立的demo工程中,想要建立一個用戶users子應用模塊,可執行:
cd ~/Desktop/code/demo python manage.py startapp users
執行後,能夠看到工程目錄中多出了一個名爲users的子目錄。
查看此時的工程目錄,結構以下:
建立出來的子應用目錄文件雖然被放到了工程項目目錄中,可是django工程並不能當即直接使用該子應用,須要註冊安裝後才能使用。
在工程配置文件settings.py中,INSTALLED_APPS項保存了工程中已經註冊安裝的子應用,初始工程中的INSTALLED_APPS以下:
註冊安裝一個子應用的方法,便是將子應用的配置信息文件apps.py中的Config類添加到INSTALLED_APPS列表中。
例如,將剛建立的users子應用添加到工程中,可在INSTALLED_APPS列表中添加'users.apps.UsersConfig'。
同Flask框架同樣,Django也用視圖來編寫Web應用的業務邏輯。
Django的視圖是定義在子應用的views.py中的。
打開剛建立的users模塊,在views.py中編寫視圖代碼。
from django.http import HttpResponse def index(request): """ index視圖 :param request: 包含了請求信息的請求對象 :return: 響應對象 """ return HttpResponse("hello the world!")
說明:
from django.conf.urls import url from . import views # urlpatterns是被django自動識別的路由列表變量 urlpatterns = [ # 每一個路由信息都須要使用url函數來構造 # url(路徑, 視圖) url(r'^index/$', views.index), ]
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), # django默認包含的 # 添加 url(r'^users/', include('users.urls')), ]
include函數除了能夠傳遞字符串以外,也能夠直接傳遞應用的urls模塊,如
from django.conf.urls import url, include from django.contrib import admin import users.urls # 先導入應用的urls模塊 urlpatterns = [ url(r'^admin/', admin.site.urls), # url(r'^users/', include('users.urls')), url(r'^users/', include(users.urls)), # 添加應用的路由 ]
從新啓動django程序
python manage.py runserver
在瀏覽器中輸入網址127.0.0.1:8000/users/index/ 可看到返回的信息