Django + DebugToolbar構建全棧WEB開發

java06051515發表於2018-11-19

Django是什麼

Python 最流行的WEB開發框架,很多公司都用 Django 來做專案,內建的ORM模型非常方便和易用,是一個全能的WEB開發框架。

Django有很多優秀的特性:

  • Python3 完整支援的框架

  • 支援 Sqlite / MySQL / PostgreSQL 等資料庫,強大的 migrate 機制,修改對資料庫欄位變更非常便利,能自動生成變更的SQL語句,並且做規則檢查

  • 靈活的模板引擎,透過內建的 Filter Tag 做模板,模板能繼承,可以方便的組織模板的框架

  • 安全的框架,不論是 CSRF ,還是 XSS 或者 SQL隱碼攻擊 ,預設的安全選項等級比較高,給很多初學者很好的安全保護

  • 完整的單元測試支援,能模擬 Cookie Session 等場景做整合測試,極大方便了前後端分離的專案的整合測試

  • Debug 功能強大,程式碼儲存後就立即生效, 異常錯誤後的堆疊資訊甚至能看到每個呼叫幀的區域性變數,極大的方便了開發者

  • 非常靈活的擴充套件,所以產生了很多優秀的擴充套件

Django-Debug-Toolbar

基於 Django 的靈活擴充套件,這次推薦一個非常實用的擴充套件: django-debug-toolbar 。  Django 內建的 Debug 特性,只有在發生異常後能檢視異常資訊,但是開發過程當中,我們想知道:

  • 資料庫調研時間、次數是多少

  • 模板渲染的時間是多久

  • 靜態檔案訪問情況

  • ….

透過 django-debug-toolbar 極大的提升了開發效率,這個教程教會你如何安裝在 Django 中使用 django-debug-toolbar

在雲伺服器上安裝Django的開發環境

本教程基於 Ubuntu 16.04.4 LTS Python3 ,開始這個教程前,需要到滴滴雲購買一個 Ubuntu 16.04.4 LTS 的雲伺服器,由於需要提供WEB服務,所以需要買一個帶公網IP的雲伺服器。滴滴雲的映象內建了很多開發工具,比如 python3 sysstat iotop 等常見工具,不需要額外再安裝其他工具,非常順手。

滴滴雲的雲伺服器預設的登入名是 dc2-user , 並不是 root 登入,如果需要 root 操作的指令,需要透過 sudo 操作才能進行,這樣確保我們日常的操作不會用 root 這個身份來管理伺服器,避免危險的誤操作。  如果你習慣用root管理你的伺服器,強烈建議改掉這個壞習慣,用sudo吧

透過dc2-user登入伺服器

儘量選擇用 ssh公鑰登入伺服器 ,避免輸入密碼,並且關閉伺服器的密碼登入,可以極大的提升伺服器的安全性,畢竟ssh公鑰證照的安全等級比密碼安全等級高。

登入後可以看到伺服器的資訊( YOUR_SERVER_IP 可以替換成你的伺服器):

安裝Django

Python推薦的包管理工具是 pip ,類似Ubuntu裡面的 apt 或者CentOS的 YUM ,透過 pip 能方便的安裝常見的安裝包。

pip 預設的源是在海外,滴滴雲提供了一個預設的 pip 源,避免訪問海外的倉庫,下載速度非常的快。所以我們需要先配置一下 pip 源。

Django 預設不支援Python2.x,所以我們需要用 pip3 來安裝 django  和  django-debug-toolbar

1

2

3

4

dc2 - user @ 10 - 255 - 20 - 246 : ~ $    sudo apt - get install python3 - pip

dc2 - user @ 10 - 255 - 20 - 246 : ~ $    sudo pip3 install django django - debug - toolbar

建立一個Django的專案

安裝好 Django 後,可以透過 django-admin 來維護和管理專案。首先,我們建立一個 Django 專案  djsite

建立第一個專案,檢視生成的目錄結構:

執行你的第一個Django專案

生成的djite目錄下有 manage.py ,透過這個檔案來做專案的常規操作,比如建立超級管理員、啟動伺服器。

預設建立的專案的資料庫引擎是 sqlite ,建立後的專案需要初始化資料庫,確保 django 內建的資料庫版本管理、 session 等特效能正常使用。

透過 manange.py migrate 來初始化資料庫:

這樣就完成了資料庫的初始化工作。

啟動Web伺服器

透過 manange.py runserver 來啟動伺服器,預設伺服器會執行在 127.0.0.1:8000 ,只能本機訪問。

你可以透過curl看一下web伺服器是否正常執行:

透過公網訪問你的雲伺服器

如果我們需要公網訪問,那麼就需要讓伺服器執行在非本機的80埠,但是如果執行在80埠,就需要 root 許可權,我們透過sudo 就可以了。

透過公網IP就可以直接訪問你的WEB伺服器。

修改settings.py

其實這時候如果你直接訪問伺服器的80埠,會遇到提醒( YOUR_HOST_IP 是你的伺服器IP):

1

2

3

DisallowedHost at /

Invalid HTTP_HOST header : 'YOUR_HOST_IP' . You may need to add 'YOUR_HOST_IP' to ALLOWED_HOSTS .

 

這時候就體現了 Django 的預設安全設定很體貼了,避免犯初級錯誤。
因為你當前的伺服器是在 Debug 模式,只能透過 127.0.0.1 的方式來訪問,如果你要透過公網訪問,有兩張方式:

  • 方法一:修改 settings.py Debug = True Debug = False ,關閉Debug模式

  • 方法二:保留 Debug 模式,把你的公網IP加入到 ALLOWED_HOSTS

1

2

ALLOWED_HOSTS = [ 'YOUR_HOST_IP' ]

 


這時候在重新啟動服務就可以正常訪問了。

1

2

dc2 - user @ 10 - 255 - 20 - 246 : ~ / djsite $ sudo python3 manage . py runserver 0.0.0.0 : 80

 


Django 專案最大的特點是配置檔案是 Python ,所以可以把配置當成程式碼來使用。

引入django-debug-toolbar

要在專案中使用 django-debug-toolbar ,最簡單的方式就是修改 settings.py

修改 INSTALLED_APPS :

修改 MIDDLEWARE :

新增 INTERNAL_IPS 選項

通常情況下, django-debug-toolbar 只會對開發者提供展示,如果你是本機開發,只需要允許 127.0.0.1 訪問就可以,本次是在伺服器上訪問,你可以全部放開訪問,也可以透過訪問 ip.cn 來得到你的出口IP地址,把你的出口IP地址加入到 INTERNAL_IPS 中。

1

2

3

[ jinti @ jintis - MBP : ~ ] $ curl ip . cn

當前 IP : 183.128.190.90 來自 : 浙江省杭州市 電信

 


在這個教程中,把我自己家裡的公網ip 183.128.190.90 寫入到 INTERNAL_IPS 中。

1

2

INTERNAL_IPS = [ '183.128.190.90' ]

 


修改urls.py

django-debug-toolbar 會在每一個html的請求中注入一段js,我們需要修改一下urls.py,確保這些js資源能正常訪問。

訪問看看效果

這是可以透過訪問 ,測試 django-debug-toolbar 是否正常工作。 注:  需要注意我的雲伺服器是透過80埠開放服務

如果正常工作後,會在頁面的右上角有個浮動的工具欄,可以看 SQL 快取 模板 的執行時間,特別是 SQL ,你會發現訪問一個頁面,預設會訪問很多資料庫訪問。

也可以透過看 Request ,分析你的請求攜帶的資訊,幫助你快速分析資料是否提交正確。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2220645/,如需轉載,請註明出處,否則將追究法律責任。

相關文章