」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 理解 Django 的架構:MTV 模式。

理解 Django 的架構:MTV 模式。

發佈於2024-11-02
瀏覽:928

Understanding Django’s Architecture: The MTV Pattern.

Django 遵循 MTV(模型-模板-視圖)模式進行 Web 開發。以下是每個組件的詳細資訊:

模型:定義資料結構並處理與資料庫的交互,讓您可以儲存和檢索資料而無需手動編寫 SQL 查詢。

範本:負責渲染 HTML 並將資料呈現給使用者。您可以編寫與 Django 模板語言 (DTL) 混合的 HTML 來顯示動態內容。

View:充當業務邏輯層。它連接模型和模板,處理用戶請求,與模型交互,並返回回應(通常是從模板呈現的 HTML)。

Django 的請求-回應週期如何運作:

  • 使用者請求網頁(透過 URL)。
  • Django 將 URL 配對到視圖。
  • 視圖從模型中獲取資料並將其傳遞給範本。
  • 範本將資料呈現為 HTML 並將其作為回應傳回給使用者。

第 1 步:在 Django 中建立新應用程式.
設定 Django 後(如上一篇文章所述),讓我們在專案中建立一個新應用程式。

運行這些命令:

cd mysite
python3 manage.py startapp core

這會在您的 mysite 專案中建立一個名為 core 的應用程式。您的文件結構現在應如下所示:

.
├── core
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── manage.py
└── mysite
    ├── asgi.py
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

第 2 步:在設定檔中註冊您的應用程式
為了讓 Django 知道新的應用程序,您需要將其添加到 mysite/settings.py 中的 INSTALLED_APPS 中:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'core',  # add this line
]

第 3 步:建立基本視圖.
讓我們建立一個傳回「Hello, World!」的簡單視圖。資訊.

在核心應用程式中開啟views.py並加入以下程式碼:

from django.http import HttpResponse

def learn(request):
    return HttpResponse("Hello, World!")

第 4 步:將 URL 對應到視圖.
要透過 URL 存取此視圖,您需要將其對應到 core/urls.py 檔案中。如果該文件不存在,則建立該文件並添加以下內容:

from django.urls import path
from . import views

urlpatterns = [
    path('learn/', views.learn, name='learn'),
]

接下來,將核心應用程式的 URL 包含在主 mysite/urls.py 檔案中:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('core/', include('core.urls')),  # include the core app URLs
]

現在,如果您運行伺服器並訪問 http://127.0.0.1:8000/core/learn/,您應該會看到“Hello, World!”顯示。
第 5 步:建立並渲染範本

from django.shortcuts import render

def learn(request):
    context = {'name': 'Django'}
    return render(request, 'hello.html', context)

此視圖現在將變數(名稱)傳遞給名為 hello.html 的範本。
第 6 步:建立範本目錄和 HTML 檔案.
在您的核心應用程式中,建立一個 templates 資料夾和一個 hello.html 檔案:

mkdir core/templates
touch core/templates/hello.html

在hello.html中,加入以下HTML程式碼



    Hello Template

Hello, {{ name }}!

當您再次造訪學習 URL 時,您現在應該會看到「Hello, Django!」在瀏覽器中。

第七步:建立基本模型.
讓我們建立一個簡單的 Post 模型來儲存部落格文章。

在core/models.py中加入以下程式碼:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

    def __str__(self):
        return self.title

這個Postmodel有兩個欄位:title和content。 __str__ 方法確保 Post 物件在 Django admin 或 shell 中顯示及其標題

第 8 步:將模型應用到資料庫.
若要在資料庫中建立對應的表,請執行以下命令:

python3 manage.py makemigrations
python3 manage.py migrate

Django 現在將為 Post 模型建立一個資料庫表。

透過執行這些步驟,您已成功建立了一個包含模型、視圖和範本的基本 Django 應用程式。現在您可以透過添加更多功能來擴展此基礎,例如處理使用者輸入、改進設計以及使應用程式更具互動性。

版本聲明 本文轉載於:https://dev.to/vincenttommi/2-understanding-djangos-architecture-the-mtv-pattern-1gl?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Websocket 或 Socket io!讓我們來看看吧!
    Websocket 或 Socket io!讓我們來看看吧!
    WebSockets 与 Socket.IO:实时对决 当谈到网络上的实时通信时,开发人员经常发现自己陷入两个选择之间:WebSockets 和 Socket.IO。这两种工具都擅长它们的工作——提供了一种在客户端和服务器之间实现双向通信的方法——但每种工具都有自己独特的个性。这有...
    程式設計 發佈於2024-11-02
  • Deno 起飛
    Deno 起飛
    网络是人类最大的软件平台,拥有超过 50 亿用户,并且还在不断增长。然而,随着 Web 开发需求的飙升,其复杂性也随之增加。在无尽的配置文件、大量的样板文件和大量的依赖项之间,开发人员花费更多的时间来进行设置,而不是构建下一个大东西。? 进入 Deno,这是一种用于 JavaScript 和 Typ...
    程式設計 發佈於2024-11-02
  • 使用 Django Rest Framework 尋找海森堡
    使用 Django Rest Framework 尋找海森堡
    The idea The idea was to create a simple platform for DEA agents, to manage information about characters from the Breaking Bad/Better Call Sa...
    程式設計 發佈於2024-11-02
  • 湯姆和傑瑞燈代碼
    湯姆和傑瑞燈代碼
    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ...
    程式設計 發佈於2024-11-02
  • 透過實作學習 TDD:在 Umbraco 的富文本編輯器中標記成員
    透過實作學習 TDD:在 Umbraco 的富文本編輯器中標記成員
    在我正在建構的系統中,我需要能夠在網站的文字中提及 Umbraco 會員。為此,我需要建立 Umbraco 富文本編輯器的擴充:TinyMCE。 情境 作為內容編輯者,我想在訊息或文章中標記成員,以便他們收到有關其新內容的通知。 我研究了類似的實現,例如 Slack 或 X 上的...
    程式設計 發佈於2024-11-02
  • 如何在Python測試情境中模擬HTTP請求和回應?
    如何在Python測試情境中模擬HTTP請求和回應?
    Python 測試的模擬請求和回應在Python 測試中,有必要模擬模組及其功能來控制執行流程並驗證具體場景。其中,模擬 requests 模組通常用於測試依賴 HTTP 請求的函數或方法。 考慮一個包含以下程式碼的views.py 檔案:def myview(request): res1 ...
    程式設計 發佈於2024-11-02
  • 如何建立適用於 Windows、Linux 和 macOS 的 Python 條碼掃描器
    如何建立適用於 Windows、Linux 和 macOS 的 Python 條碼掃描器
    条形码扫描已成为从零售、物流到医疗保健等各个行业的重要工具。在桌面平台上,它可以快速捕获和处理信息,无需手动输入数据,从而节省时间并减少错误。在本教程中,我们将通过构建适用于 Windows、Linux 的 Python 条形码扫描仪 继续探索 Dynamsoft Capture Vision SD...
    程式設計 發佈於2024-11-02
  • ## 如何在 Python 中建立不可變物件以及為什麼 nametuple 是最好的方法?
    ## 如何在 Python 中建立不可變物件以及為什麼 nametuple 是最好的方法?
    Python 中的不可變物件在 Python 中,不變性為保護資料完整性提供了一種有價值的機制。然而,創建不可變物件會帶來一定的挑戰。 重寫 setattr常見的方法是重寫 setattr方法。然而,即使在 init 過程中也會呼叫此方法,因此它不適合建立不可變物件。 子類化 Tuple另一種策略涉...
    程式設計 發佈於2024-11-02
  • 最常被問到的 React 面試問題
    最常被問到的 React 面試問題
    如何優化 React 應用程式的效能? 1。組件應謹慎更新 實作 shouldComponentUpdate 或 React.memo 透過比較 props 或 states 來防止不必要的重新渲染。 2.使用功能組件和鉤子 帶鉤子的功能組件通常比類組件性能更高。 3.延遲載入...
    程式設計 發佈於2024-11-02
  • (Wordpress 初學者):僅將子網域從託管轉移(遷移)到另一個新託管。
    (Wordpress 初學者):僅將子網域從託管轉移(遷移)到另一個新託管。
    我只想從 Bluehost 託管轉移(遷移)一個新託管(例如 Fastcomet 或 Chemicloud)的子網域。 我想知道我遷移子網域的步驟是否正確以及我應該做什麼更改 DNS 內容...... ** 我的情況1:** – 主 Web 網域(例如:forcleanworld.com)保留在 ...
    程式設計 發佈於2024-11-02
  • 使用 Java 進行資料分析:資訊處理初學者指南
    使用 Java 進行資料分析:資訊處理初學者指南
    Java 是適用於資料分析的強大語言,它提供用於處理大型資料集和執行複雜分析的基礎結構,包括:資料結構:用於儲存和組織資料的集合,例如陣列和清單。 IO 流:用於讀取和寫入檔案的物件。 Java 集合框架:用於管理和操作資料結構的強大集合類別庫。使用 Java 進行資料分析的實際案例包括分析文字文件...
    程式設計 發佈於2024-11-02
  • 僱用自由 Python 開發人員時要避免的常見錯誤
    僱用自由 Python 開發人員時要避免的常見錯誤
    介紹 聘請合適的自由 Python 開發人員可以決定你的專案的成敗。然而,許多企業在招募過程中會犯一些常見的錯誤,這些錯誤可能會導致招募延遲、成本超支和結果不佳。以下是如何避免這些陷阱並確保專案成功的方法。 沒有明確定義專案要求 最常見的錯誤之一是在開始招募流程之...
    程式設計 發佈於2024-11-02
  • AWS SAM Lambda 專案的本機開發伺服器
    AWS SAM Lambda 專案的本機開發伺服器
    现在我正在开发一个项目,其中使用 AWS lambda 作为请求处理程序构建 REST API。整个过程使用 AWS SAM 定义 lambda、层并将其连接到漂亮的 template.yaml 文件中的 Api 网关。 问题 在本地测试此 API 并不像其他框架那样简单。虽然 AW...
    程式設計 發佈於2024-11-02
  • 什麼是 React?
    什麼是 React?
    最近,我决定通过注册 元前端开发人员专业证书将我的技能提升到一个新的水平。 专业化涵盖各种主题,从基本的 Web 开发语言(例如 HTML、CSS 和 JavaScript)到高级框架 React。 通过这篇文章和以下博客文章,我的目标是分享我在通过认证过程中的经验、学习和进步。 所以… ...
    程式設計 發佈於2024-11-02
  • 如何在C++中實作虛擬運算子重載?
    如何在C++中實作虛擬運算子重載?
    虛擬運算子重載背景在 C 中,可以為自訂資料類型重載運算符,從而提供客製化的行為。然而,允許多態行為的虛擬方法不能直接用於運算子重載。 問題考慮創建一個虛擬運算子
    程式設計 發佈於2024-11-02

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3