1.什么是框架?
框架就是程序的骨架,主體結構,也是個半成品。
2.框架的優缺點
可重用、成熟,穩健、易擴展、易維護。
3.Python中常見的框架
(1)大包大攬Django被官方稱之為完美主義者的web框架。它鼓勵快速開發和清潔,務實的設計。它是免費和開源的。Django 2.0 可謂是 Django 的里程碑版本,它於 2017 年 12 月正式發布。它移除了對 Python 的支持,最少需要 3.4 以上版本.
(2)力求精簡web.py 和 Tornado。
(3) 新生代微框架Flask 和 Bottle。
4.MVT
MVC和MVT(T是模板的英文縮寫)
jango 的 MTV 模式本質上和 MVC 是一樣的,也是為了各組件間保持松耦合關系,只是定義上有些許不同,Django 的 MTV 分別是指:
- M 表示模型(Model):編寫程序應有的功能,負責業務對象與數據庫的映射(ORM)。
- T 表示模板 (Template):負責如何把頁面(html)展示給用戶。
- V 表示視圖(View):負責業務邏輯,並在適當時候調用 Model和 Template。
除了以上三層之外,還需要一個 URL 分發器,它的作用是將一個個 URL 的頁面請求分發給不同的 View 處理,View 再調用相應的 Model 和 Template,MTV 的響應模式如下所示:
簡易圖:
用戶操作流程圖:
解析:
用戶通過瀏覽器向我們的服務器發起一個請求(request),這個請求會去訪問視圖函數:
- a.如果不涉及到數據調用,那么這個時候視圖函數直接返回一個模板也就是一個網頁給用戶。
- b.如果涉及到數據調用,那么視圖函數調用模型,模型去數據庫查找數據,然后逐級返回。
視圖函數把返回的數據填充到模板中空格中,最后返回網頁給用戶。
5.Djiago框架特點
(1)快速開發:Django的宗旨在於幫助開發人員快速從概念到完成應用程序;
(2)安全可靠:Django認值對待安全性,幫助開發人員避免許多常見的安全錯誤;
(3)超可伸縮性:web上的一些最繁忙的網站利用了Django快速靈活擴展的能力。
6.Django安裝
(1)建議使用使用pip命令安裝
pip install django
可以通過==XXX指定版本
(2)檢測當前是否安裝Django及版本
python -m django --version
(3)檢查是否安裝成功
pip3 freeze | grep -i 'Django'
(4)如果離線安裝
step 1 官網下載離線安裝包;
step 2 將安裝包復制到虛擬機;
step 3 解壓縮 tar -xvf Django-2.2.12.tar.gz
step 4 進入目錄 cd Django-2.2.12
step 5 執行安裝 python3 setup.py install
step 6檢查是否安裝成功
7.初始化項目
django-admin startproject 項目名稱
會產生一個以項目名稱命名的目錄(或稱為項目容器,可以有其他應用),主要結構如下:
項目名稱/ manage.py 項目名稱/ __init__.py settings.py urls.py wsgi.py
manage.py
: 管理 Django 項目的命令行工具,一個命令行使用程序,可以讓用戶以各種方式與此Django項目進行交互。
里面一層的 項目名稱/
目錄包含你的項目,它是一個純 Python 包。它的名字就是當你引用它內部任何東西時需要用到的 Python 包名。 (比如 mysite.urls
).
項目名稱/__init__.py
:一個空文件,告訴 Python 這個目錄應該被認為是一個 Python 包。
項目名稱/settings.py
:Django 項目的配置文件。
項目名稱/urls.py
:Django 項目的 URL 聲明,就像你網站的“目錄”。
項目名稱/wsgi.py
:作為你的項目的運行在 WSGI 兼容的Web服務器上的入口。
8.運行開發服務器
python manage.py runserver
啟動默認的端口為8000,本地地址127.0.0.1(localhost),默認只能本地訪問網站,不支持遠程訪問.
如果需要其他人也可以訪問,需要指定0.0.0.0這個ip。就要加入參數:--host 0.0.0.0。
例如:指定其它端口和IP。
python manage.py runserver --host 0.0.0.0 --port 9008
-h HOST, --host HOST
-p PORT, --port PORT
上面的命令可能執行報錯,錯誤信息如下:
CommandError: "0.0.0.0" is not a valid port number or address:port pair.
所以,將命令調整如下:
python manage.py runserver 0.0.0.0:9008
Django已安裝,但是如果遇到還是遇到如下錯誤,那可能是版本不對,或者python的軟連接由問題
錯誤信息
Traceback (most recent call last): File "manage.py", line 8, in <module> from django.core.management import execute_from_command_line ImportError: No module named django.core.management
解決方案:安裝python3,並且更新下軟連接
ln -s /usr/bin/python3.6 /usr/bin/python
9.應用的創建
Django自帶一個應用程序,可以自動生成應用程序的基本目錄結構。
創建應用的命令(記住:一定要在項目的當前目錄下去常見應用;一個項目可以包含多個應用):
python manage.py startapp 應用名
此時新建了一個以 應用名 命名的應用文件,它的里面也創建了一些py文件和包
admin.py :管理站點模型的聲明文件,默認為空。
apps.py :應用信息定義文件。在其中生成了類Appconfig,類用於定義應用名等Meta數據。
migrations : 用於在之后定義引用遷移功能。
models.py : 添加模型層數據類的文件。
test.py :測試代碼文件。
views.py :定義URL響應函數。
10.path() 函數
主要進行路由的匹配。
path(route,view,kwargs,name)
參數 route
route 是包含URL模式的字符串。當 Django 響應一個請求時,它會從 urlpatterns 的第一項開始,按順序依次匹配列表中的項,直到找到匹配的項,然后執行該項映射的視圖函數或者 include 函數分發的下級路由。
參數 view
view 指的是處理當前 url 請求的視圖函數。當 Django 匹配到某個路由條目時,自動將封裝的 HttpRequest 對象作為第一個參數,被“捕獲”的參數以關鍵字參數的形式,傳遞給該條目指定的視圖函數。
參數 kwargs
kwargs 指使用字典關鍵字傳參的形式給關聯的目標視圖函數傳遞參數。
參數 name
name 給 URL 起個別名,常用於 url 的反向解析,避免在模板中適應硬編碼的方式使用嵌入 url。
11.mysqlclient
Django使用MySQL數據庫需要加載MySQLdb模塊,需要安裝mysqlclient.(Django2.2 版本之前安裝的是pymysql模塊,新版本使用的是mysqlclient)
12.HttpResponse對象
視圖在接收請求並處理后,必須返回HttpResponse對象或子對象。HttpRequest對象由Django創建,HttpResponse對象由開發人員創建。
from django.http import HttpResponse
視圖在接收請求並處理后,必須返回HttpResponse對象或子對象。HttpRequest對象由Django創建,HttpResponse對象由開發人員創建。
響應對象主要有三種形式:HttpResponse()、render()、redirect()。
HttpResponse(): 返回文本,參數為字符串,字符串中寫文本內容。如果參數為字符串里含有 html 標簽,也可以渲染。
render(): 返回文本,第一個參數為 request,第二個參數為字符串(頁面名稱),第三個參數為字典(可選參數,向頁面傳遞的參數:鍵為頁面參數名,值為views參數名)。
redirect():重定向,跳轉新頁面。參數為字符串,字符串中填寫頁面路徑。一般用於 form 表單提交后,跳轉到新頁面。
render 和 redirect 是在 HttpResponse 的基礎上進行了封裝:
- render:底層返回的也是 HttpResponse 對象
- redirect:底層繼承的是 HttpResponse 對象
13.Django處理一個請求的過程(步驟)
(1)首先Django確定要使用的根URLconf模塊,通過ROOT_URLCONF來設置,具體在settings.py配置文件中。但是如果傳入HttpRequest對象具有urlconf屬性(由中間件設置),則其值將用於替換ROOT_URLCONF設置。
(2)Django加載該Python模塊並查找該變量urlpatterns.它是django.urls.path() 和(或)django.urls.re_path()實例的序列(sequence).
(3) Django按順序運行每個URL模式,並在匹配所請求的URL的第一個URL中停止。
(4)一旦正則表達式匹配,Django將導入並調用給定的視圖,這是一個簡單的Python函數(或基於類的視圖)。該視圖會獲得如下參數:
*** 一個HttpRequest實例;
*** 如果匹配的正則表達式沒有返回任何命名組,那么來自正則表達式的匹配將做為位置參數提供。
*** 關鍵字參數由正則表達式匹配的任何命名組組成,由可選kwargs參數中指定的任何參數覆蓋。django.urls.path()、django.urls.re_path()。
(5)如果沒有正則表達式匹配,或者在此過程中的任何一點出現異常,Django將調用適當的錯誤處理視圖。
14. URL的命名組
(1)在URL配置中要傳遞參數,一般使用正則表達式非命名組(通過括號)捕獲URL定位,並將它們作為位置參數傳遞給視圖。
(2)在更高級的使用中,可以使用正則表達式命名組來捕獲URL定位,並將它們作為關鍵字參數傳遞給視圖。
(3)在Python正則表達式中,正則表達式命名組的語法是(?P<name>pattern),其中命名組中的命名就是name,並且pattern是某些匹配的模式。
15.URL的反向解析
如果在視圖、模板中使用硬編碼的鏈接,在urlcong發生改變時,維護是一件非常麻煩的事情。
*** 解決:在做鏈接時,通過指向urlconf的名稱,動態生成鏈接地址;
*** 視圖:使用django.core.urlresolvers.reverse()函數;
*** 模板:使用url模板標簽。
16.Django的Model模型介紹
模型是項目中的數據信息源,它包含着儲存數據的必要字段和行為。通常,每個模型對應數據庫中的一張表,每個屬性對應一個字段。每個模型都是django.db.models.Model的一個Python子類。Django提供一套自動生成的用於數據庫訪問的API;模型與數據庫的關系是ORM關系(對象--關系--映射)。使用模型的好處:Model是MVC框架中重要的一部分,負責在數據庫中存取數據,它實現了數據模型與數據庫的解耦,即不需要依賴於特定的數據庫,通過簡單的配置就可以輕松更換數據庫。
17.Model的開發流程
(1)在應用的models.py中定義模型類,要求繼承自models.Model。
(2)把應用加入到項目settings.py配置文件的INSTALLED_APPS項中。
(3)生成遷移文件
python manage.py makemigrations
(4) 執行遷移
python manage.py migrate
注意:需要注意的是這兩個命令默認情況下是作用於全局,也就是對所有最新更改的models或者migrations下面的遷移文件進行對應的操作,如果要想僅僅對部分app進行作用的話 則執行如下命令:
python manage.py makemigrations appname
python manage.py migrate appname
如果要想精確到某一個遷移文件則可以使用:
python manage.py migrate appname 文件名
(5)使用模型類進行CRUD操作。
18.Model模型的實例
*** 模型實例對象是通過objects屬性獲取,即Django為模型類提供的管理器。
objects:是Manager類型的對象,用於與數據庫進行交互。
***實例的方法:__str__(self):重寫object方法,此方法在將對象轉換成字符串時會被調用;save():將模型對象保存到數據表中;delete():將模型對象從數據表中刪除。
19.視圖
Django框架中的視圖(View)是用來負責處理用戶請求和返回響應的邏輯程序。視圖(View)簡而言之就是一個Python的函數或方法,接受處理web請求。視圖的響應可以是一個 HTML 頁面、一個 404 錯誤頁面、重定向頁面、XML 文檔、或者一張圖片...。無論視圖本身包含什么邏輯,都要返回響應。代碼寫在哪里都可以,只要在 Python 目錄下面,一般放在項目的 views.py 文件中。每個視圖函數都負責返回一個 HttpResponse 對象,對象中包含生成的響應。視圖層中有兩個重要的對象:請求對象(request)與響應對象(HttpResponse)。
視圖的代碼按慣例是放置一個名為‘views.py’的文件中,此文件放在項目或應用程序目錄中。
20.HttpRequest對象的屬性和方法
屬性:下面除非特別說明,屬性都是只讀的
path:一個字符串,表示請求的頁面的完整路徑,不包含域名;
method:一個字符串,表示請求使用的HTTP方法,常用值包含:‘GET’、‘POST’;
encoding:一個字符串,表示提交的數據的編碼方式,一般為utf-8;
GET:一個類似於字典的對象,包含get請求方式的所有參數;
POST:一個類似於字典的對象,包含post請求方式的所有參數;
FILES:一個類似於字典的對象,包含所有的上傳文件;
COOKIES:一個標准的Python字典,包含所有的cookie,鍵和值都為字符串;
session:一個既可以讀又可以寫的類似於字典對象,表示當前會話,需Django啟用會話才可用。
方法:
is_ajax():如果請求是通過XMLHttpRequest發起的, 則返回true。
21.QueryDict對象
request對象的屬性GET、POST都是QueryDict類型的對象。與Python字典不同,QueryDict類型的對象用來處理同一個鍵帶有多個值的情況。
方法get():根據鍵獲取值,只能獲取鍵的一個值,如果一個鍵同時擁有多個值,獲取最后一個值。
方法getlist():根據鍵獲取值,將鍵的值以列表返回,可以獲取一個鍵的多個值,dict.getlist(''鍵,default)。
參考網址
1.djangoproject介紹
https://docs.djangoproject.com/en/4.0/
2.好評如潮Python Django全套教程
https://www.bilibili.com/video/BV1pq4y1W7a1?p=8
3.Django簡介