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 三個模塊間如何協同工做及各自模塊的代碼如何編寫。html

    補充

    設計模式

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

    高內聚,低耦合

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

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

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

1.2虛擬環境

爲何要搭建虛擬環境?

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

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

      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
  • 建立虛擬環境的命令 :django

    • 提示:若是不指定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()
相關文章
相關標籤/搜索