介紹
Django是一個開放源代碼的Web應用架構,由Python寫成。采用了MTV的架構模式,即模型M,視圖V和模版T。它最初是被開發來用于管理勞倫斯出版集團旗下的一些以新聞内容為主的網站的,即是CMS(内容管理系統)軟體。
MVC介紹
MVC模式(Model-View-Controller)是軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)
- Model:主要封裝對資料庫層的通路,内嵌ORM架構,實作面向對象的程式設計來操作資料庫。
- View: 用于封裝結果,内嵌了模闆引擎,實作動态展示資料
- Controller: 用于接收使用者請求,處理業務邏輯,與Model和View互動,傳回結果
在MVC模型中,如果不需要查詢資料庫,那麼Controller将不會與Model互動,直接與View互動,傳回html頁面。
MVT介紹
- M(Model),與MVC中的M功能相同,負責資料處理,内嵌了ORM架構
- V(View),與MVC中的C功能相同,接收請求,業務處理,傳回響應
- T(Template),與MVC中的V功能相同,負責封裝構造要傳回的html,内嵌了模闆引擎
安裝Django子產品
pip install django
建立blog項目
django子產品安裝完畢後,django-admin指令就可以使用
采用django-admin startproject建立一個工程項目
django-admin startproject blog .
生成一個名為blog檔案夾及manage.py檔案。用編輯器打開後,呈現如下結構:
簡單介紹下檔案:
- manage.py:是一個指令行工具,是對django-admin.py的簡單包裝,二者的作用基本一緻。django-admin可以對不同的項目進行設定,而manege.py隻能對目前的工程有效。
- blog/__init__.py:一個空檔案,告訴Python該目錄是一個Python包
- blog/setting.py:項目的配置檔案
- bolg/urls.py:URL分發器(路由配置檔案)
- blog/wsgi.py:項目與WSGI相容的Web伺服器入口
- blog/asgi.py:存儲asgi設定的檔案,如果使用ASGI部署django會用到,一般情況下不需要更改
運作項目
python manage.py runserver
浏覽器出現上面類似頁面,說明Django項目建立完成。
建立應用
項目是由多個應用有機組合而成的。項目可以了解成一個系統(部落格系統),應用可以了解成組成系統的子產品,比如登入子產品、使用者子產品、内容子產品、文章子產品等。
# 建立使用者應用
python manage.py startapp user
建立user後出現如上圖檔案:
- db.sqlite3: 文檔型輕量級資料庫,django預設使用sqlite資料庫 user: 應用目錄
- migrations: 儲存資料庫資料遷移時生成的檔案
- __init__.py:一個空檔案,告訴Python該目錄是一個Python包
- admin.py:web背景管理,用于注冊模型類
- apps.py:用于配置應用的基本資訊,如應用的名稱、顯示名稱、圖示、預設路徑、啟動時需要執行的操作等
- models.py:編寫模型類,就是MVT模型中的M tests.py:用于開發測試類 views.py:編寫視圖函數,MVT模型中的V
項目根目錄設定
項目根目錄設定目的是讓編輯器開發中智能正确提醒
編寫視圖函數
MVT架構中,V(View),接收請求,業務處理,傳回響應。視圖函數第一個參數必須是request,request參數封裝了使用者請求的所有内容,名字可以改,行業預設請求參數叫request,響應參數叫response
路由注冊
把視圖函數注冊到路由urls.py檔案中,浏覽器通路url,再通過urls.py檔案找到對應視圖
浏覽器輸入:http://127.0.0.1:8000/user/,就出現如下界面。
MVT,隻編寫了V,再把視圖注冊到路由檔案後,就完成了一個Django請求響應開發。
View-Template使用
使用者打開浏覽器,不僅僅隻看一行文字,還有其它表現,這個時候需要傳回html實體,這個時候就需要借助MVT的T(templates)
建立templates目錄
配置檔案設定
這一步不配置也行,預設就是這個配置
建立html檔案
通過render方法把View和Templates聯系在一起。
重新開機服務後,浏覽器通路可以正常通路
靜态檔案
html頁面要引入圖檔、js、css等靜态檔案
也需要在配置檔案裡添加靜态檔案目錄的配置
配置完畢就可以在html頁面引入靜态檔案了
資料:View-->Template
View和Template已經建立了關系,如何在View處理後的資料交給Template呢?
View中以字典對象傳遞到Template
Template以{{}}形式解析變量,這是模闆語言的文法
html中需要書寫Python邏輯的,則用{% %}文法
{% for item in list %}
{{ item }}
{% endfor %}
資料:Template-->View
<form action="/user/" method="post">
{% csrf_token %}
<input type="text" name="name">
<input type="text" name="age">
<input type="submit" value="送出">
</form>
def user_list(request):
if request.method == 'POST':
print(request.POST.get('name'))
print(request.POST.get('age'))
return render(request, 'user/list.html')
因為有跨站請求保護機制,需要在表單中加入{% csrf_token %},否則報錯。
View-Models使用
資料從Template頁面送出到了View,有需求希望把資料存儲起來,這個時候就涉及到Models層及使用資料庫。Django預設使用資料庫是sqlite3
要把View中的name和age存起來,需要建立資料庫表字段,這裡通過資料遷移的方式。Django資料遷移檔案通過models字段生成。
資料遷移
建立使用者(User)類
生成資料遷移檔案
把需要生成遷移檔案的應用配置進來,否則遷移檔案無法正常生成
python manage.py makemigrations
執行遷移檔案生成指令,會在對應應用下面生成或更新執行檔案
執行下面指令,就可以把遷移檔案内容生成資料庫表或更新資料庫表
python manage.py migrate
資料存取
from django.shortcuts import render
from user import models
def user_list(request):
if request.method == 'POST':
# 存進資料庫
models.User.objects.create(name=request.POST.get('name'), age=request.POST.get('age'))
# 資料庫取出來
user_all = models.User.objects.all()
print(user_all)
return render(request, 'user/list.html')