如何搭建 Django 網(wǎng)站
Django是一個非常受歡迎的全功能服務(wù)器端Python Web框架,可以快速開發(fā)安全和可維護的網(wǎng)站。由經(jīng)驗豐富的開發(fā)人員構(gòu)建。Django負責(zé)處理Web開發(fā)大部分繁瑣的工作,因此您可以專注于編寫應(yīng)用程序而無需重新編寫框架。它是免費和開源的,擁有蓬勃發(fā)展的活躍社區(qū),優(yōu)秀的文檔,以及許多免費和付費支持的選項。

本篇教程將指導(dǎo)使用Django構(gòu)建一個簡單的網(wǎng)站框架。您將會了解如何在服務(wù)器上搭建Python3及Django框架,并創(chuàng)建您的第一個項目。您需要準(zhǔn)備一個云服務(wù)器CVM。還沒有云服務(wù)器的同學(xué)可以到華為云點擊產(chǎn)品中的云服務(wù)器,進行購買。
開發(fā)環(huán)境是在本地計算機上安裝Django,您可以在將Django應(yīng)用程序部署到生產(chǎn)環(huán)境之前用它們進行開發(fā)和測試。Django本身提供的主要工具是一組用于創(chuàng)建和使用Django項目的Python腳本,以及一個可用于測試本地(即在您的計算機上,而不是在外部Web服務(wù)器上)的簡單開發(fā) Web服務(wù)器。
創(chuàng)建網(wǎng)站
我們將介紹如何創(chuàng)建網(wǎng)站的基本框架,然后您可以對其進行設(shè)置,路徑選擇,模型搭建,視圖和模板填充。
創(chuàng)建項目
首先打開命令提示符/終端,確保您在虛擬環(huán)境中,導(dǎo)航 到您要存儲Django應(yīng)用程序的位置,并為您的新網(wǎng)站創(chuàng)建一個文件夾(舉例:django_projects)。然后使用cd命令進入該文件夾:
mkdir?django_projects? cd?django_projects
使用django-admin startproject 命令創(chuàng)建新項目locallibrary(您也可以使用其他命名),然后導(dǎo)航到該文件夾。
django-admin?startproject?locallibrary cd?locallibrary
django-admin工具創(chuàng)建文件夾/文件結(jié)構(gòu),如下所示:
locallibrary/ ????manage.py ????locallibrary/ ????????__init__.py ????????settings.py ????????urls.py ????????wsgi.py
我們當(dāng)前的工作目錄應(yīng)如下所示:
../django_projects/locallibrary/
該locallibrary項目的子文件夾是網(wǎng)站的入口點:
init.py是一個空文件,指示Python將此目錄視為Python包。
settings.py包含所有的網(wǎng)站設(shè)置。這是我們注冊我們創(chuàng)建的任何應(yīng)用程序,靜態(tài)文件的位置,數(shù)據(jù)庫配置詳細信息等的地方。
urls.py定義站點URL到視圖的映射。雖然這可能包含所有 url映射代碼,但更常見的是將某些映射委托給特定應(yīng)用程序,稍后您將看到。
wsgi.py 用于幫助您的Django應(yīng)用程序與Web服務(wù)器通信。您可以將其視為樣板。
該manage.py腳本用于創(chuàng)建應(yīng)用程序,與數(shù)據(jù)庫的工作,并開始開發(fā)網(wǎng)絡(luò)服務(wù)器。
創(chuàng)建目錄應(yīng)用程序
接下來,運行以下命令來創(chuàng)建將存在于我們的localibrary項目中的目錄應(yīng)用程序(這必須與項目的manage.py在同一文件夾中運行):
python3?manage.py?startapp?catalog
該工具將創(chuàng)建一個新文件夾,并使用文件填充該應(yīng)用程序的不同部分(下面以粗體顯示)。大多數(shù)的文件會以其目的來進行有效地命名(例如,意見應(yīng)存放在views.py,模型存在models.py,測試存在tests.py,管理站點配置是 ?admin.py,申請注冊是apps.py),并含有一些用于處理相關(guān)對象的最小樣板代碼。
更新的項目目錄現(xiàn)在應(yīng)如下所示:
locallibrary/ ????manage.py ????locallibrary/ ????catalog/ ????????admin.py ????????apps.py ????????models.py ????????tests.py ????????views.py ????????__init__.py ????????migrations/
另外我們現(xiàn)在有:
一個遷移的文件夾,用來存放“遷移” -文件允許你修改你的模型自動更新數(shù)據(jù)庫。
init.py - 這里創(chuàng)建的空文件,以便Django / Python將該文件夾識別為Python包, ?并允許您在項目的其他部分中使用其對象。
注冊目錄應(yīng)用程序
既然已經(jīng)創(chuàng)建了應(yīng)用程序,我們必須將它注冊到項目中,以便在運行任何工具時將其包含在內(nèi)(例如,將模型添加到數(shù)據(jù)庫中)。通過將應(yīng)用程序添加到INSTALLED_APPS項目設(shè)置中的列表來注冊應(yīng)用程序 ?。
打開項目設(shè)置文件django_projects / locallibrary / locallibrary / settings.py并找到INSTALLED_APPS 列表的定義。然后在列表末尾添加一個新行,如下面的注釋所示。
INSTALLED_APPS?=?[ ????'django.contrib.admin', ????'django.contrib.auth', ????'django.contrib.contenttypes', ????'django.contrib.sessions', ????'django.contrib.messages', ????'django.contrib.staticfiles', ????'catalog.apps.CatalogConfig',?//添加此行]
新行指定在 創(chuàng)建應(yīng)用程序時CatalogConfig在/locallibrary/catalog/apps.py中為您生成的應(yīng)用程序配置對象()。
指定數(shù)據(jù)庫
這也是您通常指定要用于項目的數(shù)據(jù)庫的點 - 在可能的情況下使用相同的數(shù)據(jù)庫進行開發(fā)和生產(chǎn)是有意義的,以避免一些細微的差別。您可以在數(shù)據(jù)庫(Django文檔)中找到有關(guān)不同選項的信息。
我們將在這個例子中使用SQLite數(shù)據(jù)庫,因為我們不希望在演示數(shù)據(jù)庫上需要大量的并發(fā)訪問,而且因為它不需要額外的設(shè)置!您可以在settings.py中查看此數(shù)據(jù)庫的配置方式(下面還包含更多信息):
DATABASES?=?{ ????'default':?{ ????????'ENGINE':?'django.db.backends.sqlite3', ????????'NAME':?os.path.join(BASE_DIR,?'db.sqlite3'), ????}}
因為我們使用的是SQLite,所以我們不需要在此處進行任何進一步的設(shè)置。
其他項目設(shè)置
settings.py文件也用于配置其他一些設(shè)置,但在這一點上,你可能只是想改變TIME_ZONE -這應(yīng)該是與標(biāo)準(zhǔn)時區(qū)信息數(shù)據(jù)庫時區(qū)列表相等的字符串(在TZ列在表中包含您想要的值)。將您的TIME_ZONE值更改為適合您所在時區(qū)的其中一個字符串,例如:
TIME_ZONE?=?'Europe/London'
您應(yīng)該注意的其他兩個設(shè)置為:
SECRET_KEY。這是一個密鑰,用作Django網(wǎng)站安全策略的一部分。如果您不在開發(fā)環(huán)境中保護此代碼,則需要在將其放入生產(chǎn)環(huán)境時進行修改。
DEBUG。能夠讓調(diào)試日志顯示錯誤,而不是HTTP狀態(tài)代碼響應(yīng)。在生產(chǎn)環(huán)境下應(yīng)該設(shè)置為False,因為調(diào)試信息對攻擊者很有用,但是現(xiàn)在我們可以將其設(shè)置為True。
連接URL映射器
該網(wǎng)站使用項目文件夾中的URL映射文件(urls.py)創(chuàng)建。雖然您可以使用此文件來管理所有URL映射,但更常見的是將映射推遲到關(guān)聯(lián)的應(yīng)用程序上 。
打開locallibrary / locallibrary / urls.py ?并記下說明文本,該文本解釋了使用URL映射器的一些方法。
"""locallibrary?URL?Configuration The?`urlpatterns`?list?routes?URLs?to?views.?For?more?information?please?see: ????https://docs.djangoproject.com/en/2.0/topics/http/urls/Examples:Function?views????1.?Add?an?import:??from?my_app?import?views????2.?Add?a?URL?to?urlpatterns:??path('',?views.home,?name='home')Class-based?views????1.?Add?an?import:??from?other_app.views?import?Home????2.?Add?a?URL?to?urlpatterns:??path('',?Home.as_view(),?name='home')Including?another?URLconf????1.?Import?the?include()?function:?from?django.urls?import?include,?path????2.?Add?a?URL?to?urlpatterns:??path('blog/',?include('blog.urls'))"""from?django.contrib?import?adminfrom?django.urls?import?path urlpatterns?=?[ ????path('admin/',?admin.site.urls),]
URL映射通過urlpatterns變量進行管理,該變量是Python 的函數(shù)列表path()。每個path() 函數(shù)或?qū)RL模式與特定視圖相關(guān)聯(lián),該模式將在模式匹配時顯示,或者與另一個URL模式測試代碼列表相關(guān)聯(lián)。該urlpatterns 列表最初定義了一個函數(shù),該函數(shù)將所有帶有admin /admin.site.urls的URL映射到模塊,該模塊包含Administration應(yīng)用程序自己的URL映射定義。
將下面的行添加到文件的底部,以便將新的列表項添加到urlpatterns列表中。這個新項目包括將具有path()模式的請求catalog/ 轉(zhuǎn)發(fā)到模塊catalog.urls(具有相對URL /catalog/urls.py的文件)。
#?Use?include()?to?add?paths?from?the?catalog?application? from?django.conf.urls?import?includefrom?django.urls?import?path urlpatterns?+=?[ ????path('catalog/',?include('catalog.urls')),]
現(xiàn)在讓我們將我們網(wǎng)站的根URL(即127.0.0.1:8000)重定向到URL 127.0.0.1:8000/catalog/; 這是我們將在這個項目中使用的唯一應(yīng)用程序。為此,我們將使用一個特殊的視圖函數(shù)(RedirectView),它將第一個參數(shù)作為匹配函數(shù)中的/catalog/指定的URL模式path()(在本例中為根URL )重定向到()的新URL 。
將以下行再次添加到文件的底部:
#Add?URL?maps?to?redirect?the?base?URL?to?our?applicationfrom?django.views.generic?import?RedirectView urlpatterns?+=?[ ????path('',?RedirectView.as_view(url='/catalog/')),]
將路徑函數(shù)的第一個參數(shù)留空。如果您將第一個參數(shù)寫為'/',Django會在您啟動開發(fā)服務(wù)器時給出以下警告:
System?check?identified?some?issues:WARNINGS:?:?(urls.W002)?Your?URL?pattern?'/'?has?a?route?beginning?with?a?'/'.?Remove?this?slash?as?it?is?unnecessary.?If?this?pattern?is?targeted?in?an?include(),?ensure?the?include()?pattern?has?a?trailing?'/'.
Django默認不提供CSS,JavaScript和圖像等靜態(tài)文件,但在創(chuàng)建站點時,開發(fā)Web服務(wù)器可以這樣做。作為此URL映射器的最終添加,您可以通過附加以下行在開發(fā)期間啟用靜態(tài)文件。
現(xiàn)在將以下最終塊添加到文件的底部:
#?Use?static()?to?add?url?mapping?to?serve?static?files?during?development?(only)from?django.conf?import?settingsfrom?django.conf.urls.static?import?staticurlpatterns?+=?static(settings.STATIC_URL,?document_root=settings.STATIC_ROOT)
最后一步,在目錄文件夾中創(chuàng)建一個名為urls.py的文件,并添加以下文本以定義導(dǎo)入的 ?urlpatterns。這是我們在構(gòu)建應(yīng)用程序時添加模式的地方。
from?django.urls?import?pathfrom?catalog?import?views urlpatterns?=?[]
測試網(wǎng)站框架
此時我們有一個完整的框架項目。該我們將對其進行一些測試。
在我們這樣做之前,我們應(yīng)該首先運行數(shù)據(jù)庫遷移。這會更新我們的數(shù)據(jù)庫,包含我們安裝的應(yīng)用程序中的任何模型(并刪除一些構(gòu)建警告)。
運行數(shù)據(jù)庫遷移
Django使用Object-Relational-Mapper(ORM)將Django代碼中的模型定義映射到底層數(shù)據(jù)庫使用的數(shù)據(jù)結(jié)構(gòu)。當(dāng)我們更改模型定義時,Django會跟蹤更改并創(chuàng)建數(shù)據(jù)庫遷移腳本(在/ locallibrary / catalog / migrations /中),以自動遷移數(shù)據(jù)庫中的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)以匹配模型。
當(dāng)我們創(chuàng)建網(wǎng)站時,Django會自動添加一些模型供網(wǎng)站的管理部分使用(我們稍后會詳細介紹)。運行以下命令為數(shù)據(jù)庫中的這些模型定義表(確保您位于包含manage.py的目錄中):
python3?manage.py?makemigrations python3?manage.py?migrate
該makemigrations 命令 為項目中安裝的所有應(yīng)用程序創(chuàng)建(但不應(yīng)用)遷移(您也可以指定應(yīng)用程序名稱以僅為單個項目運行遷移)。這使您有機會在應(yīng)用這些遷移之前檢查這些遷移的代碼 - 當(dāng)您對Django熟悉后,您可以選擇略微調(diào)整它們!
該 ?migrate命令實際上將遷移應(yīng)用于您的數(shù)據(jù)庫(Django會跟蹤哪些已添加到當(dāng)前數(shù)據(jù)庫)。
運行網(wǎng)站
在開發(fā)過程中,您可以先使用開發(fā)Web服務(wù)器對網(wǎng)站進行測試,然后在本地Web瀏覽器上進行查看。
通過調(diào)用該命令運行開發(fā)Web服務(wù)器runserver(與manage.py位于同一目錄中):
python3?manage.py?runserver ?Performing?system?checks... ?System?check?identified?no?issues?(0?silenced). ?August?15,?2018?-?16:11:26 ?Django?version?2.1,?using?settings?'locallibrary.settings' ?Starting?development?server?at?http://127.0.0.1:8000/ ?Quit?the?server?with?CTRL-BREAK.
服務(wù)器運行后,您可以通過導(dǎo)航到http://127.0.0.1:8000/本地Web瀏覽器來查看該站點。您應(yīng)該看到一個如下所示的站點錯誤頁面:
別擔(dān)心!這個錯誤頁面是正常的,因為我們沒有在catalogs.urls模塊中定義任何頁面/網(wǎng)址(我們在獲取網(wǎng)站根目錄的URL時將其重定向到)。
此時我們知道Django正在工作!
完成
恭喜您!到了這一步,您已經(jīng)擁有了一個可以初步使用的網(wǎng)站模型,您可以在該模型上進行網(wǎng)站的頁面創(chuàng)建,導(dǎo)航,應(yīng)用修改等等操作。
最后歡迎使用華為云的產(chǎn)品進行學(xué)習(xí)和使用
Django 網(wǎng)站
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。