一.Djang的介紹
1.Django是什么
Django 是使用 Python 語言開發的一款免費而且開源的 Web 應用框架。
由于 Python 語言的跨平臺性,所以 Django 同樣支持 Windows、Linux 和 Mac 系統。
在 Python 語言熾手可熱的當下,Django 也迅速的崛起,在 Web 開發領域占有一席之地。
基于 Python 開發的框架除了 Django 外,還有可以實現快速建站 Flask 和支持高并發處理的 Tornado ,而 Django 是最有代表性的一位,它們三者是當前最流行的 Python Web 框架。
2.Django的由來
Django 最初是被開發用來管理勞倫斯集團旗下一些以新聞內容為主的網站。
2003 年,Lawerence Journal-World 報社的 Web 開發者艾德里安和威利森開始用 Python 語言去開發應用。新聞界的快節奏使他們必須提高產品的開發速度,于是他們兩個人想辦法構建出了節省開發時間的框架,這個框架將能復用的組件或者模塊放在一起,使開發者不必重復的工作,這是 Django 誕生的根本原因。
后來他們所在的開發小組決定將這個框架發布成一個開源軟件。經過發展和時間的積累,Django 有了數以萬計用戶和貢獻者,現在 Django 成為了 Web 開發者中最流行的框架。
總之,Python 的誕生是為了減少重復性工作,節省開發者時間,讓開發者把精力投入到關鍵的開發環節中。
下圖是Django的標志:
通過上面的介紹,可以給出 Web 框架的概念:
它是一套組件,提供通用的設計模式,能夠最大程度地降低開發 Web 站點開發的難度,Django 的設計目標就是使復雜的工作變得簡單。
3.Django的命名
Django 命名由來官方網站只給出了一句話:
To this day, he's considered one of the best guitarists of all time, Listen to his music. You'll like it.Django 是以一個名叫 Django Reinhardt 吉他手的的名字來命名的。因為程序員的世界不能缺少音樂,開發者在他的音樂中得到靈感,為了感謝紀念這位吉他手,所以 Django 的名字也由此誕生!
Django 的發音也非常有趣,大寫字母 D 不發音,正確的發音是“棧go”,作為程序員不要讀錯哦。
4.Django的特點
相對于 Python 的其他 Web 框架,Django 的功能是最完整的,Django 定義了服務發布、路由映射、模板編程、數據處理的一整套功能。
Django的主要特點如下:
完善的文檔:經過多年的發展和完善,Django 官方提供了完善的在線文檔,為開發者解決問題提供支持。
集成 ORM 組件:Django 的 Model 層自帶數據庫 ORM 組件,為操作不同類型的數據庫提供了統一的方式。
URL 映射技術:Django 使用正則表達式管理URL映射,因此給開發者帶來了極高的靈活性。
后臺管理系統:開發者只需通過簡單的幾行配置和代碼就可以實現完整的后臺數據管理Web控制臺。
錯誤信息提示:在開發調試過程中如果出現異常,Django 可以提供完整的錯誤信息幫助開發者定位問題。 ?
5.Django的設計模式--MTV
二.兩大設計模式
1.MVC設計模式
1.1簡介
MVC 是 Model-View-Controller 的縮寫,其中每個單詞都有其不同的含義:
Modle 代表數據存儲層,是對數據表的定義和數據的增刪改查;
View 代表視圖層,是系統前端顯示部分,它負責顯示什么和如何進行顯示;
Controller 代表控制層,負責根據從 View 層輸入的指令來檢索 Model 層的數據,并在該層編寫代碼產生結果并輸出。
示意圖:
1.2 MVC設計模式的請求與響應過程
MVC 的 3 層之間緊密相連,但又相互獨立,每一層的修改都不會影響其它層,每一層都提供了各自獨立的接口供其它層調用,MVC 的設計模式降低了代碼之間的耦合性(即關聯性),增加了模塊的可重用性,這就是 MVC 的設計模式。
用戶通過瀏覽器向服務器發起 request 請求,Controller 接受請求后,同時向 Model 和 View 發送指令
Mole 根據指令與數據庫交互并選擇相應業務數據,然后將數據發送給 Controller
View 接收到 Controller 的指令后,加載用戶請求的頁面,并將此頁面發送給 Controller
Controller 接收到 Model 和 View 的數據后,將它們組織成響應格式發送給瀏覽器,瀏覽器通過解析后把頁面展示出來
2.?MTV設計模式
2.1 簡介
Model:數據存儲層,處理所有數據相關的業務,和數據庫進行交互,并提供數據的增刪改查
Template:模板層(也叫表現層)具體來處理頁面的顯示
View:業務邏輯層,處理具體的業務邏輯,它的作用是連通Model 層和 Template
示意圖:
2.2 MTV設計模式的請求與響應過程
用戶通過瀏覽器對服務器發起 request 請求,服務器接收請求后,通過 View 的業務邏輯層進行分析,同時向 Model 層和 Template 層發送指令;
Mole 層與數據庫進行交互,將數據返回給 View 層;
Template 層接收到指令后,調用相應的模板,并返回給 View 層;
View 層接收到模板與數據后,首先對模板進行渲染(即將相應的數據賦值給模板),然后組織成響應格式返回給瀏覽器,瀏覽器進行解析后并最終呈現給用戶。
3.兩大設計模式的區別
1. 我們按照 MVC 的設計模式對 MTV 進行分析,MTV 設計模式中,用 View 層取代了 Controller 層的位置,用 Template 層取代了原來 View 層的位置。
2.通過以上兩種設計模式的比較, 我們可以得出 MTV 是 MVC 的一種細化,將原來 MVC 中的 V 層拿出來進行分離,視圖的顯示與如何顯示交給 Template 層,而 View 層更專注于實現業務邏輯。其實在 Django 是有 Controller 層的,只不過它由框架本身來實現,所以我們不用關心它。Django 更關注于M、T 和 V。
?三.Django的安裝與配置
1.cmd命令安裝(指定版本)
pip install django==3.2
換源安裝
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django==3.2
2.檢查是否安裝成功
win+r輸入cmd打開命令控制行,輸入python,進入Python交互器,再輸入以下代碼,出現Django版本號說明安裝成功
import django django.get_version()
?注:這里如果輸入Python顯示:“不是內部或外部命令,也不是可運行的程序
或批處理文件" ,說明你的Python沒有配置環境變量,需要先去配置環境變量,當然也可以選擇不配置環境變量,可以直接從你的Python安裝目錄去啟動cmd命令,然后再輸入上面的代碼查看Django是否安裝成功
3.Django項目配置文件
二級子目錄 BookStore 下的文件稱為 Django 項目的配置文件, 它們在創建項目的時候自動生成。下面我們對上述涉及到的文件進行詳細的說明:
manage.py
文件一級子目錄中的 manage.py 文件是管理 Django 項目的重要命令行工具,它主要用于啟動項目、創建應用和完成數據庫的遷移等。
__init__.py
文件二級子目錄中的
__init__.py
文件用于標識當前所在的目錄是一個 Python 包,如果在此文件中,通過 import 導入其他方法或者包會被 Django 自動識別。
settings.py
文件settings.py 文件是 Django 項目的重要配置文件。項目啟動時,settings.py 配置文件會被自動調用,而它定義的一些全局為 Django 運行提供參數,在此配置文件中也可以自定義一些變量,用于全局作用域的數據傳遞。
urls.py
文件url.py 文件用于記錄 Django 項目的 URL 映射關系,它屬于項目的基礎路由配置文件,路由系統就是在這個文件中完成相應配置的,項目中的動態路徑必須先經過該文件匹配,才能實現 Web 站點上資源的訪問功能。
wsgi.py
文件wsgi.py 是 WSGI(Web Server Gateway Interface)服務器程序的入口文件,主要用于啟動應用程序。它遵守 WSGI 協議并負責網絡通訊部分的實現,只有在項目部署的時候才會用到它。
?1.Django項目的啟動
1.1.在Pycharm中的Terminal中輸入
python manage.py runserver
1.2 啟動成功界面
?
2.Settings文件的介紹及配置
2.1 介紹
BASE_DIR
它用于綁定當前項目 BookStore 所在的絕對路徑,項目中的所有的文件都需要依賴此路徑,綁定路徑的方法如下:
BASE_DIR = Path(__file__).resolve().parent.parent
__file__
是python的語法,顯示當前文件的位置。SECRET_KEY
這個變量的本質是一個加密的,它一般配合加密算法 Hash、MD5 一起使用。例如用戶密碼的加密或者建立會話時用到的 sessionid 都需要用到 SECRET_KEY 。在實際的開發工作中,一般將它保存在系統的環境變量中以確保加密鹽的安全。
DEBUG
用于配置 Django 項目的啟用模式,有兩種取值方式:
DEBUG = True用于在開發環境中使用,屬于調試模式,在項目的運行過程中會暴露一些錯誤信息以方便調試。
DEBUG = False用于線上環境,表示不啟用調試模式。
INSTALLED_APPS
這個參數是指當前項目中用來安裝的應用(APP)的列表,Django 把默認自帶的應用放在這個列表里,比如 Admin 后臺應用、Auth 用戶管理系統等。
我們可以根據自己的項目需求對其進行增加或刪除,比如公司要單獨開發一個后臺管理系統,就可以把第一項 admin 注釋掉。開發時自己編寫的應用都必須在這個變量表中進行注冊才能生效。所以這個列表需要經常的改動。
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles', ]MIDDLEWARE
它用于注冊中間件,Django 默認加載了一些中間件。例如,用于處理會話的 SessionMiddleware 等,同樣我們可以對這些中間件進行添加或者注釋。
ROOT_URLCONF
ROOT_URLCONF = 'Bookstore.urls'它指定了當前項目的根 URL,是 Django 路由系統的入口。
TEMPLATES
它用于指定模板的配置信息,列表中每一元素都是一個字典。
WSGI_APPLICATION
項目部署時,Django 的內置服務器將使用的 WSGI 應用程序對象的完整 Python 路徑。
DATABASES
它用于指定數據庫配置信息,這里默認配置的是 Django 自帶的 sqllite3 數據庫。Django 支持多種數據庫,在這個字典變量中更改數據庫配置。在后續章節我們將對 Mysql 數據庫配置進行講解。
AUTH_PASSWORD_VALIDATORS
這是一個支持插拔的密碼驗證器,且可以一次性配置多個,Django 通過這些內置組件來避免用戶設置的密碼等級不足的問題。
LANGUAGE_CODE和TIME_ZONE
分別代表語言配置項和當前服務端時區的配置項,我們常用的配置如下所示:
LANGUAGE_CODE 取值是英文:'en-us'或者中文:'zh-Hans';
TIME_ZONE 取值是世界時區 'UTC' 或中國時區 'Asia/Shanghai'。
USE_I18N和USE_L10N
項目開發完成后,可以選擇向不同國家的用戶提供服務,那么就需要支持國際化和本地化。USE_I18N 和 USE_L10N 這兩個變量值表示是否需要開啟國際化和本地化功能。默認開啟的狀態。
提示:
USE_I18N = True 與 USE_L10N = True 其的 I18N 指的是國際化英文縮寫,L10N 指的是本地化英文縮寫。
USE_TZ = TRUE
它指對時區的處理方式,當設置為 True 的時候,存儲到數據庫的時間是世界時間 'UTC'。
STATIC_URL = '/static/'
它指的是靜態資源的存放位置,靜態資源包括 CSS、JS、Images。比如我們要在項目中添加一些圖片,通常這些靜態圖片被存放在新建的 static 目錄下,這樣就實現了通過 STATIC_URL= '/static/' 路徑對靜態資源的訪問。
2.2.Settings文件的基本配置
(1) 修改語言與時區
在項目中設置語言、時區是必不可少的。
打開 settings.py 文件,在文件的末尾部分找到相應的變量進行配置,如下所示:
# 設置為中文模式
LANGUAGE_CODE = 'zh-Hans'
?
TIME_ZONE = 'Asia/Shanghai'
(2) 設置時區不敏感
當 USE_TZ 設置為 False 時,表示對時區不敏感,并且讓數據庫時間符合本地時區。
(3) 配置項目所需數據庫
在 Django 項目中配置數據庫是必不可少的,我們使用 MySQL 作為項目的數據庫。
如果我們在Django中要連接mysql數據庫,需要安裝一個庫(mysqlclient)
?Django 默認配置的 sqlite3 數據庫:
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}
在配置 MySQL 數據庫之前,先進入 MySQL 命令行界面為項目建庫,使用如下命令:
CREATE DATABASE bookstoredb;
然后在 settings.py 文件中配置 MySQL 數據庫,如下所示:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'bookstoredb','USER': 'root','PASSWORD': '123456','HOST': '127.0.0.1','PORT': '3306',}
}
注意:配置是根據自己的數據庫的密碼來,不要copy上述代碼。
下面我們對上述DATABASES中的字典元素進行介紹:
ENGINE:指定使用的數據庫引擎
NAME:指定項目所用的數據庫名字
USER:是 MySQL 用戶名
PASSWORD:指的是數據庫的密碼
HOST:數據庫服務器地址,這里是本地環境開發,所以使用本地回送地址 127.0.0.1
PORT:MySQL 數據庫的端口號,默認端口是 3306