Django基礎概念和MVT架構(一)


1.1Django簡介

Django簡介

  • Django : 發音為 [ `dʒæŋɡəʊ ]. 名稱來源於比利時爵士音樂家 Django Reinhardt
  • Python 語言寫的開源web開發框架, 發布於2005年7月.
  • Django 的主要目的是簡便、快速的開發數據庫驅動的網站.
  • Django 強調代碼復用, 多個組件可以很方便的以 “插件”形式服務於整個框架. 有許多功能強大的第三方插件.
  • Django 遵循MVC設計模式. 但是有一個專有名詞 :MVT  

MVC介紹

  • MVC 全拼為Model-View-Controller
  • MVC 核心思想 : 解耦
    • 讓不同的模塊之間降低耦合, 增強代碼的可擴展性和可移植性, 實現更好的向后續版本的兼容
    • 開發原則 : 高內聚, 低耦合
  • MVC 解析
    • M全拼為Model, 主要封裝對數據庫層的訪問, 內嵌ORM框架, 實現面向對象的編程來操作數據庫.
    • V全拼為View, 用於封裝結果, 內嵌了模板引擎, 實現動態展示數據.
    • C全拼為Controller, 用於接收GET或POST請求, 處理業務邏輯, 與Model和View交互, 返回結果.
  • 當前主流的開發語言如 Java、PHP、Python、... 中都有MVC設計模式.

    MVT介紹

    • MVT 全拼為Model-View-Template
    • MVT 核心思想 : 解耦
    • MVT 解析
      • M (模型)全拼為Model, 與MVC中的M功能相同, 負責數據處理, 內嵌了ORM框架.
      • V (視圖)全拼為View, 與MVC中的C功能相同, 接收HttpRequest, 業務處理,返回HttpResponse.
      • T (模板)全拼為Template, 與MVC中的V功能相同, 負責封裝構造要返回的html, 內嵌了模板引擎.
    • MVT和MVC 差異就在於黑箭頭標識出來的部分.

    總結

    學習 Django, 重點就是研究 Model-View-Template 三個模塊間如何協同工作及各自模塊的代碼如何編寫。

    補充

    設計模式

    • 設計模式:是一套被反復使用、多數人知曉的、經過分類的、代碼設計經驗的總結。
    • 使用設計模式的目的:為了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。
    • 設計模式使代碼編寫真正工程化。
    • 設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。

    高內聚,低耦合

    • 耦合性:指軟件系統結構中各模塊間相互聯系緊密程度的一種度量。

      • 模塊之間聯系越緊密,其耦合性就越強,模塊的獨立性則越差。
      • 模塊間耦合高低取決於模塊間接口的復雜性、調用的方式及傳遞的信息
    • 內聚性:指模塊的功能強度的度量,即一個模塊內部各個元素彼此結合的緊密程度的度量。

      • 若一個模塊內各元素(語名之間、程序段之間)聯系的越緊密,則它的內聚性就越高。

1.2虛擬環境

為什么要搭建虛擬環境?

  • 在開發過程中, 當需要使用python的某些工具包/框架時需要聯網安裝

    • 比如聯網安裝Django框架django1.8.2版本

      sudo pip install django==1.8.2
      
  • 提示:使用如上命令, 會將django1.8.2安裝到/usr/local/lib/python版本/dist-packages路徑下
  • 問題 : 如果在一台電腦上, 想開發多個不同的項目, 需要用到同一個包的不同版本, 如果使用上面的命令, 在同一個目錄下安裝或者更新, 新版本會覆蓋以前的版本, 其它的項目就無法運行了.
  • 解決方案 : 虛擬環境
    • 作用 : 虛擬環境可以搭建獨立的python運行環境, 使得單個項目的運行環境與其它項目互不影響.
    • 所有的虛擬環境都位於/home/下的隱藏目錄.virtualenvs

如何搭建虛擬環境?

  • 安裝虛擬環境的命令 :

    sudo pip install virtualenv
    sudo pip install virtualenvwrapper
    
  • 創建虛擬環境的命令 :

    • 提示:如果不指定python版本,默認安裝的是python2的虛擬環境
    • 在python2中,創建虛擬環境

      mkvirtualenv 虛擬環境名稱
      例 :
      mkvirtualenv py_django
      
    • 在python3中,創建虛擬環境

      mkvirtualenv -p python3 虛擬環境名稱
      例 :
      mkvirtualenv -p python3 py3_django
      • 提示 :

        • 創建虛擬環境需要聯網
        • 創建成功后, 會自動工作在這個虛擬環境上
        • 工作在虛擬環境上, 提示符最前面會出現 “虛擬環境名稱”

      如何使用虛擬環境?

      • 查看虛擬環境的命令 :

          workon 兩次tab鍵

        使用虛擬環境的命令 :

          workon 虛擬環境名稱
        
          例 :使用python2的虛擬環境
          workon py_django
        
          例 :使用python3的虛擬環境
          workon py3_django

        退出虛擬環境的命令 :

          deactivate

        刪除虛擬環境的命令 :

          rmvirtualenv 虛擬環境名稱
        
          例 :刪除虛擬環境py3_django
        
          先退出:deactivate
          再刪除:rmvirtualenv py3_django

        如何在虛擬環境中安裝工具包?

        • python3版本下安裝django1.8.2的包 :

            pip install 包名稱
          
            例 : 安裝django1.8.2的包
            pip install django==1.8.2
          • 工具包安裝的位置 :

            • python2版本下:
              • ~/.virtualenvs/py_django/lib/python2.7/site-packages/
            • python3版本下:
              • ~/.virtualenvs/py3_django/lib/python3.5/site-packages
          • 查看虛擬環境中安裝的包 :

              pip freeze

1.3創建Django項目

  • 在Django項目中, 項目的組織結構為 : 一個項目包含多個應用, 一個應用對應一個業務模塊.
  • 示例 : 創建項目的名稱為BookManager, 創建應用名稱為Book, 完成圖書信息的維護.
  • 提示 : 在當前用戶的某個目錄下創建項目, 這樣不會發生權限問題.

創建項目

  • ~/Desktop/.../目錄下創建項目BookManager

      例 : 在桌面創建項目
      cd ~/Desktop/
    
  • 創建項目的命令 :

    • 創建好項目就可以使用PyCharm打開.

      django-admin startproject 項目名稱
      例 :創建項目BookManager
      django-admin startproject BookManager
      
  • 項目結構

    • BookManager : 是與項目同名的文件, 內部包含如下項目的配置文件.
      • init.py : 是表示文件BookManager可以被當作包使用.
      • settings.py : 是項目的整體配置文件.
      • urls.py : 是項目的URL配置文件.
      • wsgi.py : 是項目與WSGI兼容的Web服務器入口.
    • manage.py : 是項目運行的入口, 指定配置文件路徑.

創建應用

  • BookManager項目中, 創建應用Book

      cd BookManager/
      python manage.py startapp Book
    
  • 項目結構

    • admin.py : 是后台的站點管理注冊文件.
    • init.py : 是表示文件Book可以被當作包使用.
    • migrations : 是做模型遷移的.
    • models.py : 是處理數據的.MVT中的M
    • tests.py : 是做測試用的.
    • views.py : 是處理業務邏輯的.MVT中的V

選取並添加對應虛擬環境下的python

  • 虛擬環境py_django下的python

      which python
    
      結果:
      /home/python/.virtualenvs/py_django/bin/python
    
  • 虛擬環境py3_django下的python

      which python
    
      結果:
      /home/python/.virtualenvs/py3_django/bin/python

    安裝應用

  • 安裝應用前安裝應用后

    測試服務器

    • 在開發階段, 為了能夠快速預覽到開發的效果, Django提供了一個純Python編寫的輕量級web服務器,
      • 僅在開發階段使用,非正式服務器
    • 運行測試服務器的命令 :
        python manage.py runserver ip:端口
      
        python manage.py runserver 172.16.21.25:8001
        對應:
        http://172.16.21.25:8001/
      
    • ip和端口號可以不寫, 默認ip為127.0.0.1;端口號為8000.

        python manage.py runserver
        對應:
        http://127.0.0.1:8000/
      • 提示:如果項目的虛擬環境由py3_django切換到py_django時,需要同時切換測試服務器的虛擬環境到py_django

      • 輸入http://127.0.0.1:8000/即可訪問.

        • 刷新網頁就可以查看每次代碼執行效果
        • 如果增加代碼、修改代碼、刪除代碼服務器會自動重啟.
        • ctrl+c停止服務器

1.4模型

  • 當前項目的開發, 都是數據驅動的。
  • 以下為書籍信息管理的數據關系:書籍和人物是 :一對多關系

    • 要先分析出項目中所需要的數據, 然后設計數據庫表.

    書籍信息表

    字段名 字段類型 字段說明
    id AutoField 主鍵
    name CharField 書名
    id name
    1 西游記
    2 三國演義

    人物信息表

    字段名 字段類型 字段說明
    id AutoField 主鍵
    name CharField 人名
    gender BooleanField 性別
    book ForeignKey 外鍵
    id name gender book
    1 孫悟空 False 西游記
    2 白骨精 True 西游記
    3 曹操 False 三國演義
    4 貂蟬 True 三國演義

    使用Django進行數據庫開發的提示 :

    • MVT設計模式中的Model, 專門負責和數據庫交互.對應(models.py)
    • 由於Model中內嵌了ORM框架, 所以不需要直接面向數據庫編程.
    • 而是定義模型類, 通過模型類和對象完成數據庫表的增刪改查.
    • ORM框架就是把數據庫表的行與相應的對象建立關聯, 互相轉換.使得數據庫的操作面向對象.

    使用Django進行數據庫開發的步驟 :

    1. 定義模型類
    2. 模型遷移
    3. 操作數據庫

    1. 定義模型類

    • 根據書籍表結構設計模型類:
      • 模型類:BookInfo
      • 書籍名稱字段:name
    • 根據人物表結構設計模型類:
      • 模型類:PeopleInfo
      • 人物姓名字段:name
      • 人物性別字段:gender
      • 外鍵約束:book
        • 外鍵要指定所屬的模型類 book = models.ForeignKey(BookInfo)
    • 說明 :
      • 書籍-人物的關系為一對多. 一本書中可以有多個英雄.
      • 不需要定義主鍵字段, 在生成表時會自動添加, 並且值為自增長.
    • 根據數據庫表的設計

      • models.py中定義模型類,繼承自models.Model

        from django.db import models # 准備書籍列表信息的模型類 class BookInfo(models.Model): # 創建字段,字段類型... name = models.CharField(max_length=10) # 准備人物列表信息的模型類 class PeopleInfo(models.Model): name = models.CharField(max_length=10) gender = models.BooleanField() # 外鍵約束:人物屬於哪本書 book = models.ForeignKey(BookInfo) # 模型類准備好之后,需要創建和執行遷移==建表 

    2. 模型遷移 (建表)

    • 遷移由兩步完成 :

      • 生成遷移文件:根據模型類生成創建表的語句
        python manage.py makemigrations
        
      • 執行遷移:根據第一步生成的語句在數據庫中創建表
        python manage.py migrate
        
    • 遷移前

    • 遷移后

      • 提示:默認采用sqlite3數據庫來存儲數據

      3. 操作數據庫

      • 通過模型類和對象完成數據庫表的增刪改查.
      • 進入項目的shell, 進行簡單的增刪改查 API操作.
        • ctrl+d或輸入quit()可以退出shell.
          python manage.py shell
          
      • 測試增刪改查 API操作

          # 引入應用中的模型類 from Book.models import * # 創建書籍模型對象 book = BookInfo() # 新增記錄 book.name = 'xiyouji' # 保存記錄 book.save() # 查詢記錄 BookInfo.objects.all() # 刪除記錄 : 再查詢時,表里數據為空 book.delete() # 創建人物模型對象 people = PeopleInfo() people.name = 'sunwukong' people.gender = True people.book = book people.save() # 外鍵查詢 : 查詢書里面保存的人物信息(peopleinfo_set是隱式生成的) book.peopleinfo_set.all() # 退出shell quit()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM