什么是框架
框架就是已經(jīng)開發(fā)好部分功能代碼顶伞,并封裝起來之后提供給開發(fā)人員進(jìn)行快速項(xiàng)目搭建和開發(fā)的一種項(xiàng)目憾儒。
為什么使用框架
由于不同的項(xiàng)目開發(fā)流程大同小異碰声,所以當(dāng)開發(fā)人員耍共,進(jìn)行了大量的重復(fù)工作之后烫饼,開始著手于代碼自動生成和項(xiàng)目搭建功能的處理,將代碼自動生成并就特定的項(xiàng)目功能直接開發(fā)出來试读,封裝成一個(gè)特定的模塊并發(fā)布杠纵,方便其他開發(fā)人員快速高效率的開發(fā)項(xiàng)目打下基礎(chǔ),所以各種框架根據(jù)不同的項(xiàng)目需要非常流行钩骇;一句話:提高效率降低成本比藻。
模塊和框架的區(qū)別
模塊:一堆函數(shù)的集合
框架:一堆模塊的集合,提供了基本的特定的復(fù)雜功能和處理流程的實(shí)現(xiàn)
Django的優(yōu)勢
在python中倘屹,目前主流的web框架很多银亲,如下面這些:
web.py:輕量級的開源web框架,簡單而且功能強(qiáng)大
Flask:python編寫的輕量級web開發(fā)框架
Django:python編寫的一個(gè)開源的web應(yīng)用框架
Tornado:一個(gè)web服務(wù)器也是一個(gè)web框架
當(dāng)然除此之外唐瀑,還有一些非主流的web框架...,那么這么多的web框架插爹,我們?yōu)槭裁匆欢ㄒ獙W(xué)習(xí)Django呢哄辣?
Django是一個(gè)功能十分強(qiáng)大的web開發(fā)框架请梢,它為我們提供了豐富的各種我們開發(fā)時(shí)需要用到的功能,如:
強(qiáng)大的MVT項(xiàng)目開發(fā)架構(gòu)
完善的模板視圖的支持
準(zhǔn)確的路由地址映射
高效的ORM數(shù)據(jù)操作
完善的后臺管理系統(tǒng)
優(yōu)秀的表單處理功能
Django的歷史由來
Django 剛開始是勞倫斯出版集團(tuán)下屬一家處理新聞信息的子公司進(jìn)行開發(fā)搭建的力穗,專 門用于進(jìn)行新聞網(wǎng)站的開發(fā)而使用的一個(gè) CMS(內(nèi)容管理系統(tǒng))毅弧,由于功能十分受開發(fā)者喜 歡,所以于 2005 年 7 月開源并得到 IT 界非常友好而熱情的接納当窗,在廣大 IT 技術(shù)人員經(jīng) 過大量的完善和擴(kuò)展之后够坐,于 2008 年 9 月發(fā)布了第一個(gè)正式版本。
Django 框架的核心組件有:
用于創(chuàng)建模型的對象關(guān)系映射
為最終用戶設(shè)計(jì)的完美管理界面
一流的URL設(shè)計(jì)
設(shè)計(jì)者友好的模塊語言
緩存系統(tǒng)
Django的架構(gòu)模式
MVC 軟件架構(gòu): 軟件是用來進(jìn)行數(shù)據(jù)處理的崖面,數(shù)據(jù)我們用 Model 來表示元咙,根據(jù)軟件的三層結(jié)構(gòu)模型, 視圖部分通過 View 進(jìn)行表示巫员,在視圖 View 中庶香,我們可以和用戶進(jìn)行數(shù)據(jù)交互,交互的數(shù) 據(jù)被提交到服務(wù)器简识,服務(wù)器根據(jù)用戶提交的數(shù)據(jù)赶掖,經(jīng)過控制器 Controller 進(jìn)行判斷并移交給 合適的函數(shù)進(jìn)行處理的過程,稱為 MVC 處理模式七扰。如下圖所示:
MVT 軟件架構(gòu): Django 在處理的過程中奢赂,對于經(jīng)典的 MVC 處理模式并不是非常認(rèn)同,在實(shí)際項(xiàng)目開 發(fā)過 程中控制器 Controller 起到的作用非常的有限颈走,所以 Django 將控制器部分也進(jìn)行了 封裝膳灶,但是同時(shí)擴(kuò)展了視圖 View 部分,增加了模板功能實(shí)現(xiàn)了前端網(wǎng)頁的復(fù)用疫鹊,所以 Django 的架構(gòu)模式更加符合 MVT 處理模式袖瞻。如下圖所示:
Django快速入門
Django的下載安裝
Django的版本
目前 Django 大的版本有兩個(gè)分支:
? 1.x 版 穩(wěn)定成熟的版本,目前企業(yè)都使用的這個(gè)大版本
? 2.x 版 18 年剛剛出現(xiàn)拆吆,目前不夠穩(wěn)定聋迎,建議可以簡單的學(xué)習(xí)學(xué)習(xí)
一般來說,選擇長期支持版本比較好枣耀。
pip install django==1.8
pip install django==1.11
pip install django 霉晕,默認(rèn)下載最新版本
Django的下載
使用pip命令下載Django:
pip install django==版本號
sudo pip install django==版本號
檢查是否下載安裝成功:
django-admin --version
如若成功,會返回安裝的版本號
第一個(gè)Django項(xiàng)目
首先cmd到命令行窗口
cd 到工作空間
執(zhí)行 django-admin startproject 項(xiàng)目名稱
該命令就會創(chuàng)建一個(gè)Django項(xiàng)目
django創(chuàng)建成功后捞奕,項(xiàng)目結(jié)構(gòu)如下:
|-- mysite # 表示項(xiàng)目名稱
|-- mysite # 根模塊牺堰,根模塊跟項(xiàng)目名稱保持一致
|-- __init__.py # 模塊描述文件
|-- settings.py # 項(xiàng)目的配置文件
|-- urls.py # 根路由模塊
|-- wsgi.py # django實(shí)現(xiàn)wsgi,目前使用不到
|-- manage.py # 該文件是項(xiàng)目的命令文件颅围,不需要我們修改
現(xiàn)在項(xiàng)目我們已經(jīng)創(chuàng)建完成伟葫,下面來運(yùn)行項(xiàng)目:
cd mysite
python manage.py runserver
如果出現(xiàn)如下界面,則表示項(xiàng)目成功:
1斧抱、 默認(rèn) Django 項(xiàng)目占據(jù) 8000 端口,如果我們需要修改渐溶,則在命令后直接加上端口號:
python manage.py runserver 9999
2辉浦、 指定特定的 ip 和端口完成訪問
python manage.py runserver 192.168.10.145:9000
瀏覽器訪問,則發(fā)現(xiàn)報(bào)錯:
這個(gè)則因?yàn)?Django 項(xiàng)目如果需要使用特定的 ip 地址訪問茎辐,則需要在 setting.py 配置文件中的 ALLOWED_HOSTS 配置中加入對應(yīng)的 ip 地址宪郊。
ALLOWED_HOST = ["192.168.13.45"]
重啟啟動項(xiàng)目,就會發(fā)現(xiàn)報(bào)錯消失。
3拖陆、 第二種方法弛槐,雖然好用,但是我們發(fā)現(xiàn)這樣做慕蔚,只能讓配置到 ALLOWED_HOSTS 中的 ip 地址可以訪問我們的項(xiàng)目丐黄,如果我們想要所有人都訪問呢? 可以在 ALLOWED_HOSTS 中配置為*孔飒,匹配任意 ip 地址灌闺。 之后啟動項(xiàng)目使用命令如下:
python manage.py runserver 0.0.0.0:9000 使用 0 匹配任意 ip 地址
4、Django 在 1.9 之后開始支持中文坏瞄,修改 setting.py 中的 LANGUAGE_CODE 為 zh-Hans
LANGUAGE CODE = 'zh-Hans'
再次啟動項(xiàng)目桂对,就會發(fā)現(xiàn)英文變成中文了。
創(chuàng)建一個(gè)根模塊視圖
Django提供了完善的模塊劃分功能鸠匀,所以我們很少在根項(xiàng)目下創(chuàng)建視圖蕉斜,但是我們剛剛開始,開始先在根項(xiàng)目下創(chuàng)建視圖來學(xué)習(xí)一下缀棍。
首先進(jìn)入到根項(xiàng)目下宅此,創(chuàng)建一個(gè)views.py文件。
views.py:
from django.http import HttpResponse
def index(request):
return HttpResponse("<h1>hello Django爬范,I coming</h1>")
完成視圖函數(shù)的編寫后父腕,需要在路由配置文件中配置路由
urls.py:
from django.conf.urls import url
from django.contrib import admin
# 導(dǎo)入視圖文件
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 配置路由信息,當(dāng)用戶訪問 index 路徑時(shí)青瀑,則表示有 views.index 函數(shù)類處理
url(r"^index/",views.index,name="index"),
]
啟動項(xiàng)目璧亮,在地址欄輸入:http://192.168.10.145:9000/index/
到此為止,一個(gè)視圖已經(jīng)被我們創(chuàng)建完成斥难,路由匹配也成功了Vλ弧!
創(chuàng)建第一個(gè)模塊應(yīng)用
在真正的企業(yè)開發(fā)中哑诊,實(shí)質(zhì)我們需要分模塊來管理項(xiàng)目的群扶,Django 也提供了完善的模 塊劃分功能,很方便我們模塊開發(fā),下面我們來使用模塊劃分來完成一個(gè)項(xiàng)目案例竞阐。
首先進(jìn)入到項(xiàng)目的主目錄中來提茁,之后執(zhí)行 Django-admin startapp 模塊名稱:
# 進(jìn)入項(xiàng)目文件夾
cd mysite/
# 創(chuàng)建第一個(gè)博客應(yīng)用
django-admin startapp blog
完成后,項(xiàng)目結(jié)構(gòu)如下:
|-- mysite # 項(xiàng)目名稱
|-- mysite # 根模塊
|-- __init__.py # 模塊描述文件
|-- settings.py # 項(xiàng)目的配置
|-- wsgi.py # 實(shí)現(xiàn)了wsgi web網(wǎng)關(guān)接口
|-- blog # 子模塊
|-- migrations # 同步數(shù)據(jù)的遷移文件的文件夾
|-- __init__.py # 模塊描述文件
|-- admin.py # 后臺管理系統(tǒng)用來管理子模塊中的模型類的文件
|-- views.py # 子模塊的視圖文件
|-- urls.py # 需要我們創(chuàng)建馁菜,子模塊的路由文件
|-- models.py # 定義模型類
|-- tests.py # 測試文件
|-- apps.py # 定義子模塊項(xiàng)目項(xiàng)的文件
|-- manage.py # 項(xiàng)目的命令文件
模塊創(chuàng)建完成后,Django 根項(xiàng)目還不知道新增加了一個(gè)模塊铃岔,所以需要我們將新創(chuàng)建 的模塊告訴根項(xiàng)目汪疮,打開根項(xiàng)目模塊下的 setting.py 文件,找到 INSTALLED_APPS 選項(xiàng):
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 告訴根項(xiàng)目毁习,我新增了一個(gè)模塊
'blog',
]
現(xiàn)在智嚷,模塊應(yīng)用創(chuàng)建完畢,并且正常添加到了 Django 項(xiàng)目中了纺且。以后我們開發(fā)項(xiàng)目盏道, 實(shí)在是在不同的模塊上開發(fā),根項(xiàng)目只是作為管理整體項(xiàng)目存在载碌,我們不會再在根項(xiàng)目上創(chuàng) 建視圖和視圖函數(shù)了猜嘱。
創(chuàng)建模塊中第一個(gè)視圖處理函數(shù)
打開 myblog/views.py 視圖處理文件,添加視圖處理函數(shù)如下:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
print("博客首頁")
return HttpResponse("<h1>博客首頁</h1>")
在模塊目錄下創(chuàng)建一個(gè)新的 urls.py 文件嫁艇,用來完成模塊本身的路由配置:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r"^index/$",views.index,name="index"),
]
上面我們是在模塊本身中進(jìn)行的路由配置和視圖對應(yīng)函數(shù)朗伶,等完成這些配置后,我們需 要通知根項(xiàng)目步咪,將我們的配置添加到根項(xiàng)目中去论皆,在根項(xiàng)目的 urls.py 文件中配置,如下:
from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include
# 導(dǎo)入視圖文件
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/',include("blog.urls")),
url(r"^$",views.index,name="index"),
]
至此猾漫,項(xiàng)目配置結(jié)束点晴,啟動項(xiàng)目。
項(xiàng)目運(yùn)行之后悯周,打開瀏覽器粒督,再次訪問 http://localhost:9000,出現(xiàn)項(xiàng)目默認(rèn)頁面
再次訪問 http://localhost:9000/blog/index队橙,出現(xiàn)博客應(yīng)用頁面