Django小白級開發入門

1、Django概述

Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MTV的框架模式,即模型M,視圖V和模版T。
Django 框架的核心組件有:

  • 用于創建模型的對象關系映射
  • 為最終用戶設計較好的管理界面
  • URL 設計
  • 設計者友好的模板語言
  • 緩存系統

Django已經成為web開發者的首選框架,是一個遵循 MVC 設計模式的框架。MVC是Model、View、Controller三個單詞的簡寫,分別代表模型、視圖、控制器。Django其實也是一個MTV 的設計模式。
MTV是Model、Template、View三個單詞的簡寫,分別代表模型、模版、視圖 ?。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以 Django 里更關注的是模型(Model)、模板(Template)和視圖(Views),稱為 MTV模式。

層次職責
模型(Model),即數據存取層處理與數據相關的所有事務:如何存取、如何驗證有效性、包含哪些行為以及數據之間的關系等
模板(Template),即表現層處理與表現相關的決定:如何在頁面或其他類型文檔中進行顯示。
視圖(View),即業務邏輯層存取模型及調取恰當模板的相關邏輯。模型與模板的橋梁。

2、Django項目環境搭建

主要步驟是:

  • 創建并激活虛擬環境
  • 安裝Django模塊
  • 創建Django項目
  • 創建app應用程序
  • 注冊app
  • 編寫Django視圖
  • 編寫Django路由
  • 啟動Django項目

(1)創建并激活虛擬環境

cd D:\djangotest #自己創建空文件夾存放項目
python -m venv djangoenv #創建虛擬環境

運行以下命令,激活虛擬環境

cd D:\djangotest
djangoenv\Scripts\activate #激活虛擬環境

(2)安裝Django模塊

#1激活虛擬環境
cd D:\djangotest
djangoenv\Scripts\activate
#2安裝django模塊
pip install Django #激活虛擬環境后安裝Django模塊

上述命令執行后,會把Django模塊,安裝到了djangoenv/Lib/site-packages 下,也就是說,此Django模塊僅僅在虛擬環境中,而不是安裝在Python全 局環境。目錄如下圖所示:

(3)創建Django項目

安裝了Django之后,我們就可以使用Django的管理工具------>django-admin了

我們創建一個名稱為loginweb的Django項目,命令如下:

#1激活虛擬環境
cd D:\djangotest
djangoenv\Scripts\activate
#2創建一個loginweb的項目
django-admin startproject loginweb

此命令執行后,會在djenv的同級目錄,創建一個名稱loginweb的Django 項目。目錄結構如下圖所示:

用Pycharm打開項目,項目結構文件含義如下:

  • 外層的loginweb目錄:是項目的容器,Django不關心它的名字,我 們可以將它重命名為任何我們喜歡的名字
  • 里面的loginweb目錄:它是一個純python包。我們可以稱呼它為項目的名稱,不能隨意重命名
  • manage.py :它是Django的一個非常重要的工具,通過它可以調用 django shell和數據庫等,如:創建app應用程序、創建數據庫表、清 空數據、啟動項目等操作
  • settings.py :Django 項目的配置文件。包含了項目的默認設置,包 括數據庫信息,調試標志以及其他一些工作的變量
  • urls.py :Django 項目的URL路由聲明,負責把URL模式映射到應用 程序
  • wsgi.py:Web服務器網關接口(Python Web Server Gateway Interface的縮寫),Python應用和Web服務器之間的一種接口,可以 看成是一種協議、規范。它是基于Http協議的,不支持WebSoket
  • asgi.py:異步網關協議接口,能夠處理多種通用的協議類型,包括 HTTP,HTTP2和WebSocket,可以看成ASGI是WSGI的擴展

(4)創建app應用程序

一般一個項目包含多個app應用程序(當然,通用的app也可以在多個項目中使用) 下面我們為loginweb項目,創建login

#1激活虛擬環境
cd D:\djangotest
djangoenv\Scripts\activate
#2切到django項目中
cd loginweb
#3創建一個叫login的應用
django-admin startapp login

上述命令執行后,目錄結構如下圖所示:

(5)注冊app

app應用程序創建以后,必須把app注冊到Django,才能夠被Django項目所管理。我們只需要把login應用的名稱,配置到 loginweb/settings.py文件中即可。如下圖所示:

(6)編寫Django視圖

Django視圖的作用:用于接受Web請求并且返回Web響應的簡單Python 函數。該函數一般定義在各自應用的views.py文件中。在視圖函數中,有 兩個重要的對象:請求對象和響應對象。
下面是一個最簡單的視圖函數:

# 例:在login/views.py 中
from django.http import HttpResponse
# Create your views here.def login(request):return HttpResponse("登錄頁面")

(7)編寫Django路由

Django的路由定義文件為:項目目錄urls.py文件。我們所有的路由配置,都以列表的方式,定義在urls.py文件中,添加我們想要的路由。

# 例:在loginweb/urls.py 中
from django.contrib import admin
from django.urls import path
from login import views
urlpatterns = [path("admin/", admin.site.urls),path("login/",views.login)
]

(8)啟動Django項目

在開發環境下,我們需要在本地啟動Django項目,來開發與調試我們的代 碼。啟動Django項目命令如下:

python manage.py runserver [port]
#[port] 為應用訪問端口,可以缺省不寫,默認為8000。

此時,我們就可以用瀏覽器訪問我們的項目了。結果如下圖所示:

訪問我們寫好的路由:

3、創建登錄頁面

在login底下新寫建一個templates目錄,存放編寫的html前端頁面。

loginweb -> login -> templates -> login.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登錄頁面</title><style>body{text-align:center;}</style>
</head>
<body>
<form action="/login/" method="post">{% csrf_token %}<h1 align="center">登錄頁面</h1><p class="divs"><label for="username">用戶名:</label><input type="text" id="username" name="username" align="center"></p><p class="divs">&nbsp&nbsp&nbsp<label for="password">密碼:</label><input type="password" id="password" name="password"></p><input type="submit" value="登錄"><span style="color:red">{{ error }}</span>
</form></body>
</html>

loginweb -> login -> templates -> index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>這里是主頁</title><style>h1 { color:red }</style>
</head>
<body><h1>這里是主頁</h1>
</body>
</html>

loginweb -> login -> views.py

from django.shortcuts import render,redirect
# Create your views here.def login(request):if request.method == 'POST':username = request.POST.get('username')passowrd = request.POST.get('password')if username=='songqin' and passowrd =='123456':return redirect('/index')else:return render(request,'login.html',{"error":"用戶名或密碼錯誤"})return render(request,'login.html')def index(request):return render(request,'index.html')

loginweb -> loginweb -> urls.py

from django.contrib import admin
from django.urls import path
from login import views
urlpatterns = [path("admin/", admin.site.urls),path("login/",views.login),path("index/",views.index)
]

再次啟動Django項目

python manage.py runserver [port]
#[port] 為應用訪問端口,可以缺省不寫,默認為8000。

訪問http://127.0.0.1:8000/login/項目

輸入不是用戶名密碼不是songqin/123456

輸入songqin/123456點擊登錄 跳轉到主頁面

4、數據庫鏈接

(1)配置mysql

loginweb -> loginweb -> settings.py

默認的數據庫配置如下:

DATABASES = {"default": {"ENGINE": "django.db.backends.sqlite3","NAME": BASE_DIR / "db.sqlite3",}
}

修改后如下所示:

DATABASES = {"default": {"ENGINE": "django.db.backends.mysql","NAME": "數據庫名","USER": "用戶","PASSWORD": "密碼","HOST": "ip","PORT": "3306"}
}

保存后,系統報錯,缺少mysql插件,需要安裝mysqlclient

執行以下命令安裝:

pip install mysqlclient

python manage.py runserver:然后成功運行。

按這個同樣可以運行程序。

(2)自動創建數據庫表

在loginweb -> login -> models.py中,添加用戶類User_01。子類Meta中定義表的元數據,這里指定了表的名稱為f_user_01。

from django.db import models# Create your models here.
class User_01(models.Model):u_id = models.AutoField(primary_key=True)username = models.CharField(max_length=64, null=True)name = models.CharField(max_length=64, null=True)password = models.CharField(max_length=64, null=True)sex = models.CharField(max_length=64, null=True)age = models.CharField(max_length=64, null=True)phone = models.CharField(max_length=64, null=True)email = models.CharField(max_length=64, null=True)unit = models.CharField(max_length=64, null=True)avatar = models.CharField(max_length=64, null=True)status = models.CharField(max_length=64, null=True)create_time = models.CharField(max_length=64, null=True)delete_time = models.CharField(max_length=64, null=True)update_time = models.CharField(max_length=64, null=True)class Meta:db_table = "f_user_01"

執行命令:

# 生成遷移數據
python manage.py makemigrations
# 生成數據庫表
python manage.py migrate 

執行完第一個命令,會在loginweb -> login -> migrations下生成初始化文件,僅僅對我們的類做了一個解讀。

執行完第二個命令,會在數據庫中生成數據庫表。

數據庫表中生成如下,只有f_user_01是我們要生成的表,上面其他的表都是Django系統默認生成的表,暫且不管。

(3)手工創建表進行映射

上面的方式是通過django自動創建models中定義的表。

現在我們需要手工創建表,然后在models中進行映射。

在數據庫中創建表如下:

然后在loginweb -> login -> models.py中,增加代碼如下:

class User(models.Model):id = models.AutoField(primary_key=True)name = models.CharField(max_length=30, null=True)age = models.IntegerField(null=True)email = models.CharField(max_length=50, null=True)class Meta:db_table = "user"

直接運行程序即可。

(4)小結

1、配置mysql,需要安裝mysqlclient,編寫models的實體類,通過遷移命令可以自動生成mysql數據庫表結構。

2、如果數據庫表中已經創建好表,則只在model.py中創建對應實體類即可,不用執行遷移的兩個命令。這里就和java對應上了,直接編寫對應實體類和sql即可。

3、如果數據庫沒有創建好表,可以在models設計好實體類,使用遷移命令即可自動生成mysql數據庫表結構。

(5)添加數據

在loginweb -> login -> views.py中,添加代碼如下:

def addUser(request):models.User.objects.create(name='linfuchi', age=90, email='i miss you')result = {'code': 0,'msg': 'success','data': ''}return HttpResponse(json.dumps(result, ensure_ascii=False), content_type='application/json')

在loginweb -> loginweb -> urls.py中,添加代碼如下:

測試:

數據庫表中的信息:

(6)創建默認的表

在loginweb -> login -> models.py中,增加新的類:

class Info(models.Model):title = models.CharField(max_length=100)author = models.CharField(max_length=100)

此時沒有通過class Meta指定具體的表名信息。

那么會自動創建表嗎?答案是肯定的。

針對python manage.py migrate,提示沒有要執行的。

這是因為遷移記錄已被標記為已應用。

SELECT * FROM django_migrations;

如果發現?login?應用的?0001_initial?遷移記錄已經存在,說明該遷移已經被應用過了。

如果確認?login?應用的?0001_initial?遷移記錄不應該存在,你可以手動刪除該記錄,然后重新執行遷移。

刪除語句:

DELETE FROM django_migrations WHERE app = 'login' AND name = '0001_initial';

然后重新執行遷移:

python manage.py migrate

此時,查詢數據庫可以發現已經有一個新表了:

5、創建自定義命令

在loginweb -> login下創建目錄 management,在其下再創建目錄commands。

這里就是存放命令的目錄,類似于springboot等其他框架技術,遵循“約定大于配置”的原則。

在其下再創建hello.py的文件,整體結構如下:

hello.py的代碼如下:

from django.core.management.base import BaseCommandclass Command(BaseCommand):help = 'Prints a simple greeting message'def handle(self, *args, **options):# 在這里編寫命令的具體邏輯self.stdout.write(self.style.SUCCESS('Hello, Django!'))

執行命令:

在上述代碼中:

help 屬性是命令的簡短描述,當你運行 python manage.py help hello 時會顯示該描述。

handle 方法是命令的核心邏輯,當你運行該命令時,handle 方法會被執行。self.stdout.write 用于輸出信息,self.style.SUCCESS 會將輸出信息以綠色高亮顯示。

6、創建用戶

Django自帶的管理界面提供了便捷的用戶創建功能。

(1)創建超級用戶

在項目根目錄下,打開命令行終端,執行以下命令:

python manage.py createsuperuser

按照提示輸入用戶名、郵箱和密碼。

(2)創建普通用戶

  • 啟動服務器:python manage.py runserver
  • 登錄管理界面:打開瀏覽器,訪問?http://127.0.0.1:8000/admin/,使用之前創建的超級用戶賬號和密碼登錄。
  • 創建新用戶:登錄成功后,在管理界面中找到 “用戶” 選項,點擊 “添加” 按鈕,輸入新用戶的用戶名、密碼等信息,然后點擊 “保存” 即可創建新用戶。

我們創建了賬密為hugh/hugh。

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

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

相關文章

使用 display: flex 實現動態布局:每行兩個 item,單數時最后一個占滿整行

文章目錄 使用 display: flex 實現動態布局&#xff1a;每行兩個 item&#xff0c;單數時最后一個占滿整行 &#x1f3af;一、需求分析二、實現思路三、代碼實現1. HTML 結構2. CSS 樣式關鍵點解析&#xff1a; 四、效果演示HTML 示例&#xff1a;效果&#xff1a; 五、完整代碼…

preloaded-classes裁剪

系統預加載了哪些class類&#xff1f;system/etc/preloaded-classes 修改源代碼&#xff1f; frameworks\base\config\preloaded-classes 默認位置&#xff0c;如果改了不生效&#xff0c;可能有其它模塊的mk文件指定了preloaded-classes覆蓋了framework模塊&#xff0c;例如…

華為配置篇-OSPF基礎實驗

OSPF 一、簡述二、常用命令總結三、實驗3.1 OSPF單區域3.2 OSPF多區域3.3 OSPF 的鄰接關系和 LSA 置底 一、簡述 OSPF&#xff08;開放式最短路徑優先協議&#xff09; 基本定義 全稱&#xff1a;Open Shortest Path First 類型&#xff1a;鏈路狀態路由協議&#xff08;IGP&…

Orale數據文件加錯位置,你直接rm引發的故障

數據庫可能面臨硬件故障、人為錯誤、惡意攻擊、自然災害等多種潛在風險&#xff0c;那么今天這個故障就是由于業務人員加錯數據文件的位置&#xff0c;然后直接從物理層面rm -f了&#xff0c;導致了生產的故障&#xff01; 以下是針對Oracle數據庫物理刪除數據文件后的快速修復…

ChromeDriver下載 最新版本 134.0.6998.35

平時為了下個驅動&#xff0c;到處找挺麻煩&#xff0c;收集了很多無償分享給需要的人&#xff0c;僅供學習和交流。 ChromeDriver及瀏覽器134.0.6998.35 ChromeDriver及瀏覽器133.0.6943.141 ChromeDriver 102.0.5005.61 ChromeDriver 105.0.5195.102 ChromeDriver 108.0…

QEMU源碼全解析 —— 塊設備虛擬化(2)

接前一篇文章:QEMU源碼全解析 —— 塊設備虛擬化(1) 本文內容參考: 《趣談Linux操作系統》 —— 劉超,極客時間 《QEMU/KVM源碼解析與應用》 —— 李強,機械工業出版社 特此致謝! 上一回講解了幾種虛擬化方式(全虛擬化、半虛擬化和硬件輔助虛擬化)的優缺點及其對比…

Redis——緩存穿透、擊穿、雪崩

緩存穿透 什么是緩存穿透 緩存穿透說簡單點就是大量請求的 key 根本不存在于緩存中&#xff0c;導致請求直接到了數據庫上&#xff0c;根本沒有經過緩存這一層。舉個例子&#xff1a;某個黑客故意制造我們緩存中不存在的 key 發起大量請求&#xff0c;導致大量請求落到數據庫…

DELETE/ UPDATE/ INSERT 語句會自動加鎖

在數據庫系統中&#xff0c;DELETE、UPDATE 和 INSERT 語句通常會自動加鎖&#xff0c;以確保數據的一致性和并發控制。具體的鎖類型和效果取決于數據庫的實現&#xff08;如 MySQL、PostgreSQL 等&#xff09;以及事務的隔離級別。以下是這些操作通常加鎖的行為和效果&#xf…

【從零開始學習計算機科學】硬件設計與FPGA原理

硬件設計 硬件設計流程 在設計硬件電路之前,首先要把大的框架和架構要搞清楚,這要求我們搞清楚要實現什么功能,然后找找有否能實現同樣或相似功能的參考電路板(要懂得盡量利用他人的成果,越是有經驗的工程師越會懂得借鑒他人的成果)。如果你找到了的參考設計,最好還是…

SpringCloud—概述—01

一、微服務 1&#xff09;單體架構 業務的所有功能實現都打包在一個 war 包或者 jar 包中&#xff0c;這種方式就稱為 單體架構 例如&#xff0c;學校中實現的博客系統&#xff0c;前端后端數據庫實現&#xff0c;都是在一個項目中 把所有模塊都寫在一個 web 項目中&#x…

C++ 學生成績管理系統

一、項目背景與核心需求 成績管理系統是高校教學管理的重要工具,本系統采用C++面向對象編程實現,主要功能模塊包括: 學生信息管理(學號/姓名/3門課程成績) 成績增刪改查(CRUD)操作 數據持久化存儲 統計分析與報表生成 用戶友好交互界面 二、系統架構設計 1. 類結構設計 …

go的grpc

GRPC介紹 目錄 單體架構微服務架構問題原始的grpc 服務端客戶端原生rpc的問題 grpc的hello world 服務端客戶端 proto文件proto語法 數據類型 基本數據類型其他數據類型 編寫風格多服務 單體架構 只能對整體擴容一榮俱榮&#xff0c;一損俱損代碼耦合&#xff0c;項目的開…

1.12.信息系統的分類【ES】

專家系統&#xff08;ES&#xff09;技術架構深度解析 一、ES核心定義 &#x1f9e0; 智能決策中樞 由三大核心能力構建的領域專家模擬系統&#xff1a; 存儲專家級領域知識&#xff08;10^4規則量級&#xff09;支持不確定性推理&#xff08;置信度>85%&#xff09;動態…

考研數一非數競賽復習之Stolz定理求解數列極限

在非數類大學生數學競賽中&#xff0c;Stolz定理作為一種強大的工具&#xff0c;經常被用來解決和式數列極限的問題&#xff0c;也被譽為離散版的’洛必達’方法&#xff0c;它提供了一種簡潔而有效的方法&#xff0c;使得原本復雜繁瑣的極限計算過程變得直觀明了。本文&#x…

html播放本地音樂

本地有多個音樂文件&#xff0c;想用 html 逐個播放&#xff0c;或循環播放&#xff0c;并設置初始音量。 audio 在 html 中播放音樂文件用 audio 標簽&#xff1a; controls 啟用控制按鈕&#xff0c;如進度條、播放、音量、速度等。不加不顯示任何 widget。autoplay 理應啟…

DeepSeek-Manus精品課合集【附下載】

AI消息不斷&#xff0c;繼DeepSeek之后&#xff0c;又出了一個顛覆性的AI產品Manus&#xff0c;號稱全球第一個通用型AI。相比與DeepSeek&#xff0c; Manus擁有更強的自主性和執行力。 如果說DeepDeek是一個最強大腦&#xff0c;那么Manus就是一個完整的人&#xff01; DeepS…

MySQL復習筆記

MySQL復習筆記 1.MySQL 1.1什么是數據庫 數據庫(DB, DataBase) 概念&#xff1a;數據倉庫&#xff0c;軟件&#xff0c;安裝在操作系統&#xff08;window、linux、mac…&#xff09;之上 作用&#xff1a;存儲數據&#xff0c;管理數據 1.2 數據庫分類 關系型數據庫&#…

從源到目標:深度學習中的遷移學習與領域自適應實踐

引言&#xff1a;數據驅動的智能時代與遷移挑戰 在深度學習快速發展的今天&#xff0c;模型訓練對數據量和質量的依賴成為核心瓶頸。面對新場景時&#xff0c;標注數據不足、數據分布差異等問題常導致模型性能驟降。遷移學習&#xff08;Transfer Learning&#xff09;與領域自…

【網絡】HTTP協議、HTTPS協議

HTTP與HTTPS HTTP協議概述 HTTP&#xff08;超文本傳輸協議&#xff09;&#xff1a;工作在OSI頂層應用層&#xff0c;用于客戶端&#xff08;瀏覽器&#xff09;與服務器之間的通信,B/S模式 無狀態&#xff1a;每次請求獨立&#xff0c;服務器不保存客戶端狀態&#xff08;通…

Jmeter使用介紹

文章目錄 前言Jmeter簡介安裝與配置JDK安裝與配置JMeter安裝與配置 打開JMeter方式一方式二 設置Jmeter語言為中文方法一&#xff08;僅一次性&#xff09;方法二(永久設置成中文) Jmeter文件常用目錄 元件與組件元件組件元件的作用域元件的執行順序第一個案例添加線程組添加 H…