【Django】-1- 開發項目搭建

?一、PDM + Django?搭建項目👇

🎯 核心目標

用?PDM(更現代的 Python 包管理工具),快速創建并管理?Django 項目(Web 框架),讓開發流程更絲滑?

🧩 分步拆解

1. 創建項目

用 PDM 初始化環境 + 安裝 Django + 創建 Django 項目結構

  • pip install pdm:先裝 PDM 包管理工具 🛠?
  • pdm init:初始化 PDM 項目,生成?pyproject.toml(項目配置文件) 🔧
  • pdm add django:用 PDM 裝 Django 依賴 📦
  • pdm run django-admin startproject Tesla ./:通過 PDM 執行命令,創建 Django 項目(命名?Tesla) 🏗?

2. 啟動 Django 服務

項目創建好后,用?manage.py?啟動開發服務器

  • python manage.py runserver:啟動 Django 本地服務 🚀
  • 輸出里的?http://127.0.0.1:8000/?就是訪問地址啦~ 瀏覽器打開就能看項目前臺 🌐
  • 提示?18 unapplied migrations?別慌!這是 Django 內置表還沒創建,后面用?migrate?命令解決 🐛

3. 項目結構梳理

從 “新建目錄→虛擬環境→配置文件→Django 核心文件” 一步步搭架子

  • PyCharm 項目:新建文件夾 + 虛擬環境(隔離項目依賴) 🌿
  • PDM 項目:生成?pyproject.toml(記錄依賴、腳本等配置) 📄
  • Django 項目:創建同名包(如?Tesla?文件夾) +?manage.py(Django 命令入口) ??

4. 自定義管理命令

用 PDM 的?scripts?配置,把常用 Django 命令 “封裝” 成快捷指令,不用每次敲長命令啦~

toml

[tool.pdm.scripts]
init = { composite = ["makeM","M","createadmin",
]}makeM = 'python manage.py makemigrations'M = 'python manage.py migrate'R = 'python manage.py runserver' # --noreloadT = 'python manage.py test'createadmin = '''python manage.py shell -c "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'adminpass')"'''
  • 在?pyproject.toml?里加?[tool.pdm.scripts]
    • init:組合多個命令(makemigrations?做遷移文件、migrate?執行遷移、createsuperuser?建管理員) 🔄
    • makeM/M/createadmin:分別對應單個 Django 命令(生成遷移、執行遷移、創建超級用戶) 🛠?
    • 效果:以后敲?pdm run init,就能一鍵執行多個操作,超方便! 🚀

5. 快捷命令 & 項目預覽
  • PDM 快捷指令
    • pdm run init:一鍵初始化(建表 + 超級用戶) 🔧
    • pdm run R:啟動 Django 服務(替代?python manage.py runserver) 🚀
    • pdm run T:執行 Django 測試(python manage.py test) 🧪
  • 項目訪問
    • 前臺:http://127.0.0.1:8000/(Django 默認首頁) 🌐
    • 后臺:http://127.0.0.1:8000/admin/(管理員入口) 🔐
    • 默認賬號:admin/adminpass?👑

💻 創建 App

bash

python manage.py startapp yifei

  • 作用:用 Django 內置命令?startapp,創建一個名為 yifei?的 App 文件夾及基礎結構 🏗?
  • 生成的文件:會在項目里新增 yifei/?目錄,包含?models.py(寫數據庫模型)、views.py(寫視圖邏輯)、apps.py(App 配置)等文件,這些是開發功能模塊的基礎文件~

注冊 App(為啥要設置)

“在項目的設置中,把 yifei 加載到安裝列表” → 要修改 Django 項目的?settings.py?文件:

INSTALLED_APPS = [# 其他已有的 App...'yifei',  # 把這行加上,告訴 Django 識別并啟用這個 App
]

  • 作用:Django 項目像一個 “大容器”,INSTALLED_APPS?是 “已安裝 App 清單” 📜
  • 必須注冊的原因:只有加到這里,Django 才會加載 yifei?里的模型、路由、靜態文件等,比如執行數據庫遷移、訪問 App 里的視圖,都得先注冊!

二、視圖和路由?

視圖是干啥的?👉 網站的 “小管家”

視圖(View)就像你點外賣時,商家接到訂單、準備餐品、再送餐的過程~

  • 👉?接收請求:用戶用瀏覽器訪問網址(比如?http://xxx/help?),這就是給 Django 發了個?HTTP 請求,視圖會 “接住” 這個請求 👐
  • 👉?處理并生成響應:視圖收到請求后,會處理邏輯(比如拼一個?hello world?內容),然后返回?HTTP 響應(把內容給用戶看),就像商家做好餐、打包好給你送過來~

# 1. 定義視圖函數:def 是“定義函數”的關鍵字,help 是函數名(你取的),request 是“請求對象”(裝著用戶的訪問信息)
def help(request):  # 2. 準備響應內容:拼一個簡單的字符串,相當于準備要給用戶的“餐品”html = "hello world"  # 3. 返回響應:用 HttpResponse 把內容包起來,送給用戶! HttpResponse 是 Django 幫我們生成響應的工具~return HttpResponse(html)  

  • request:用戶的 “訂單” 信息都在這兒(比如訪問時間、帶的參數等)📦
  • HttpResponse:把內容變成 “能送出去的外賣”,讓瀏覽器能顯示出來 🚀

把 Django 項目想成一家?“網站餐廳”?🍴:

  • 👉 用戶訪問網址 = 點外賣(發請求)
  • 👉 視圖函數 = 后廚 “做菜的廚師”👨🍳:接到訂單(request)→ 做內容(html = "hello world")→ 打包好(HttpResponse)→ 給用戶送餐(返回響應)
  • 👉 最后用戶瀏覽器顯示?hello world?= 收到外賣,開心開吃~

路由的作用

路由(URL 配置)就是?“網址和視圖的連接器”?🔗:

  • 用戶訪問?http://xxx/hello123?→ 路由匹配到?hello123?→ 找到對應的視圖函數(比如?hello)→ 執行函數返回內容給用戶

簡單說:路由決定了 “訪問哪個網址,執行哪個視圖”?,是 Django 里 “網址導航” 的關鍵~

項目主路由(Tesla/urls.py

項目的?urls.py?是?總入口?,負責把 App 的路由 “包含” 進來:

from django.contrib import admin
from django.urls import path, include  # include 用來“包含”其他 App 的路由urlpatterns = [path("admin/", admin.site.urls),  # 后臺管理的路由(默認自帶)# 重點在這行!空字符串 '' 表示“根路徑下的子路由交給 yifei.urls 處理”path('', include("yifei.urls"))  
]

  • path('', include("yifei.urls")):意思是?“只要訪問的網址是根路徑下的(比如?http://xxx/xxx?),就去 yifei?這個 App 的?urls.py?里找具體的路由規則”?🌳

2. 圖 2:App 級路由(yifei/urls.py

每個 App 可以有自己的?urls.py?,負責配置?當前 App 內部的 URL 和視圖的對應關系?:

from django.urls import path
# 從當前 App 的 views.py 導入視圖函數 hello(假設你在 yifei/views.py 里寫了 hello 函數)
from .views import hello  urlpatterns = [# 配置:訪問 'hello123' 這個路徑時,執行 hello 視圖函數path('hello123', hello),  
]

  • path('hello123', hello):當用戶訪問?http://xxx/hello123?→ 觸發?hello?視圖函數 → 返回內容 🌍

3. 圖 3:路由的總結 + 重啟服務
  • 創建路由:就是寫好 App 內的?urls.py?,配置 URL 和視圖的對應關系(如?path('hello123', hello)?)
  • 重啟程序:因為修改了路由配置,需要重啟 Django 服務讓改動生效~
    • 用 PDM 的話,執行?pdm run R(對應?python manage.py runserver?)重啟服務 🚀

完整流程梳理(超清晰版)

  1. 用戶訪問網址:比如?http://127.0.0.1:8000/hello123
  2. 項目主路由匹配Tesla/urls.py?里的?path('', include("yifei.urls"))?→ 發現是空路徑,交給 yifei.urls?處理
  3. App 路由匹配:yifei/urls.py?里的?path('hello123', hello)?→ 匹配到?hello123?,執行?hello?視圖函數
  4. 視圖返回內容hello?函數處理邏輯(比如返回?hello world?)→ 內容返回給用戶瀏覽器

舉個🌰(用戶訪問流程)

假設項目啟動后,本地地址是?http://127.0.0.1:8000?:

  • 用戶在瀏覽器輸入?http://127.0.0.1:8000/hello123
  • 路由依次匹配:主路由 → App 路由 → 找到?hello?視圖 → 執行函數 → 用戶看到?hello?視圖返回的內容~

為啥要分 “項目路由” 和 “App 路由”?

  • 解耦:每個 App 自己管自己的路由,項目主路由只負責 “分配任務”,代碼更清晰 ?
  • 可擴展:比如再加一個?blog?App ,只需要在主路由里加?path('blog/', include('blog.urls'))?,讓?blog?自己管理內部路由即可~

這樣拆分后,整個路由系統就像?“大樹的枝干”?:主路由是樹干,App 路由是樹枝,每個樹枝上的葉子是具體的視圖~? 😊

?

? # Django? ?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91991.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++:設計模式訓練

寫一個鳥類:有一個多態函數:run 寫一個企鵝類,繼承自鳥類:重寫 run 寫一個鴕鳥類,繼承自鳥類,重寫 run 寫一個老鷹類,繼承自鳥類,重寫run 寫一個鳥籠,能夠存放 不同的鳥…

配置Mybatis環境

配置Mybatis環境MyBatis是什么配置Mybatis環境MyBatis是什么 MyBatis 一個支持普通 SQL 查詢、存儲過程以及高級映射的持久層框架。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作,使得開發者可以更專注于 SQL 本身,而不必花費過多…

生產環境中基于Istio的Kubernetes多集群灰度發布架構實戰經驗分享

生產環境中基于Istio的Kubernetes多集群灰度發布架構實戰經驗分享 在大規模分布式微服務架構中,如何在多集群環境下平滑、安全地發布新版本,一直是保證高可用、高可靠的關鍵需求。本文以真實生產環境案例為基礎,分享我們團隊基于Istio Servic…

Kubernetes(k8s)之認識Pod

01了解Pod Pod是Kubernetes創建或部署的最小/最簡單的基本單位,一個Pod代表集群上正在運行的一個進程。 一個Pod封裝一個應用容器(也可以有多個容器),存儲資源、一個獨立的網絡IP以及管理控制容器運行方式的策略選項。它可能由單個容器或多個容器共享組成的資源。 Kubern…

Nginx服務做負載均衡網關

1. 概述 內部Nginx服務器做服務網關,代理后端應用服務,卸載ssl域名證書,將接收的https請求,轉發至后端http服務。華為防火墻負責NAT,啟用服務器負載均衡功能,將公網虛擬IP端口映射到內部多臺Nginx服務器上…

十三、請求響應-請求:日期參數和JSON參數

日期參數代碼:日期參數 //日期時間參數RequestMapping("/dataParam")public String dataParam(DateTimeFormat(pattern "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){System.out.println(updateTime);return "OK";}結果JSON參…

可信數據庫大會現場,TDengine 時序數據庫展示核電場景下的高性能與 AI 創新

設備在升級,場站在擴建,但數據系統卻還在“跟不上”。這正是許多核電企業在推進數字化轉型過程中最真實的感受。高頻采集、長周期存儲、精度要求高……這些構成了對數據庫系統的“煉獄級考驗”。在這樣一個背景下,國產數據庫的能力邊界正在被…

ctflearn-POST practice

靶場地址:165.227.106.113/post.php 解題: 一.分析題目 提示: 知道要用POST請求提交表單,看一下源碼信息 得到可能需要用post請求方式去提交表單,并且傳數據admin和password,這邊提供兩種方式 方法一&…

FPGA實現OV7670攝像頭圖像處理至VGA顯示器

本文還有配套的精品資源,點擊獲取 簡介:本項目基于FPGA技術,結合OV7670攝像頭傳感器進行視頻捕獲,經SDRAM存儲,并通過VGA顯示器展示。同時,集成了中值濾波算法提高圖像清晰度。該項目涉及數字圖像處理系…

使用python寫一套完整的智能體小程序

創建一個簡單的智能體(Agent)程序在人工智能和自動化任務中,智能體(Agent)是指能夠感知環境并通過決策和行動來實現目標的實體。Python 提供了豐富的庫和框架,可以用于構建智能體程序,例如使用 …

電商項目_性能優化_海量數據讀寫、存儲、檢索

海量數據讀寫方式選擇高并發讀寫場景分析無論任何業務系統,無非就是兩個操作:寫和讀。 在海量數據和高并發的場景下,寫和讀就會成為系統性能的瓶頸。下面分析不同業務場景下面臨的問題:側重“高并發讀”的系統場景1:搜…

RabbitMQ面試精講 Day 9:優先級隊列與惰性隊列

【RabbitMQ面試精講 Day 9】優先級隊列與惰性隊列 文章標簽 RabbitMQ,優先級隊列,惰性隊列,消息隊列,面試技巧,系統架構 文章簡述 本文是"RabbitMQ面試精講"系列第9天,深入解析優先級隊列與惰性隊列的實現原理與實戰應用。文章詳細講解優先級隊列的排…

[硬件電路-121]:模擬電路 - 信號處理電路 - 模擬電路中常見的難題

模擬電路設計是電子工程中極具挑戰性的領域,其核心難題源于信號的連續性、元件的非理想特性以及環境干擾的復雜性。以下是模擬電路中常見的難題及其技術本質與解決方案:1. 噪聲與干擾:信號的“隱形殺手”技術本質:模擬信號對微小電…

Java 大視界 -- Java 大數據在智能交通智能停車誘導與車位共享優化中的應用(381)

Java 大視界 -- Java 大數據在智能交通智能停車誘導與車位共享優化中的應用(381)引言:正文:一、智能停車的 “老大難”:不只是 “車位少” 那么簡單1.1 車主與車位的 “錯位困境”1.1.1 信息滯后的 “睜眼瞎”1.1.2 車…

基于落霞歸雁思維框架的自動化測試實踐與探索

基于落霞歸雁思維框架的自動化測試實踐與探索 在當今快速發展的軟件開發領域,自動化測試已成為提高軟件質量和開發效率的關鍵環節。本文將結合落霞歸雁的思維框架——“觀察現象 → 找規律 → 應用規律 → 實踐驗證”,探討如何將其應用于自動化測試領域&…

Unity Shader編程進階:掌握高階渲染技術 C# 實戰案例

Unity Shader編程完全入門指南:從零到實戰 C# 本文將深入探討Unity Shader編程的高級技術,包括自定義光照模型、后處理效果、GPU實例化、表面著色器深度應用等,幫助開發者提升渲染效果與性能優化能力。 提示:內容純個人編寫&#…

(論文速讀)Text-IF:基于語義文本引導的退化感知交互式圖像融合方法

論文信息論文題目:Text-IF: Leveraging Semantic Text Guidance for Degradation-Aware and Interactive Image Fusion(Text-IF:利用語義文本指導退化感知和交互式圖像融合)會議:CVPR2024摘要:圖像融合的目的是將不同源…

python創建一個excel文件

以下是使用Python根據指定名稱創建Excel文件的兩種實現方法,根據需求選擇適合的方案:方法一:使用pandas庫(適合結構化數據) # 安裝依賴(命令行執行) # pip install pandas openpyxlimport panda…

C++高頻知識點(十四)

文章目錄66. 程序什么時候應該使用多線程,什么時候單線程效率高?67. 死鎖的原因和避免死鎖的避免預防死鎖:破壞持有并等待條件68. TCP擁塞控制四個階段輪換過程描述69. C的內存管理70. 構造函數可以是虛函數嗎,析構函數呢66. 程序…

淺窺Claude-Prompting for Agents的Talk

Prompting for Agents先說一句:顏值這么高,你倆要出道啊。此圖基本就是claude倡導的agent prompt結構了,可以看到經過一年時間的演變,基本都是follow這個結構去寫prompt。我比較喜歡用Role→react→task→histroy→few shot→rule…