02-Django基本流程

一、Django簡(jiǎn)介

Django是用Python開發(fā)的一個(gè)免費(fèi)開源的Web框架,可以用于快速搭建高性能,優(yōu)雅的網(wǎng)站!

初次發(fā)布于2005年7月,并于2008年發(fā)布了第一個(gè)正式版本1.0。

官方文檔: https://www.djangoproject.com/

二、Django特點(diǎn)

  • 強(qiáng)大的數(shù)據(jù)庫(kù)功能: 擁有強(qiáng)大的數(shù)據(jù)庫(kù)操作接口(QuerySet API),如需要也能執(zhí)行原生SQL。
  • 自帶強(qiáng)大的后臺(tái): 幾行簡(jiǎn)單的代碼就讓你的網(wǎng)站擁有一個(gè)強(qiáng)大的后臺(tái),輕松管理內(nèi)容!
  • 優(yōu)雅的網(wǎng)址: 用正則匹配網(wǎng)址,傳遞到對(duì)應(yīng)函數(shù),隨意定義,如你所想!
  • 模板系統(tǒng): 強(qiáng)大,易擴(kuò)展的模板系統(tǒng),設(shè)計(jì)簡(jiǎn)易,代碼,樣式分開設(shè)計(jì),更容易管理。
    (注:前后端分離時(shí),也可以用Django開發(fā)API,完全不用模板系統(tǒng)。)
  • 緩存系統(tǒng),與Memcached, Redis等緩存系統(tǒng)聯(lián)用,更出色的表現(xiàn),更快的加載速度。
  • 國(guó)際化,完全支持多語(yǔ)言應(yīng)用,允許你定義翻譯的字符,輕松翻譯成不同國(guó)家的語(yǔ)言。

三、MVC模式

MVC是一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件中,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯。MVC被獨(dú)特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中。


MVC
- Model(模型)
    應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯部分;
    通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù);
- View(視圖)
    應(yīng)用程序中處理數(shù)據(jù)顯示部分;
    通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的;
- Controller(控制器)
    應(yīng)用程序中處理用戶交互部分;
    通??刂破髫?fù)責(zé)從視圖中讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù);

優(yōu)點(diǎn): 降低各個(gè)功能模塊之間的耦合性,方便變更,更容易重構(gòu)代碼,最大程度上實(shí)現(xiàn)代碼的重用。

四、MTV模式

本質(zhì)上MTV與MVC模式?jīng)]有什么區(qū)別,也是各組件之間為了保持松耦合關(guān)系,只是定義上有些不同。


MTV
- Model(模型)
    負(fù)責(zé)業(yè)務(wù)對(duì)象與數(shù)據(jù)庫(kù)對(duì)象(ORM)
- Template(模板)
    負(fù)責(zé)如何把頁(yè)面展示給用戶
- View(視圖)
    負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)?shù)臅r(shí)候調(diào)用Model和Template

Django還有一個(gè)url分發(fā)器,它的作用是將一個(gè)個(gè)URL的頁(yè)面請(qǐng)求分發(fā)給不同的view處理,view再調(diào)用相應(yīng)的Model和Template。

五、Django環(huán)境搭建

  • Django版本選擇

    Django 1.5.x 支持 Python 2.6.5 Python 2.7, Python 3.2 和 3.3.
    Django 1.6.x 支持 Python 2.6.X, 2.7.X, 3.2.X 和 3.3.X
    Django 1.7.x 支持 Python 2.7, 3.2, 3.3, 和 3.4 (注意:Python 2.6 不支持了)
    Django 1.8.x 支持 Python 2.7, 3.2, 3.3, 3.4 和 3.5.  (長(zhǎng)期支持版本 LTS)
    Django 1.9.x 支持 Python 2.7, 3.4 和 3.5. 不支持 3.3 了
    Django 1.10.x 支持 Python 2.7, 3.4 和 3.5
    Django 1.11.x 支持 Python 2.7, 3.4, 3.5 和 3.6(長(zhǎng)期支持版本 LTS)
    Django 2.0.x 支持 Python 3.4, 3.5 和 3.6 (注意,不再支持 Python 2)
    
  • pip安裝(如果有直接跳過)

    - 下載get-pip.py文件(Linux, Mac OSX, Windows都可用) 
      https://bootstrap.pypa.io/get-pip.py
    - 安裝(在終端中運(yùn)行)
      $ python get-pip.py
    備注:
      當(dāng)Python2.x和Python3.x共存的時(shí)候要區(qū)分是哪個(gè)版本需要安裝;
    

    pip更新(Linux或MacOS): pip install -U pip

    pip更新(Windows): python -m pip install -U pip

  • 安裝Django

    - 安裝
      $ pip install Django==1.11.4
    - 驗(yàn)證是否成功()
      進(jìn)入到python環(huán)境(終端中輸入python)
      >>> import django
      >>> django.get_version()
      '1.11.4'
    

    操作時(shí),請(qǐng)切換到python3的虛擬環(huán)境中!

六、Django項(xiàng)目創(chuàng)建

- 新建Django項(xiàng)目:
    $ django-admin startproject projectName
    
- 目錄層級(jí)說明:
    manage.py 一個(gè)命令行工具,可以使我們多種方式對(duì)Django項(xiàng)目進(jìn)行交互
    projectName/__init__.py 一個(gè)空文件,告訴python這個(gè)目錄被看做一個(gè)python包(有這個(gè)能稱之為包)
    projectName/settings.py 項(xiàng)目的配置文件
    projectName/urls.py  項(xiàng)目URL聲明(路由器)
    projectName/wsgi.py    項(xiàng)目與WSGI兼容的Web服務(wù)器入口(網(wǎng)關(guān)接口,通常用在現(xiàn)線上環(huán)境部署)
    
- 項(xiàng)目的運(yùn)行:
    $ python manage.py runserver 
    $ python manage.py runserver 0.0.0.0:8000
    $ python manage.py runserver 0:8000  # 0.0.0.0簡(jiǎn)寫方式
    
- settings.py項(xiàng)目配置文件
    BASE_DIR 項(xiàng)目根目錄
    SECRET_KEY 秘鑰
    DEBUG 調(diào)試的開啟
    ALLOWED_HOSTS 允許訪問的主機(jī)
    INSTALLED_APPS 安裝的應(yīng)用
    MIDDLEWARE 中間件
    ROOT_URLCONF 站點(diǎn)url配置
    TEMPLATES 模板
    WSGI_APPLICATION wsig應(yīng)用
    DATABASES 數(shù)據(jù)庫(kù)
    AUTH_PASSWORD_VALIDATORS 密碼驗(yàn)證規(guī)則
    LANGUAGE_CODE 語(yǔ)言(中文: zh-hans)
    TIME_ZONE 時(shí)區(qū) (中國(guó)時(shí)區(qū): Asia/Shanghai)

- 站點(diǎn)管理的漢化版(在settings.py中替換以下內(nèi)容即可)
    LANGUAGE_CODE = 'en-us' 替換 LANGUAGE_CODE = 'zh-Hans'
    TIME_ZONE = 'UTC' 替換 TIME_ZONE = 'Asia/Shanghai'

備注: Linux或Mac下,直接在終端中操作;而在Windows中在cmd中操作(開始 -> 搜索cmd)

Linux中輸入tree可以看到具體的目錄結(jié)構(gòu)(樹狀)

七、創(chuàng)建應(yīng)用

要先進(jìn)入項(xiàng)目目錄下,cd projectName 然后執(zhí)行下面的命令:

$ python3 manage.py startapp appName

項(xiàng)目文件說明: 
  admin.py 站點(diǎn)配置
  models.py 模型
  views.py 視圖

其實(shí)一個(gè)項(xiàng)目中可以創(chuàng)建多個(gè)應(yīng)用;
sqlite是輕量級(jí)小型數(shù)據(jù)庫(kù)(嵌入級(jí)數(shù)據(jù)庫(kù)),在Django中默認(rèn)使用的就是sqlite【一般在手機(jī)APP中都會(huì)使用到這個(gè)sqlite】

八、激活應(yīng)用

settings.py文件中,將appName應(yīng)用加入到INSTALL_APPS選項(xiàng)中.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'appName'   # 添加自己的應(yīng)用
]

請(qǐng)求流程: 用戶請(qǐng)求 -> urls -> views -> templates -> 用戶響應(yīng) 【從后往前寫】

九、視圖

- 方式一
def hello(request):
    return HttpResponse('hello')

- 方式二
def hello(request):
    # hello.html模板
    return render(request, 'hello.html')

十、啟動(dòng)服務(wù)器

語(yǔ)法:
    python manage.py runserver ip:port
例如:
    python manage.py runserver
備注:
    IP可以不寫,代表即是本機(jī)IP
    端口號(hào)默認(rèn)是8000
    啟動(dòng)成功后,在瀏覽器可以看到”It worked!”
說明:
    這是一個(gè)純python寫的輕量級(jí)web服務(wù)器,僅僅在開發(fā)測(cè)試階段中使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,115評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,234評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,621評(píng)論 1 326
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,822評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,380評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,128評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,319評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,548評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評(píng)論 1 291
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,048評(píng)論 3 397
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,285評(píng)論 2 376

推薦閱讀更多精彩內(nèi)容