1. 程式人生 > 實用技巧 >Django基礎

Django基礎

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請求相關的資料