Django必知必會(一)相關配置介紹及動態URL

在這裏插入圖片描述

一、Django 介紹

在 Web 早期階段,開發者手動編寫每個頁面。更新網站要編輯 HTML;重新設計要重新制作每一個網頁,而 且一次只能改一個網頁。隨着網站體量的增大,這種方式立馬變得繁瑣、浪費時間,最終變得不切實際。

NCSA(National Center for Supercomputing Applications,國家超級計算應用中心,第一款圖形 Web 瀏覽器 Mosaic 就是在這裏開發出來的)一羣富於創新的黑客解決了這個問題,他們讓 Web 服務器派生外部程序, 動態生成 HTML。他們把這一協議稱爲通用網關接口(Common Gateway Interface,CGI),自此,Web 完全 變了樣。如今,很難想象 CGI 帶來的變革:CGI 不再把 HTML 頁面視作硬盤中存儲的文件,而是把頁面看 做資源,可以按需動態生成。

CGI 的開發促使了第一代動態網站的出現。然而,CGI 自身也有問題:CGI 腳本包含大量重複的樣板代碼, 導致代碼難以複用,而且新手難以編寫和理解。

PHP 解決了這些問題中的多數,在 Web 開發界引起了一陣風暴。PHP 現在是創建動態網站最流行的工具, 多門類似的語言(ASP、JSP,等等)都參照了 PHP 的設計原則。PHP 的主要創新是易於使用:PHP 代碼直 接嵌入普通的 HTML 中;對學過 HTML 的人來說,學習曲線極爲平緩。

但是,PHP 也有自身的問題:就是因爲易於使用,寫出的代碼凌亂、重複,設計不周。更糟的是,PHP 沒有 爲程序員提供多少防止安全漏洞的保護機制,很多 PHP 開發者意識到這一點再去學習相關的知識就晚了。

上述問題以及類似的缺陷直接促使了“第三代”Web 開發框架的湧現。Web 開發的新方式也提升了人們的雄 心,現在 Web 開發者每天所做的工作越來越多。

Django 就是爲了迎接這些雄心而誕生的。

二、Django入門及配置

  1. 創建Django項目:django-admin startproject 項目名

  2. Setting 配置介紹:

    • TIME_ZONE 時區設置
    • INSTALLED_APPS Django默認自帶的應用
      • django.contrib.admin:管理後臺
      • django.contrib.auth:身份驗證系統
      • django.contrib.contenttypes:內容類型框架
      • django.contrib.sessions:會話框架
      • django.contrib.messages:消息框架
      • django.contrib.staticfiles:管理靜態文件的框架
  3. 常見設計模式:MVC

    • 模型(M)是數據的表述。它不是真正的數據,而是數據的接口。使用模型從數據庫中獲取數據時, 無需知道底層數據庫錯綜複雜的知識。模型通常還會爲數據庫提供一層抽象,這樣同一個模型就能使 用不同的數據庫。
    • 是你看到的界面。它是模型的表現層。在電腦中,視圖是你在瀏覽器中看到的 Web 應用的頁面,或者是桌面應用的 UI。視圖還提供了收集用戶輸入的接口。
    • 控制器©控制模型和視圖之間的信息流動。它通過程序邏輯判斷通過模型從數據庫中獲取什麼信 息,以及把什麼信息傳給視圖。它還通過視圖從用戶那裏收集信息,並且實現業務邏輯:變更視圖, 或者通過模型修改數據,或者二者兼具。
  4. Django設計模式:MVT

    • 模型(M)既數據訪問層,這一層包含了所有數據相關的功能及數據庫和數據模型
    • 模版(T)既表現層,這一層包含了表現的相關決策
    • 視圖(V)既業務邏輯層,這一層包含了訪問模型和如何找到適合的模版的邏輯,視圖就是模型和模版的橋樑
  5. 視圖和URL:配置URL相當於Django驅動網站的目錄,簡單來講,URL配置把URL映射到相應的視圖函數上。我們以這種方式告訴Django,訪問哪些URL時調用哪些代碼。在使用命令創建的DJango項目中是關於Django項目的一些配置管理文件其中 urls.py 是Django項目中URL的聲明配置文件。

    1. include:用於導入另一個URL配置文件
    2. urlpatterns:負責定義URL和處理URL的代碼之間的映射
    3. url():這個函數負責告訴Django如何處理配置的URL,使用哪些類方法或者函數
  6. URL格式說明:url(r"^index/$", IndexView.as_view(), name=“index”)

    1. 正則表達式:DJango的URL配置允許使用任何複雜的正則表達式匹配複雜的URL
    2. r :在Python語法裏,字符串中的反斜線代表某種轉義特殊字符,所以需要使用r來聲明爲“原始字符串”裏面的反斜線不用於轉義
    3. :表示在字符串的開頭匹配模型,例如:r“index/” 表示任何以 index/ 開頭的URL都可以被匹配
    4. rindex/:表示在字符串的結尾匹配模型,例如:r“index/” 表示任何以 /index/ 結尾的URL都可以被匹配
  7. ROOT_URLCONF:它是DJango中一個重要的配置選項,它告訴DjangoURL配置在哪個Python模塊中,當接受請求後,Django 加載 ROOT_URLCONF 設置指定的 URL 配置,然後按照順序檢查URL配置中每個URL的配置模式,依次與請求的URL做比較,直到找到配置模式爲止。

  8. Django處理請求的過程:

    1. 請求URL例如:/index
    2. Django 查看 ROOT_URLCONF 設置,找到根 URL 配置
    3. Django 比較 URL 配置中的各個 URL 模式,找到與 /hello/ 匹配的配置模式
    4. 找到匹配的配置模式後,調用對應的視圖函數
    5. 視圖函數返回對應的數據
  9. URL配置和松耦合:松耦合是一種軟件開發方式,其價值是讓組件可以互換,如何兩部分代碼是送耦合,那個改動其中一部分,對另一部分幾乎沒有影響,在DJango應用中,URL的定義與所調用視圖的函數是送耦合的關係,既某個功能使用哪個URL與視圖函數的實現本身放在兩個地方。

  10. 動態URL:可以攜帶參數的URL,首先HTTP協議向服務器傳參的途徑:

    • 使用正則提取URL特定部分,如:/api/index/2018
    • 查詢字符串(query string)形如 key1=value1&key2=value2
    • 請求體(body)中發送數據,如表單數據、Json、XML
    • HTTP報文的頭 header 中
  11. URL路徑參數:如果想從URL中獲取值,需要在正則表達式中使用分組

    • 位置參數:http://127.0.0.1:8000/18/188/ 提取 18、188
    url(r'^(\d+)/(\d+)/$', views.index)
    
    • 關鍵字參數:同樣提取 http://127.0.0.1:8000/18/188/ 18、188
    url(r'^(?P<value1>\d+)/(?P<value2>\d+)/$', views.index)
    

    當使用了關鍵字參數時,那麼視圖函數中的偏移量的參數名也要和關鍵字參數名相同

  12. 查詢字符串:獲取請求路徑中的查詢字符串參數(形如?k1=v1&k2=v2)通過 request.GET屬性獲取,返回QueryDict對象,使用 request.GET.get() 來獲取參數

  13. 請求體:請求體數據格式不固定,可以是表單類型字符串,也可以是JSON、XML(可以發送請求體數據的請求方式有 POST、PUT、PATCH、DELETE)

    • 表單類型:前端發送的表單類型的請求體數據,可以request.POST 屬性獲取,返回QueryDict對象
    • 非表單類型:DJango無法自動解析可以直接 request.body 獲取原始的請求體數據,然後按照對應的格式解析即可
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章