1. 程式人生 > 其它 >django 安裝及簡單案例

django 安裝及簡單案例

一、在 anaconda 中新建執行python的虛擬環境 tuesday,因為今天是星期二,所以起個名字 tuesday,開啟虛擬環境目錄,可以看到:

如上,虛擬環境裡已經包含了python直譯器python.exe,另外,其它檔案的作用如下:

DLLS: python的動態連結庫,跟編譯器有關,和python程式設計關係不大

Include: python 編譯器的C語言標頭檔案原始碼

Lib: 這個庫很重要,是python的標準庫,你擴充的庫都安裝在這裡面的site-packages資料夾裡。

Libs: python的內建庫

Scripts: 專案用到的各種指令碼,比如說,安裝python時自帶的pip.exe在這個檔案中。

Tcl:包含python預設內建的GUI工具Tkiner

Tools目錄:Python 提供的一些工具

二、安裝django

命令:pip install django

註解:這裡我們使用了pip命令,pip 命令存放在虛擬環境的Scripts資料夾裡,並在虛擬環境建立的時候對其路徑設定了環境變數,所以我們能夠在命令列視窗直接使用它。pip 命令預設去python官方維護的PyPI庫中尋找要安裝的庫,你也可以指定去PyPI的映象站安裝,比如去PyPI的清華映象站安裝:pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

看一下django的安裝目錄,在Lib/sit-packages檔案裡:

開啟django檔案,這就是django框架的原始碼:

django作為web框架,集成了web服務相關的功能,比如http資料夾下的request.py和response.py分別實現了web的請求和響應,db資料夾實現了連線後臺資料庫的相關功能,urls實現了web訪問路徑定址的功能等。

三、在django框架下新建一個web專案,取名為firstproject

在命令列介面進入我們存放專案的檔案路徑,比如說我們把專案存放在E盤:

命令:django-admin startproject firstproject

註解:這裡我們使用了django-admin命令,這個命令是存放在虛擬環境目錄下的Scripts資料夾中,跟pip命令一樣。

進入e盤,看一下新建的firstproject專案:

開啟firstproject目錄:

這裡面有兩個檔案,一個是firstproject專案目錄,一個是manage.py檔案,firstproject專案目錄裡面存放是是專案的配置檔案,manage.py是可執行命令,用來操作該專案,我們在命令列中進入e盤下的firstproject目錄,就可以使用manage.py命令了。

我們先看一下e盤firstproject目錄下的firstproject專案目錄:

 __int__.py是firstproject包的初始化檔案,用來標識這是一個pakage,我們無需理會。

asgi.py和wsgi.py是負責網路請求和響應的,在之後做專案過程中,一般不需要修改。

settings.py是專案的配置檔案,包括專案的應用註冊,中介軟體註冊,資料庫配置,網頁靜態檔案配置等。

urls.py是專案的url檔案路徑配置檔案。


四、完成資料庫的遷移

django框架預設使用SQLite資料庫,這是一款輕量級資料庫。django資料庫的配置檔案在firstproject專案目錄下的settings.py檔案中:

執行命令:

python manage.py migrate

django框架讀取settings檔案中的各個內建應用的models.py檔案,在SQLite中建立資料庫和資料表。settings.py檔案中各個內建應用設定如下:

 如上各個內建應用主要設定了使用者資訊表,管理員資訊表等。

五、django框架提供了後臺管理功能,設定後臺管理:

執行命令:

python manage.py createsuperuser

按照提示一步步輸入管理員使用者名稱、管理員郵箱、管理員口令等。

六、啟動伺服器:

執行命令:

python manage.py runserver 80

 在瀏覽器中訪問:127.0.0.1 就可以看到前臺頁面了

在瀏覽器中訪問:127.0.0.1/admin就可以訪問後臺管理頁面了

通過鍵盤組合 CTRL-BREAK,停止django web服務,進入下個步驟。

 七、進一步改進

由於django預設使用的資料庫是SQLite資料庫,這是一款輕量級伺服器,在業界用得更多的是oracle、sqlserver、DB2等收費資料庫或者mysql、postgresql等免費資料庫,由於很多網際網路公司都在使用mysql資料庫,因此,我們將firstproject專案掛接的資料庫改為mysql.

(1)開啟mysql終端,建立firstdatabase資料庫,用於將來由firstproject專案掛接。

(2)在firstproject專案目錄中的settings.py檔案中更改資料庫設定,將DATABASE項改為:

 如上, 資料庫的名稱、使用者名稱、口令等要根據你個人對mysql的配置相應的在settings.py檔案中做修改。

(3)在第(2)中,我們可以看到,專案使用的資料庫引擎(‘ENGINE’)是‘django.db.backends.mysql’,該引擎實現了將專案的models模型轉換為mysql語句,為了使mysql語句作用於mysql資料庫,我們還需要一個mysql資料庫驅動,這裡我們使用mysqlclient驅動:

執行下載mysqlclient驅動命令:

pip install mysqlclient

(4)進行資料遷移,並建立管理員賬號:

執行命令:

python manage.py makemigrations

python manage.py migrate

python manage.py createsuperuser

(5)開啟web服務

執行命令:

python manage.py runserver 80

可以看到,這個系統起來了。

九、開發我們的應用 firstapp

(1)在firstproject專案中建立我們的應用,比如說我們要做一個網站,那麼這個網站就是一個應用,我們取名為firstapp

進入manage.py所在的目錄firstproject,使用python執行manage.py檔案建立firstproject專案下的應用firstapp

命令:python manage.py startapp firstapp

 我們進入firstapp目錄,看一下里面的檔案:

 migrations目錄是存放後臺資料庫遷移相關的。

admin.py是用來將該應用註冊到專案的後臺的,也就是說我們的專案如果需要後臺操作,那麼就要在admin.py裡面註冊。

models.py是用來操作後臺資料庫的模型檔案。

views.py是用來控制前臺和後臺互動的控制檔案。

(2)將應用註冊到專案的配置檔案中,開啟專案配置檔案settings.py,做如下配置:

(3)新建資料模型,假設我們要做一個資訊釋出網站,在後臺釋出資訊,在前臺顯示。

前面我們已經在mysql裡面新建了資料庫firstdatabase,現在我們要做的事情是在firstdatabase裡面新建一個表(table),這個表裡面設定三個欄位,分別是message(VARCHAR(200)),author(VARCHAR(20)),pub_date(DATE)

django是MTV框架,M代表model,用來操作資料庫,我們去firstapp目錄下的models.py編寫程式碼實現上述要求。

在models.py檔案中,定義一個class代表著在firstdatabase裡面建立一個表,我們命名這個表為Message,class內部的每一個屬性代表message表中的一個欄位,根據要求,我們需要在 class message 中定義三個屬性:message,author,pub_date

結合我們要實現的上述要求,進一步瞭解models.py檔案:

每一個class都是繼承的django.db.models.Model類:

from django.db import models

class Message(models.Model):

在class Message中定義資料表的欄位:

message = models.CharField(max_length=200)

author = models.CharField(max_length=20)

pub_date = models.CharField('釋出時間')

如上,message是models模組下的CharField類的一個例項物件,同理,對於author、pub_date也是這樣理解。

另外,CharField類是在django\db\models\fields\__ini__.py模組中定義的,去原始碼看CharField定義:

class CharField(Field):

可以看出,CharField類繼承了Field類,分析django的目錄結構,可以看到Field類同樣是在django\db\models\fields\__ini__.py模組中定義的,其定義為:

class Field(RegisterLookupMixin):

可以看出,Field類是繼承的RegisterLookupMixin類,分析django的目錄結構,可以看出RegisterLookupMixin類是在django\db\models\query_utils.py模組中定義的,其定義為:

class RegisterLookupMixin:

至此,我們已經深入理解了用來定義資料庫message欄位的CharField類的來龍去脈,實質上,CharField類對應了mysql資料庫新建欄位時對欄位資料型別的定義 VARCHAR

再拓展一下,mysql的資料型別如下:

 django中的django\db\models\fields\__ini__.py模組定義的資料型別的類,如下所示:

 django models 資料型別的類與mysql資料型別對應關係可以參考如下連結:

https://www.cnblogs.com/bladecheng/p/11372267.html

重點提示一點:

django 定義mysql資料庫欄位屬性的類都放在django\db\models\fields\__ini__.py目錄下,需要的時候可以檢視原始碼。

最終,我們的models.py檔案截圖如下:

在虛擬環境端執行資料庫遷移命令,完成上圖所示models.py檔案對mysql資料庫的操作:

執行命令:

python manage.py makemigrations

python manage.py migrate

我們開啟mysql中firstdatabase資料庫,可以看到新建了資料表firstapp_message,使用desc firstapp_message命令,檢視該資料表的結構如下:

 (4)將我們的Message模型註冊到firstapp的後臺管理頁面,開啟firstapp/admin.py, 輸入語句: admin.site.register(Message),如下:

 之後,我們就可以再後臺頁面看到Message模型了:

 之後,我們就可以在後臺增刪改查訊息了,這就實現了通過網站後臺直接操作資料庫。

(5)到目前,我們能夠用後臺頁面對mysql資料庫進行增刪改查工作,下一步我們還需要讓普通使用者能夠通過前臺頁面訪問資料庫message、author、pub_date等內容,主要涉及三方面內容,一是配置使用者瀏覽器訪問路徑,主要配置URL相關檔案,二是設計使用者瀏覽器請求的處理邏輯,主要是通過在views.py檔案內編寫程式碼實現,三是系統返回響應頁面給使用者瀏覽器,主要是在templates目錄下編寫html檔案,由views.py程式碼呼叫並返回給使用者瀏覽器。

先來配置url:

在firstproject專案目錄下的urls.py檔案中的urlpatterns列表中定義瀏覽器的訪問路徑,urlpatterns列表中的元素是path函式,每一個path函式代表著接受一條路徑訪問,並做相應的處理,對於path函式,做如下說明:

通過查閱path函式原始碼,可以看出,paht函式 具有四個引數,兩個必需引數:routeview,兩個可選引數:kwargsnameroute引數是一個匹配 URL 的準則(類似正則表示式)。當 Django 響應一個請求時,它會從 urlpatterns 的第一項開始,按順序依次匹配列表中的項,直到找到匹配的項,route引數是以字串形式給出的,比如我們要設定網站的首頁網址為127.0.0.1,那麼首頁的path函式為path('',...),同樣,如果我們要設定網站的首頁地址為127.0.0.1/index.html,那麼首頁的path函式為path('index.html'...)。view引數是一個檢視函式,它是定義在views.py檔案裡的,當 Django 找到了一個匹配的準則,就會呼叫這個特定的檢視函式,並傳入一個 HttpRequest 物件作為第一個引數,被“捕獲”的引數以關鍵字引數的形式傳入view引數對應的view函式中。我們對url的配置如下:

 上面第一個path是我們自己配置的,第二個path是系統預設給的,用來訪問後臺頁面的網址。對於第一個path,我們看到,它的第二個引數是呼叫了views.py模組的index函式,而這個views.py模組是通過from firstapp import views引進來的,其實這個邏輯是這樣的,當用戶訪問127.0.0.1的時候,path函式會交給firstapp.views.index函式處理,所以我們進入下一個話題views,在 firstapp中開啟views.py檔案,新建一個index函式,這個函式的功能是讀取mysql資料庫的資訊,然後把這些資訊寫入到一個html頁面,並返回給使用者瀏覽器。我們先看一下這個index函式的定義:

 讓我們解析一下上圖:

首先,將render函式和firstapp.models模組裡的Message類引進來,render函式是用來給使用者瀏覽器返回一個html頁面的,Message類是用來讀取mysql資料庫中firstapp_message資料表資訊的。我們定義的index函式接收一個引數,我們習慣於將之命名為request,在我們這個場景下,request作為形參,接收的實參是path函式傳遞過來的空字串' ',在index函式體內,message_list變數的賦值是Message類的屬性objects呼叫的all()方法返回值的列表化,這句話聽起來很拗口,實質上message_list的作用是把mysql資料庫管理系統下的firstdatabase資料庫下的firstdatabase_message資料表的內容讀進來,我們看一下這其中的具體機制:首先,Message類是在firstapp目錄下的models.py檔案裡定義的,繼承了django.db.models.Model類,我們在firstapp目錄下的models.py裡定義Message類的時候,django會自動給Message類生成一個objects屬性,objects屬性是django.db.models.manager.Manager類的一個例項,是Model對資料庫進行操作的介面,它內部定義了很多方法,其中all()方法的作用是返回一個QuerySet物件,在我們當前場景下,也就是返回firstdatabase資料庫下firstapp_message資料表中的所有內容,我們用list()方法將QureySet物件列表化,以便於從列表中逐行讀取資料庫中的內容。接著我們看一下index函式中的我們定義的contex變數,contex變數是一個字典,它的key是我們前臺html檔案呼叫的名稱,它的value值是key對應的變數,在當前場景下,就是我們把從資料庫讀取的條目封裝到列表message_list中,並返回給前端html檔案的message_list變數。最後,我們用renturn 返回了一個render函式,這個函式是定義在django.shortcuts模組中, 在這裡它有三個引數,第一個引數是對應的index函式接收的request引數,第二個引數和第三個引數的意思是將contex變數返回給index.html

目前,我們還沒有建立index.html檔案。下一步我們建立index.html檔案,按照django的工作機制,需要我們在firstapp下建立templates目錄,然後在temlpates目錄下新建index.html檔案,在當前場景下,我們建好index.html檔案後,在裡面寫入如下內容:

 讓我們解析下上圖:

{%......%}是django的html標籤,代表標籤裡面是python語句,{{......}}標籤代表裡面是python變數,可以看出,前端html頁面就是接收views.py中的index函式返回的contex中的message_list,並使用for迴圈迭代輸出message_list中的所有行,並通過item呼叫每一行的每一個欄位列印到index.html頁面中的列表中。

十、我們的資訊釋出牆專案到此就完成了,我們可以在本機瀏覽器輸入127.0.0.1/admin進入後臺,點開message輸入資訊,其它使用者輸入127.0.0.1就可以在前端頁面看到我們釋出的資訊了。當然了,如果把這個專案部署在公網上,假設公網IP地址是xxx.xxx.xxx.xxx,那麼我們通過訪問xxx.xxx.xxx.xxx/admin就可以釋出我們要釋出的訊息,網際網路使用者就可以通過訪問xxx.xxx.xxx.xxx來接收我們的訊息了。這個案例很簡單,而且沒有進行前端美化,但是我們的重點是詳細介紹django這個MTV框架的工作原理,以後同學們做專案的時候,可以根據自己的需要查閱django的文件,實現自己的需求。