Django基礎
阿新 • • 發佈:2020-07-21
Django框架簡介
MVC框架和MTV框架
MVC,全名是Model View Controller,是軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型(Model)、檢視(View)和控制器(Controller),具有耦合性低、重用性高、生命週期成本低等優點。
想要更詳細的瞭解MVC模式? :>>點我
Django的MTV模式
Model(模型):負責業務物件與資料庫的物件(ORM)
Template(模版):負責如何把頁面展示給使用者
View(檢視):負責業務邏輯,並在適當的時候呼叫Model和Template
此外,Django還有一個urls分發器,它的作用是將一個個URL的頁面請求分發給不同的view處理,view再呼叫相應的Model和Template
Django框架圖示
HTTP 知識補充
HTTP協議訊息的格式
1. 請求(request) 請求方法 路徑 HTTP/1.1\r\n k1:v1\r\n ...\r\n \r\n 請求體 <-- 可以有,可以沒有 2. 響應(response) HTTP/1.1 狀態碼 狀態描述符\r\n k1:v1\r\n Content-Type: text/html; charset=utf8\r\n \r\n 響應正文 <-- HTML內容
Python web框架的本質
a. 收發socket訊息 --> 按照HTTP協議訊息格式去解析訊息
b. 路徑和要執行的函式的對應關係 --> 主要的業務邏輯
c. 字串替換 --> 模板(特殊符號 --> 資料)
一個完整得請求流程
0. 啟動服務端,等待客戶端(使用者的瀏覽器)來連線 1. 在瀏覽器位址列輸入URL,與服務端建立連線,瀏覽器傳送請求 2. 服務端收到請求訊息,解析請求訊息,根據路徑和函式的對應關係,找到將要執行的函式 3. 執行函式,開啟HTML檔案,進行字串替換,得到一個最終要返回的HTML內容 4. 按照HTTP協議的訊息格式要求,把HTML內容回覆給使用者瀏覽器(傳送響應) 5. 瀏覽器收到響應的訊息之後,按照HTML的規則渲染頁面. 6. 關閉連線
Django知識
安裝
1. Django版本 1.11.xx
2. 安裝方式
1. 命令列 --> Python環境(雙版本,pip的使用)
pip3 install django==1.11.11
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==1.11.11
2. PyCharm安裝
Django專案啟動
1. 命令列啟動
在專案的根目錄下(也就是有manage.py的那個目錄),執行:
python3 manage.py runserver IP:埠--> 在指定的IP和埠啟動
python3 manage.py runserver 埠 --> 在指定的埠啟動
python3 manage.py runserver --> 預設在本機的8000埠啟動
2. PyCharm啟動
點綠色的小三角,直接可以啟動Django專案(前提是小三角左邊是你的Django專案名)
建立Django專案
1. 建立方式
1. 命令列建立方式
1. cd到你要儲存Django專案的目錄
2. Django-admin startproject 專案名 --> 會在當前目錄建立Django專案
3. django-admin startproject mysite
2. PyCharm建立方式
1. File --> new project --> ...
2. 建立完之後一定要選在新視窗開啟!!!
3. File --> New project --> 左側選Django --> 右側填專案路徑,並且勾選python.exe
配置Django專案
專案名/settings.py檔案
1. settings.py檔案
1. templates資料夾的位置
2. Templates(存放HTML檔案的配置) <-- 告訴Django去哪兒找我的HTML檔案
2. 靜態檔案(css/js/圖片)
1. STATIC_URL --> 靜態資料夾的別名(在HTML檔案中用的)
2. STATICFILES_DIRS --> 靜態資料夾的真正路徑
例如:
# 靜態檔案儲存目錄的別名
STATIC_URL = '/static/'
# 所有靜態檔案(css/js/圖片)都放在我下面你配置的資料夾中
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
3. 註釋掉 csrf 相關的中介軟體
# 'django.middleware.csrf.CsrfViewMiddleware', # 預設在47行
views.py
1. 專門用來定義處理請求的函式
1. 基本必備三件套
from django.shortcuts import HttpResponse, render, redirect
1. HttpResponse("要返回的內容") --> 通常用於直接返回資料
2. render(request, "html檔案", {"k1": v1}) --> 返回一個HTML檔案或者開啟檔案進行字串替換
3. redirect("URL") --> 告訴使用者的瀏覽器去訪問其他的URL
2. request相關
1. request.method --> 檢視請求的方法
2. request.POST --> 獲取POST請求的資料
ORM
1. 什麼是ORM?
是一種程式設計的方法論(模型), 和語言無關.(其他的語言也有類似的實現.)
import pymysql
pymysql.connect(
...
...
)
1. 不同的程式設計師寫的SQL水平參差不齊
2. 執行效率也參差不齊
python語法 --自動翻譯--> SQL語句
jQuery DOM
$("#d1") --自動翻譯--> document.getElementById("d1")
優點:
1. 簡單,不用自己寫SQL語句
2. 開發效率高
缺點:
1. 記憶你這個特殊的語法
2. 相對於大神些的SQL語句,肯定執行效率有差距
2. ORM的本質(ORM的對應關係:):
類 ---> 資料表
物件 ---> 資料行
屬性 ---> 欄位
按照規定的語法寫,自動翻譯成對應的SQL語句.
3. ORM的功能:
1. 操作資料表 --> 建立表/刪除表/修改表
2. 操作資料行 --> 資料的增刪改查
使用Django的ORM詳細步驟
1. 手動建立資料庫
create database 資料庫名;
2. 在settings.py裡面,配置資料庫的連線資訊
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 連線的資料庫型別
'NAME': 'day62', # 資料庫名稱
'HOST': '127.0.0.1', # 連線資料庫的地址
'PORT': 3306, # 埠
'USER': 'root', # 使用者名稱
'PASSWORD': '123456', # 密碼
}
}
3. 在專案/__init__.py告訴Django用pymysql模組代替MySQLdb來連線MySQL資料庫
import pymysql
pymysql.install_as_MySQLdb()
4. 在app下面的models.py檔案中定義一個類,這個類必須繼承models.Model
# 出版社
class Publisher(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主鍵
# 建立一個varchar(64)的唯一的不為空的欄位
name = models.CharField(max_length=64, null=False, unique=True)
5. 執行兩個命令(在專案的根目錄(有manage.py檔案的那個目錄))
1. python3 manage.py makemigrations --> 把models.py裡面的更改記錄到小本本上
2. python3 manage.py migrate --> 把更改翻譯成SQL語句,去資料庫執行
表和表之間的關係
1、一對多(出版社和書)
class Publisher(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=64)
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=64)
# 外來鍵(models.ForeignKey 一對多)
publisher = models.ForeignKey(to="Publisher")
2、多對多(作者和書)
class Publisher(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=64)
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=64)
# 外來鍵(models.ForeignKey 一對多)
publisher = models.ForeignKey(to="Publisher")
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
# 外來鍵(models.ManyToManyField 多對多)
books = models.ManyToManyField(to="Book")
GET 請求和 POST 請求
1. GET請求和POST請求
都屬於HTTP協議規定的請求方法
2. 什麼時候用GET請求?
1. 瀏覽器想要得到一個HTML頁面的時候
2. 搜尋引擎查詢關鍵字的時候 (GET請求攜帶的資料都拼在了URL上) www.sogo.com/web/?query=迪麗熱巴
3. GET請求攜帶的資料有長度限制 40k
3. 什麼時候用POST?
1. 向後端提交資料(form表單提交資料)
1. 大段的資料
2. 包含隱私的資料
3. 上傳檔案
4. 實際中GET和POST的應用場景
1. GET:
1. 直接在瀏覽器位址列輸入URL訪問網站
2. 點選a標籤
2. POST:
1. 登入註冊
2. 修改(新增)大段的資料
3. 上傳檔案
request相關的知識點
1. request.method
1. GET
2. POST
2. request.POST ——> 所有和POST請求相關的資料
3. request.GET ——> 所有和GET請求相關的資料