知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
您當前位置>首頁 » 新聞資訊 » 網(wǎng)站建設 >
Django Web 開發(fā)極簡實戰(zhàn)
發(fā)表時間:2018-4-12
發(fā)布人:葵宇科技
瀏覽次數(shù):53
課程介紹
本課程是一個系列基礎教程,目標是帶領讀者上手實戰(zhàn) Django Web 開發(fā),課程以 Django 1.10 為基礎,通過一個在線視頻網(wǎng)站的構建,實戰(zhàn)化的介紹 Django Web 開發(fā)中涉及的各大基本功能,從項目的創(chuàng)建和配置、到視圖函數(shù)的創(chuàng)建和 URL 映射設置、到數(shù)據(jù)模型的創(chuàng)建使用和 Django 模板的運用,再到用戶認證系統(tǒng)的實現(xiàn),最后完成 Django 項目在 Ubuntu 上的部署。
認真讀完這個系列文章之后,將會理解 Django Web 開發(fā)的過程和其中涉及到的各種基本功能,具備使用 Django 上手進行 Web 開發(fā)的基本能力,為使用 Django 構建復雜的 Web 應用打下基礎。
作者介紹
楊健,新三板某電商企業(yè)技術部 Python 開發(fā)工程師,負責公司數(shù)據(jù)挖掘項目的構建,Python 獨立教程博客主:州的先生,對 Python 多領域的運用(Web 開發(fā)、數(shù)據(jù)采集、數(shù)據(jù)分析和挖掘等)均有所研究和涉及。
課程內(nèi)容
導讀:為什么是 Django
為什么選擇 Django 作為 Web 開發(fā),因為……我喜歡\^_^||,哈哈,有點任性了。
實際上,作為一個成熟的 Web 框架,Django 有著很多優(yōu)點,尤其是對新接觸 Python Web 開發(fā)的讀者:
- 清晰的架構
- 完整的功能
- 豐富的文檔
對于一個 Web 新手來說,Django 將數(shù)據(jù)模型、業(yè)務處理函數(shù)和頁面渲染的模板分離開來的結構很便于理解和排錯。一個清晰的結構,有助于對 Web 應用有一個整體和局部的認識。
其次,Django 是一個大而全的框架,基本上 Web 中涉及到的技術,框架內(nèi)都有提供一個基本的功能,如果對內(nèi)置的功能不滿意,還能夠自行修改。一個大而全的框架的好處在于,不用為了各種功能而四處找良莠不齊的第三方模塊,用熟了內(nèi)置的功能,自然理解了功能的運作模式,其后自己造適合自己的輪子也是很輕松的。
使用開源的產(chǎn)品,最擔心的不是功能,而是文檔的豐富性,而 Django 在這方面,也是遠勝于 Python 中的其他 Web 框架。
在此推薦一個 Django 1.8 的中文文檔,方便英語不好的讀者查漏補缺。
接下來我們會講什么
接下來,將構建一個實際的 Web 應用——在線視頻學習網(wǎng)站來講解 Django 的開發(fā)。從安裝模塊,到最后的部署,將會涉及到:
- 模塊的安裝
- 數(shù)據(jù)模型
- 業(yè)務視圖
- 模板的使用
- 路由映射
- 使用 Nginx 部署
沒有羅里吧嗦的原理講解,那本就是官方文檔做的事,這里從實戰(zhàn)中領悟 Django。
一個完整的開發(fā)流程,一個極簡的項目實戰(zhàn),敬請期待!
個人博客:州的先生 zmister.com| 個人博客,持續(xù)更新 Python GUI 開發(fā)、Python 滲透測試、Web 開發(fā)、Python 爬蟲、數(shù)據(jù)分析、機器學習。
第01課:創(chuàng)建 Django 項目和應用
本篇將會涉及以下內(nèi)容:
- Virtualenv 的安裝的使用
- Django 的安裝
- Django 項目的創(chuàng)建
- Django 項目的運行
- Django 應用的創(chuàng)建
網(wǎng)站規(guī)劃與設想
現(xiàn)在開始正式進入 Django Web 開發(fā)極簡實戰(zhàn)的達人課,我們將通過創(chuàng)建一個網(wǎng)站來入門 Django Web 開發(fā),了解 Django 框架的基本結構和 Django Web 開發(fā)的基本流程。
首先在此規(guī)劃一下,在接下來的課程中將會完成創(chuàng)建在線視頻教程網(wǎng)站的一些基本頁面和功能。
我們在本次達人課中創(chuàng)建的是一個提供 Python 視頻教程在線播放的網(wǎng)站,網(wǎng)站主要由首頁、視頻列表頁和視頻詳情頁三個功能頁面和其他輔助頁面組成,出于教學演示的考慮,視頻源存儲在本地,同時對視頻設置播放密碼,來實現(xiàn)部分視頻需要用戶進行登錄才能觀看,網(wǎng)站大致有如下頁面和功能。
頁面
每一個內(nèi)容豐富的網(wǎng)站都是由許許多多的頁面構成的,對于我們需要創(chuàng)建的網(wǎng)站而言,以下幾個頁面是網(wǎng)站信息的主要載體,是必須必要存在的:
- 一個首頁,用于展示各個分類的視頻信息;
- 一個分類列表頁面,用于顯示特定分類的視頻信息;
- 一個視頻詳情頁面,用于顯示視頻的詳情和控制視頻的播放,也用于視頻的評論和點贊;
- 一個觀看歷史頁面,用于記錄用戶的觀看歷史,方便用戶查看自己的學習記錄;
- 一個注冊頁面,用于新用戶的注冊,通過輸入 Email 地址、密碼和驗證碼進行注冊;
- 一個登錄頁面,用于用戶的登錄,輸入用戶名和密碼即可進行登錄。
功能
除了基本的展示外,我們的網(wǎng)站還需要有各種交互功能,而以下功能,是我們?yōu)榫W(wǎng)站所進行的設定。
- 用戶認證功能:實現(xiàn)新用戶的注冊和老用戶的登錄以及登錄用戶的注銷;
- 視頻列表分頁功能:在分類列表頁面,能夠通過“上一頁”、“下一頁”對視頻列表進行翻頁;
- 視頻評論功能,能夠?qū)σ曨l教程發(fā)表評論,此功能通過第三方評論工具來實現(xiàn);
- 視頻點贊功能,登錄用戶能夠?qū)σ曨l進行點贊;
- 視頻頁面分享功能,能夠?qū)⒁曨l詳情頁面進行社會化分享,此功能通過百度分享接口實現(xiàn)。
上述的規(guī)劃將作為接下來進行 Django 項目實戰(zhàn)的指導,下面開始 Django Web 開發(fā)的實戰(zhàn)應用吧!
創(chuàng)建一個 Virtualenv 虛擬環(huán)境
為了在一個干凈的 Python 環(huán)境中進行 Django 項目開發(fā),我們使用 Virtualenv 工具創(chuàng)建一個隔離的虛擬 Python 環(huán)境作為 Django 項目的運行環(huán)境。
Virtualenv 是一個用于創(chuàng)建獨立的 Python 環(huán)境的工具,用于解決 Python 開發(fā)中版本依賴和兼容的問題。
使用 pip install virtualenv 命令安裝好 Virtualenv 模塊之后,創(chuàng)建一個名為django_env
的虛擬環(huán)境,在命令行終端使用 Virtualenv 命令進行創(chuàng)建,代碼如下所示:
virtual django_env
默認情況下,Virtualenv 創(chuàng)建一個只包含了 pip、wheel 和 setuptools 這三個模塊安裝工具的全新 Python 環(huán)境。
在當前目錄下,我們可以發(fā)現(xiàn)已經(jīng)多出了一個新的文件夾——django_env
,點擊進去可以查看我們創(chuàng)建的django_env
虛擬環(huán)境的結構,如圖所示:
在 Windows 平臺下,我們可以運行 Scripts 子目錄下的 activate 腳本來激活當前的虛擬環(huán)境,代碼如下所示:
Scripts\activate
當看到命令行中目錄前出現(xiàn)了一個括號包含著虛擬環(huán)境的名稱,說明已經(jīng)激活了虛擬環(huán)境。
如果需要退出當前的虛擬環(huán)境,可以使用 Script 子目錄下的 deactivate 腳本來實現(xiàn)虛擬環(huán)境的退出,代碼如下所示:
Scripts\deactivate
安裝 Django
在激活當前的虛擬環(huán)境之后,使用 pip 命令在虛擬環(huán)境內(nèi)安裝 Django 模塊,在此我們指定安裝 Django 1.11 版本(本課程所介紹的項目在 Django 1.11 上開發(fā),為了避免不必要的錯誤,盡量安裝指定的 Django 版本),代碼如下所示:
pip install django==1.11
安裝完成之后,進行 Python 的 shell 測試一下是否安裝成功:
如果沒有報錯,那就說明安裝成功了。
然后我們再查看一下安裝的 Django 的版本確保是正確的版本,接著在命令行界面的 Python Shell 中輸入以下代碼:
django.__version__
結果返回了我們安裝的 Django 框架的版本號:
創(chuàng)建一個 Django 項目
在 Django 中,每一個 Web 網(wǎng)站都以項目 Project 的形式來呈現(xiàn),Django Project 通俗的理解,就是一個包含各個子系統(tǒng)的網(wǎng)站容器。
在 Django 安裝完成之后,其會生成很多工具腳本,可以使用其中的 Django 管理工具——django-admin 來創(chuàng)建一個項目,使用參數(shù) startproject,后接具體的項目名稱,代碼如下所示:
django-admin startproject videolearn
在命令行終端運行上述命令,就在當前目錄下創(chuàng)建了一個名為 vidolearn 的 Django 項目,結果如下圖所示:
完成上述操作后,可以打開虛擬環(huán)境所在的文件夾,看看剛剛創(chuàng)建的 Django 項目,結果如下圖所示:
因為我們激活了虛擬環(huán)境,所以 Django 項目創(chuàng)建在虛擬環(huán)境的目錄下,繼續(xù)打開 Videolearn 文件夾,里面的內(nèi)容如下圖所示:
可以發(fā)現(xiàn),在這個文件夾下有一個項目的主文件夾和一個名為 manage.py 的 Python 文件。
manage.py 文件是以后在 Django 項目開發(fā)的過程中經(jīng)常會使用到的一個管理文件,其提供了 Django 項目的一系列操作,諸如創(chuàng)建應用、創(chuàng)建數(shù)據(jù)模型、運行服務器等。
在命令行終端運行如下命令:
python manage.py -h
可以看到 manage.py 工具所支持的各種可用功能:
其中一些常用的參數(shù)如下:
- changepassword:用于更改用戶密碼;
- createsuperuser:用于創(chuàng)建超級用戶,后臺管理員;
- dbshell:用于進入 Django 模型 shell 中;
- loaddata:用于從文件中加載數(shù)據(jù);
- migrate:用于檢測數(shù)據(jù)模型的改變;
- makemigtations:用于創(chuàng)建數(shù)據(jù)模型改變的遷移;
- startapp:用于創(chuàng)建一個 Django 應用;
- startproject:用于創(chuàng)建一個 Django 項目;
- collectstatic:用于收集匯總靜態(tài)文件;
- runserver:運行自帶調(diào)試服務器,默認運行在本地 8000 端口之上。
在 Django 開發(fā)過程中,會頻繁使用到一些 manage 命令,大家不需要死記硬背,使用得多了自然就熟練了。
繼續(xù)來看創(chuàng)建的項目文件夾,內(nèi)層的 viedolearn 目錄是創(chuàng)建的 django 項目的包,里面是我們這個 Django 項目創(chuàng)建后的初始文件,默認生成了__init__.py
、settings.py
、urls.py
、wsgi.py
這四個文件。
項目目錄\項目名稱\__init__.py
文件用于將這個文件夾變成一個可以被其他 Python 文件引用的模塊;項目目錄\項目名稱\setting.py
文件是 Django 項目的全局配置文件,數(shù)據(jù)庫的信息、模板的配置、靜態(tài)文件和資源的配置、站點配置基礎配置等都在這里面進行設置;項目目錄\項目名稱\urls.py
為 Django 項目的路由映射文件,里面為對 url 路由的處理和轉(zhuǎn)發(fā)規(guī)則;項目目錄\項目名稱\wsgi.py
文件則是 Django 的默認 WSGI 配置,WSGI(Web Server Gateway Interface,Web 服務網(wǎng)關接口),是 Python Web 服務器和應用的標準,我們可以根據(jù)項目的需要對 wsgi.py 文件做出調(diào)整。
對項目進行基本設置
在了解了創(chuàng)建 Django 項目后生成的文件后來對 Django 項目進行一些基礎的設置,以方便我們接下來的項目開發(fā)。
設置模板目錄
我們先創(chuàng)建一個與 Videolearn 同層級的目錄 templates,用來放置以后需要使用到的 HTML 模板文件,這些模板文件用于進行數(shù)據(jù)的渲染。
然后在 settings.py 文件中,將新創(chuàng)建的 templates 目錄設為模板引擎的路徑,settings.py 中的源代碼如下:
# 本塊代碼位于:videolearn\videolearn\settings.pyTEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, },]
將其修改為:
# 本塊代碼位于:videolearn\videolearn\settings.pyTEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.path.join(BASE_DIR,'templates') ], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, },]
改動的地方就是將變量 DIRS 的值從空列表,設為了一個包含 templates 目錄路徑的列表,代碼如下所示:
# 本塊代碼位于:videolearn\videolearn\settings.py'DIRS': [ os.path.join(BASE_DIR,'templates') ],
修改中文語言和時區(qū)
Django 的默認顯示語言為英語,并且時區(qū)為標準格林威治時間,為了方便查看,我們將其顯示語言修改為中文,顯示時間的時區(qū)修改為上海時區(qū)。
settings.py 文件中的源代碼如下所示:
# 本塊代碼位于:videolearn\videolearn\settings.pyLANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'
將其修改為如下所示:
# 本塊代碼位于:videolearn\videolearn\settings.pyLANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'
設置靜態(tài)文件路徑
在 Django 中,使用靜態(tài)文件(JS、CSS、圖片等)需要首先聲明靜態(tài)文件的路徑,以便于 Django 從聲明的路徑中尋找到靜態(tài)文件。
settings.py 文件中已經(jīng)默認生成了一個靜態(tài)文件的 URL,代碼如下所示 :
# 本塊代碼位于:videolearn\videolearn\settings.pySTATIC_URL = '/static/'
繼續(xù)在項目的內(nèi)層 Videolearn 文件夾同層級創(chuàng)建一個 static 文件夾,用于存放靜態(tài)資源文件:
然后在 settings.py 文件中指定這個靜態(tài)資源文件的路徑,代碼如下所示:
# 本塊代碼位于:videolearn\videolearn\settings.pySTATIC_URL = '/static/'STATICFILES_DIRS = ( os.path.join(BASE_DIR,"static"),)
設置媒體文件路徑
在我們的網(wǎng)站中可能會需要上傳一些圖片或是文件,這就需要在 settings.py 文件中聲明媒體文件的路徑。
我們同樣在項目的內(nèi)層 Videolearn 文件夾同層級創(chuàng)建一個 media 文件夾,用于存放媒體資源文件:
然后在 settings.py 文件中設置變量MEDIA_URL
和MEDIA_ROOT
,分別指定媒體文件的 URL 路由地址和媒體文件的本地路徑,代碼如下所示:
# 本塊代碼位于:videolearn\videolearn\settings.pyMEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR,'media')
測試運行 Django 項目
在完成上述基本設置后,我們使用 Django 內(nèi)置的測試服務器來運行一下 Django 項目,看看是否正常。
在命令行終端中輸入命令,命令如下所示:
# 本命令在CMD命令行界面的videolearn目錄下輸入python manage.py runserver
Django 項目默認會運行在本地的 8000 端口上,當出現(xiàn)下圖的提示,說明測試服務器啟動成功:
在瀏覽器中訪問命令行終端中顯示的地址:http://127.0.0.1:8000/:
出現(xiàn)了如上圖所示的頁面,說明 Django 項目創(chuàng)建并測試運行成功了。
為 Django 項目創(chuàng)建一個 App
剛剛創(chuàng)建了一個 Django 項目并進行了基本的設置,同時成功地將創(chuàng)建的項目使用 manage 工具的 runserver 命令運行在本地的 8000 端口上。
下面接著介紹 Django 的應用(App),在 Django 中,項目(project)是 Django 網(wǎng)站的大框架和容器,那么 App(應用)又是什么呢?
應用(App)是一個具體的 Web 應用程序,用來實現(xiàn)具體的功能和完成具體的事項,被 Django 項目(project)所包含。一個 project 里面可以有很多個 App,就像一個網(wǎng)站可以有文章系統(tǒng)、論壇系統(tǒng)、后臺系統(tǒng)等,每一個 App 也可以剝離出來作為獨立的模塊組件。
還記得上一篇介紹過的 manage.py 文件和它的一些常用功能命令嗎?利用 manage.py 這個命令行小工具,通過 startapp 命令,可以很方便快速地創(chuàng)建一個 django app,代碼如下所示:
python manage.py startapp video
在命令行終端運行上述命令,就創(chuàng)建了一個名為 video 的 Django App,我們看看文件夾中的新變化:
Django 項目 viedolearn 目錄中多出了一個 video 文件夾,里面有6個文件,其中:
- admin.py:用于設置 Django 自帶的強大管理后臺;
- apps.py:聲明了這個的 App 信息;
- models.py:用于定義數(shù)據(jù)模型(數(shù)據(jù)庫表);
- tests.py:用于單元測試;
- views.py:用于定義 App 的視圖,也就是業(yè)務函數(shù)。
這包含了一個 Web 應用的后臺管理、數(shù)據(jù)庫定義、邏輯視圖,在結合項目的路由映射,就是一個 Django App 最基本的結構。
migrations 文件夾目前是一個空的文件夾,其中會記錄應用的數(shù)據(jù)模型遷移的情況。
創(chuàng)建完 video 應用之后,我們需要使用 manage.py 文件的 migrate 和 makemigrations 命令,創(chuàng)建一些默認的數(shù)據(jù)庫表,命令如下所示:
python manage.py migrate
運行命令,會顯示將會對數(shù)據(jù)庫進行很多個表的實例化和遷移,細看一下,基本上是屬于認證和后臺管理的數(shù)據(jù)庫名。
接著,可以使用 makemigrations 命令來檢測項目中數(shù)據(jù)模型的數(shù)據(jù)遷移變化,命令如下所示:
python manage.py makemigrations
直接輸入這個命令,終端可能會提示沒有任何改變完成(No changes detected),結果如下圖所示:
面對這種情況,可以在命令后顯式地指定具體的應用名,命令如下所示:
python manage.py makemigrations video
但是可能依然不會成功,命令行中提示“video”App 并沒有被發(fā)現(xiàn),因為剛剛創(chuàng)建的 App——video 并沒有添加到 videolearn 項目的 App 列表中:
怎么添加呢?添加方法還是在 settings.py 文件中,找到INSTALLED_APPS
變量,源代碼如下所示:
# 本塊代碼位于:videolearn\videolearn\settings.pyINSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',]
我們將 video 以一個字符串的形式添加到列表最后,代碼如下所示:
# 本塊代碼位于:videolearn\videolearn\settings.pyINSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'video']
添加完成后,再嘗試使用 makemigrations 和 migrate 命令,如下所示:
python manage.py makemigrationspython manage.py migrate
結果就會順利的完成一些數(shù)據(jù)模型的創(chuàng)建和更改。
創(chuàng)建超級用戶
接下來為我們的項目創(chuàng)建一個超級管理員,通過這個超級管理員賬戶,可以快速地使用 Django 強大的后臺功能,對數(shù)據(jù)模型進行管理,同樣使用 manage.py 這個工具,利用它的 createsuperuser 命令來進行創(chuàng)建,命令如下所示:
python manage.py createsuperuser
根據(jù)提示輸入用戶名、郵箱和密碼,一個超級用戶就創(chuàng)建好了。我們可以運行項目,訪問 /admin 路徑看看:
結果呈現(xiàn)了一個“Django 管理”的登錄表單,這就是 Django 自帶的后臺管理模塊:
使用剛剛創(chuàng)建超級用戶的用戶名和密碼進行登錄:
進入了傳說中功能強大的 Django 自帶后臺,但是我們并沒有添加數(shù)據(jù)模型進去,所以里面只有之前通過 magrite 命令對應用生成初始化的認證模型(用戶和用戶組),略顯簡陋。
你肯定會好奇,為什么打開/admin,就會呈現(xiàn)出來 Django 的管理后臺呢?
為了解決這個疑問,我們打開內(nèi)層 videolearn 文件夾下的 urls.py 文件,里面的內(nèi)容如下所示:
# 本塊代碼位于:videolearn\videolearn\urls.pyfrom django.conf.urls import urlfrom django.contrib import adminurlpatterns = [ url(r'^admin/', admin.site.urls),]
在 urls.py 文件中,其引入了兩個模塊,url 和 admin,然后定義了一個列表 urlpatterns。url 模塊用于匹配解析 url 路徑,admin 模塊就是 Django 的后臺模塊,名為 urlpatterns 的列表中的內(nèi)容則是引導 URL 鏈接——/admin 顯示 Django 后臺界面的關鍵。
其中具體的運行機制,在下一篇 Django 的路由和視圖中將詳細介紹。
第02課:設置 URL 路由與創(chuàng)建視圖函數(shù)
第03課:創(chuàng)建網(wǎng)站數(shù)據(jù)模型
第04課:數(shù)據(jù)模型使用與填充網(wǎng)站數(shù)據(jù)
第05課:構建 HTML 頁面模板
第06課:完善視圖、模板和數(shù)據(jù)查詢
第07課:實現(xiàn)用戶注冊和登錄認證
第08課:在 Ubuntu 上部署 Django
閱讀全文: http://gitbook.cn/gitchat/column/5a96694d7a0cbc5fa76d4dac
相關案例查看更多
相關閱讀
- 保山小程序開發(fā)
- 汽車回收管理系統(tǒng)
- 前端技術
- 云南網(wǎng)站建設優(yōu)化
- web開發(fā)技術
- 網(wǎng)站建設哪家強
- 網(wǎng)站建設優(yōu)化
- 生成海報
- 百度人工排名
- 百度小程序開發(fā)公司
- uniapp開發(fā)小程序
- 網(wǎng)站建設選
- 云南旅游網(wǎng)站建設
- 做網(wǎng)站
- 開發(fā)制作小程序
- 小程序定制
- 區(qū)塊鏈
- 重慶網(wǎng)站建設公司
- 昆明做網(wǎng)站建設的公司排名
- 云南網(wǎng)站設計
- 網(wǎng)站建設百度官方
- typescript
- 云南小程序開發(fā)報價
- 云南小程序開發(fā)哪家好
- 昆明網(wǎng)絡公司
- 云南小程序被騙
- 二叉樹
- 英文網(wǎng)站建設公司
- 搜索引擎優(yōu)化
- 昆明小程序開發(fā)聯(lián)系方式