Django的簡介安裝與配置及兩大設計模式

一.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設計模式的請求與響應過程

  1. 用戶通過瀏覽器向服務器發起 request 請求,Controller 接受請求后,同時向 Model 和 View 發送指令

  2. Mole 根據指令與數據庫交互并選擇相應業務數據,然后將數據發送給 Controller

  3. View 接收到 Controller 的指令后,加載用戶請求的頁面,并將此頁面發送給 Controller

  4. Controller 接收到 Model 和 View 的數據后,將它們組織成響應格式發送給瀏覽器,瀏覽器通過解析后把頁面展示出來

MVC 的 3 層之間緊密相連,但又相互獨立,每一層的修改都不會影響其它層,每一層都提供了各自獨立的接口供其它層調用,MVC 的設計模式降低了代碼之間的耦合性(即關聯性),增加了模塊的可重用性,這就是 MVC 的設計模式。

2.?MTV設計模式

2.1 簡介

  • Model:數據存儲層,處理所有數據相關的業務,和數據庫進行交互,并提供數據的增刪改查

  • Template:模板層(也叫表現層)具體來處理頁面的顯示

  • View:業務邏輯層,處理具體的業務邏輯,它的作用是連通Model 層和 Template

示意圖:

2.2 MTV設計模式的請求與響應過程

  1. 用戶通過瀏覽器對服務器發起 request 請求,服務器接收請求后,通過 View 的業務邏輯層進行分析,同時向 Model 層和 Template 層發送指令;

  2. Mole 層與數據庫進行交互,將數據返回給 View 層;

  3. Template 層接收到指令后,調用相應的模板,并返回給 View 層;

  4. 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 項目的配置文件, 它們在創建項目的時候自動生成。下面我們對上述涉及到的文件進行詳細的說明:

  1. manage.py文件

    一級子目錄中的 manage.py 文件是管理 Django 項目的重要命令行工具,它主要用于啟動項目、創建應用和完成數據庫的遷移等。

  2. __init__.py文件

    二級子目錄中的 __init__.py 文件用于標識當前所在的目錄是一個 Python 包,如果在此文件中,通過 import 導入其他方法或者包會被 Django 自動識別。

  3. settings.py文件

    settings.py 文件是 Django 項目的重要配置文件。項目啟動時,settings.py 配置文件會被自動調用,而它定義的一些全局為 Django 運行提供參數,在此配置文件中也可以自定義一些變量,用于全局作用域的數據傳遞。

  4. urls.py文件

    url.py 文件用于記錄 Django 項目的 URL 映射關系,它屬于項目的基礎路由配置文件,路由系統就是在這個文件中完成相應配置的,項目中的動態路徑必須先經過該文件匹配,才能實現 Web 站點上資源的訪問功能。

  5. 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40615.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40615.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40615.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

javaScript:一分鐘看懂數組排序以及冒泡排序(重點)

目錄 一.前言 二.數組排序 sort() 字符串大小的比較原則 字符編碼排序規則 如果使用sort從小到大排列 (重點) 函數的返回值 規則: 代碼 案例 數組打亂 sort相關代碼 三.冒泡排序(重點&#xff…

【RocketMQ】NameServer總結

NameServer是一個注冊中心,提供服務注冊和服務發現的功能。NameServer可以集群部署,集群中每個節點都是對等的關系(沒有像ZooKeeper那樣在集群中選舉出一個Master節點),節點之間互不通信。 服務注冊 Broker啟動的時候會…

【通俗易懂】如何使用GitHub上傳文件,如何用git在github上傳文件

目錄 創建 GitHub 倉庫 使用 Git 進行操作 步驟 1:初始化本地倉庫 步驟 2:切換默認分支 步驟 3:連接到遠程倉庫 步驟 4:獲取遠程更改 步驟 5:添加文件到暫存區 步驟 6:提交更改 步驟 7&#xff1a…

Chrome 手動代理設置 HTTP/Socks5

1、安裝代理插件:SwitchyOmega 在線安裝 從 Chrome 應用商店 安裝,如果您無法從該鏈接安裝,請使用下面的離線安裝。 離線安裝 ①、去 Github 下載 最新版安裝包 ,或者直接 本地下載 文件進行安裝。 ②、下載安裝文件后&#xf…

[Vue warn]: Error in render: “SyntaxError: “undefined“ is not valid JSON“

[Vue warn]: Error in render: “SyntaxError: “undefined” is not valid JSON” 這說明出現了undefined這個變量類型,比如JSON.parse()時候會出現,可以先嘗試打印JSON.parse()括號中的內容是否是undefined,如果是,那問題的根源…

RenderDoc 導出Cubemap到UE

找到使用了Cubemap的模型,再Output里會顯示該模型使用的所有貼圖 ,選中Cubemap導出 選擇導出格式為HDR 導出的Cubemap是豎著的,需要再PS里逆時針旋轉90度 還有,導出的的Cubemap方向是錯的,需要把3,4 跟1,2 對換,6旋轉180度 UE 文檔里的方向參…

Spring Boot @Validated 驗證注解的使用

1、引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 2、使用 2.1、非對象參數 參數如果是非對象格式&#xff0c;需要在controller類上面添…

JVM——HotSpot的算法細節實現

一、根節點枚舉 固定可作為GC Roots的節點主要在全局性的引用&#xff08;如常量或類靜態屬性&#xff09;與執行上下文&#xff08;如棧幀中的本地變量表&#xff09;中&#xff0c;盡管目標明確&#xff0c;但查找要做到高效很難。現在java應用越來越龐大&#xff0c;光方法區…

Code interpreter生成無聊的APP:病理圖像切割和提取

一、寫在前面 機器學習100步不夠分配了&#xff0c;所以開個新專欄&#xff0c;就叫做《Code interpreter生成無聊的APP》&#xff0c;旨在探索GPT-4官方插件Code interpreter的使用心路歷程。 主要靈感來源&#xff1a;聽戶主說&#xff0c;她們在做病理組學圖像標注和分割的…

如何用Apipost實現sign簽名?

我們平常對外的接口都會用到sign簽名&#xff0c;對不同的用戶提供不同的apikey ,這樣可以提高接口請求的安全性&#xff0c;避免被人抓包后亂請求。 如何用Apipost實現sign簽名&#xff1f; 可以在Apipost中通過預執行腳本調用內置的JS庫去實現預執行腳本是在發送請求之前自…

Wordcloud | 風中有朵雨做的‘詞云‘哦!~

1寫在前面 今天可算把key搞好了&#xff0c;不得不說&#x1f3e5;里手握生殺大權的人&#xff0c;都在自己的能力范圍內盡可能的難為你。&#x1f602; 我等小大夫也是很無奈&#xff0c;畢竟奔波霸、霸波奔是要去抓唐僧的。 &#x1f910; 好吧&#xff0c;今天是詞云&#x…

【C++精華鋪】8.C++模板初階

目錄 1. 泛型編程 2. 函數模板 2.1 函數模板的概念及格式 2.2 函數模板的原理 2.3 模板的實例化 2.4 模板參數的匹配原則 3. 類模板 3.1 類模板格式 3.2 類模板的實例化 1. 泛型編程 什么是泛型編程&#xff1f;泛型編程是避免使用某種具體類型而去使用某種通用類型來進行…

mysql中INSERT INTO ... ON DUPLICATE KEY UPDATE的用法,以及與REPLACE INTO 語句用法的異同

INSERT INTO ... ON DUPLICATE KEY UPDATE 是 MySQL 中一種用于插入數據并處理重復鍵沖突的語法。與之相似的還有 REPLACE INTO 語句。以下是它們的用法和異同點的詳細說明&#xff1a; 一、INSERT INTO ... ON DUPLICATE KEY UPDATE INSERT INTO ... ON DUPLICATE KEY UPDAT…

NET域名的優勢

NET域名是互聯網上最常見的頂級域名之一&#xff0c;其開放使用日期遠比其他主要頂級域名早&#xff0c;始于1985年。其作為商業網絡服務提供者的域名&#xff0c;主要用于企業、組織和個人等在網絡上建立自己的網站。本文將從以下三個方面介紹NET域名。 一、NET域名的歷史 N…

帶你了解—使用內網穿透,公網遠程訪問本地硬盤文件

文章目錄 前言1. 下載cpolar和Everything軟件3. 設定http服務器端口4. 進入cpolar的設置5. 生成公網連到本地內網穿透數據隧道 總結 前言 隨著云概念的流行&#xff0c;不少企業采用云存儲技術來保存辦公文件&#xff0c;同時&#xff0c;很多個人用戶也感受到云存儲帶來的便利…

如何使用Java代碼收集網站所有功能

使用Java代碼收集網站所有功能的步驟可以這么實現: 1. 使用JSoup等工具解析網站首頁HTML,獲取超鏈接、表單等元素。 Document doc JSoup.connect("http://website.com").get(); Elements links doc.select("a[href]"); Elements forms doc.select(&qu…

學習ts(四)聯合類型、交叉類型、類型斷言

聯合類型 使用聯合類型定義屬性和方法&#xff0c;只要符合其中一種即可 let myPhone: string | number 010-7788 // let myPhone1: string | number true 因為沒有包含boolean值 會報錯const fn (something: number | boolean): boolean > {return !!something }con…

【CSS動畫01--登錄】

CSS動畫01--登錄 介紹代碼HTMLCSSJS 介紹 當鼠標不同方向的劃過時展示不同效果的登錄&#xff0c;以上是一個簡單的圖片展示 代碼 HTML <!DOCTYPE html> <html> <head><meta http-equiv"content-type" content"text/html; charsetutf-8&…

生物筆記——暑期學習筆記(四)

生物筆記——暑期學習筆記&#xff08;四&#xff09; 文章目錄 前言一、R篇1. unname()2. duplicated()3. 數據提取4. 分組 二、生信篇1. 文本處理常用命令2. 命令輸出1. 重定向2. 多命令執行 3. 文本工具4. 本地hmm鑒定1. hmmer軟件安裝2. 文件準備3. 基于hmm的鑒定 總結 前言…

【制作npm包5】npm包制作完整教程,我的第一個npm包

制作npm包目錄 本文是系列文章&#xff0c; 作者一個橙子pro&#xff0c;本系列文章大綱如下。轉載或者商業修改必須注明文章出處 一、申請npm賬號、個人包和組織包區別 二、了解 package.json 相關配置 三、 了解 tsconfig.json 相關配置 四、 api-extractor 學習 五、npm包…