如何搭建 Django 網(wǎng)站

      網(wǎng)友投稿 755 2025-03-31

      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)用程序 ?。

      如何搭建 Django 網(wǎ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)容。

      上一篇:excel怎么加一列單元格(Excel表格怎么加一列)
      下一篇:【云駐共創(chuàng)】Rust語言一般適合用來做什么?
      相關(guān)文章
      国产亚洲一区二区精品| 欧洲亚洲综合一区二区三区 | 久久夜色精品国产噜噜亚洲AV| 国产精品亚洲аv无码播放| 亚洲男人的天堂www| 亚洲伊人久久综合中文成人网| 亚洲av无码乱码在线观看野外| 校园亚洲春色另类小说合集| 国产成人亚洲毛片| 亚洲国产精品综合久久一线| 亚洲国产精品一区二区第四页| 亚洲精品无码av天堂| 精品亚洲成α人无码成α在线观看 | 97久久精品亚洲中文字幕无码 | 亚洲综合亚洲综合网成人| 国产亚洲一区二区三区在线不卡 | 久久亚洲精品中文字幕无码| 亚洲AV永久精品爱情岛论坛| 亚洲韩国—中文字幕| 亚洲精品欧洲精品| 亚洲一区中文字幕在线电影网| 亚洲五月综合网色九月色| 亚洲一线产品二线产品| 亚洲av永久无码天堂网| 亚洲国产aⅴ综合网| 国产亚洲一区二区三区在线不卡| 日韩亚洲人成在线综合日本| 亚洲欧洲第一a在线观看| 亚洲精品人成电影网| 久久亚洲精品专区蓝色区| 亚洲男人的天堂网站| 亚洲av中文无码| 亚洲欧洲无码AV电影在线观看 | mm1313亚洲精品无码又大又粗| 亚洲伊人久久综合中文成人网| 亚洲大尺度无码专区尤物| 亚洲综合婷婷久久| 亚洲高清中文字幕免费| 亚洲AV性色在线观看| 爱情岛论坛网亚洲品质自拍| 亚洲∧v久久久无码精品|