Django實踐-使用管理站點管理自己的應用

因為Django是在快節奏的新聞編輯室環境中開發的,它旨在使常見的Web開發任務變得快速而容易,我們可以在編寫很少代碼的情況下完成強大的功能。本文就在這個思想的指導下產生。讓我們見證一下寥寥幾行代碼即可擁有一個管理站點的魔幻魅力。

管理站點基本架構

MVC思想,包括模型層、視圖層、模板層

模型層

Django提供了一個抽象層(“模型”),用于構造和操縱Web應用程序的數據。模型是數據的唯一的、權威的信息源。它包含你所儲存數據的必要字段和行為。通常,每個模型對應數據庫中唯一的一張表。

每個模型都是django.db.models.Model 的一個Python 子類。
模型的每個屬性都表示為數據庫中的一個字段。
Django 提供一套自動生成的用于數據庫訪問的API。
一旦你建立好數據模型,Django 會自動為你生成一套數據庫抽象的API,可以讓你創建、檢索、更新和刪除對象。

最基本的對模型的應用僅僅只需要定義所需字段即可。
例如:

class Vm(models.Model):
  name = models.CharField('云主機名稱', null=False, max_length=20)
  image = models.CharField('云主機鏡像', max_length=20) 

視圖層

Django 具有“視圖”的概念,用于封裝負責處理用戶請求及返回響應的邏輯。視圖是一個可調用對象,可以接收一個請求然后返回一個響應。這個可調用對象不僅僅限于函數,Django 同時提供一些可以用作視圖的類。它們允許你結構化你的視圖并且利用繼承和混合重用代碼。Django 提供基本的視圖類,它們適用于絕大多數的應用。所有的視圖類繼承自View 類,它負責將視圖連接到URL、HTTP 方法調度和其它簡單的功能。
視圖反映基本的Web開發中的一個常見情況:根據URL中的參數從數據庫中獲取數據、載入模板文件然后返回渲染后的模板。 由于這種情況非常普遍,Django提供了一種叫做“generic views”的系統可以方便地進行處理。

Generic views會將常見的模式抽象化,可以使你在編寫app時甚至不需要編寫Python代碼。

模板層

模板層提供了設計友好的語法來展示信息給用戶。
作為Web 框架,Django 需要一種很便利的方法以動態地生成HTML。最常見的做法是使用模板。模板包含所需HTML 輸出的靜態部分,以及一些特殊的語法,描述如何將動態內容插入。

Django 項目可以配置一個或多個模板引擎(甚至是零,如果你不需要使用模板)。Django 的模板系統自帶內建的后臺 —— 稱為Django 模板語言(DTL),以及另外一種流行的Jinja2。其他的模板語言的后端,可查找第三方庫。

Django 為加載和渲染模板定義了一套標準的API,與具體的后臺無關。加載包括根據給定的標識找到模板然后預處理,通常會將它編譯好放在內存中。渲染表示使用Context 數據對模板插值并返回生成的字符串。

Django 模板語言 是Django 原生的模板系統。直到Django 1.8,這是唯一可用的內置選項。盡管,它閉門造車,并且偏重某些方面,但是它仍然是一個優秀的模版庫。如果沒有特別緊急的理由選擇另外一種后臺,你應該使用DTL,特別是你編寫可插拔的應用并打算發布其模板的時候。Django 中包含模板的標準應用,例如django.contrib.admin,都使用DTL。

又由于歷史遺留原因,通用支持的模板引擎和Django實現的模板語言都在django.template 命名空間中。
模板引擎通過TEMPLATES 設置來配置。它是一個設置選項列表,與引擎一一對應。默認的值為空。在settings.py 定義了一些有用的值:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            # ... some options here ...
        },
    },
]

BACKEND 是一個指向實現了Django模板后端API的模板引擎類的帶點的Python路徑。內置的后端有 django.template.backends.django.DjangoTemplates 和 django.template.backends.jinja2.Jinja2.

由于絕大多數引擎都是從文件加載模板的,所以每種模板引擎都包含兩項通用設置:

  1. DIRS 定義了一個目錄列表,模板引擎按列表順序搜索這些目錄以查找模板源文件。
  2. APP_DIRS 告訴模板引擎是否應該進入每個已安裝的應用中查找模板。每種模板引擎后端都定義了一個慣用的名稱作為應用內部存放模板的子目錄名稱。

如果你的app只是簡單的操作,沒有復雜的業務,你不需要編寫Python代碼。

Admin 界面

Django 最強大的部分之一是自動生成的Admin 界面。它讀取模型中的元數據來提供一個強大的、生產環境就緒的界面,使內容提供者能立即用它向站點中添加內容。

  1. 添加 'django.contrib.admin'到INSTALLED_APPS 設置中.
  2. admin有四個依賴 - django.contrib.auth, django.contrib.contenttypes, django.contrib.messages 和django.contrib.sessions. 如果這些應用沒有在 INSTALLED_APPS 列表中, 那你要把它們添加到該列表中.
  3. 把django.contrib.messages.context_processors.messages 添加到TEMPLATES 中DjangoTemplates后臺的'context_processors'選項中,同樣把django.contrib.auth.middleware.AuthenticationMiddleware 和 django.contrib.messages.middleware.MessageMiddleware 添加到 MIDDLEWARE_CLASSES. (這些默認都是激活的,所以如果你手工操作過的話就需要按照以上方法進行設置..)
  4. 確定應用中的哪些模型應該在Admin 界面中可以編輯。
  5. 給每個模型創建一個ModelAdmin 類,封裝模型自定義的Admin 功能和選項。
  6. 實例化AdminSite 并且告訴它你的每一個模塊和ModelAdmin 類。
  7. 將AdminSite 實例綁定到URLconf。

示例

創建app

在我們前一篇文章中建立的項目中,創建一個cloud應用,在命令行中作如下操作:

E:
cd E:\PROJECTS\TEST\dj_admin      
django-admin.py startapp cloud

當前目錄為 結構為:

dj_admin
    |-- cloud
    |   |--migrations
    |   |-- __init__.py
    |   |-- admin.py
    |   |-- apps.py
    |   |-- models.py
    |   |-- tests.py
    |   |-- views.py
    |-- dj_admin       
    |-- manage.py
編輯模型文件

我們修改 cloud/models.py 文件,代碼如下:

# encoding=utf-8
from __future__ import unicode_literals
from django.db import models

class Vm(models.Model):
  name = models.CharField('云主機名稱', null=False, max_length=20)
  image = models.CharField('云主機鏡像', max_length=20) 

以上的類名代表了數據庫表名,且繼承了models.Model,類里面的字段代表數據表中的字段(name),數據類型則由CharField(相當于varchar)、null表示數據庫中該字段是否允許為NULL,max_length 參數限定長度。

注冊app

接下來在settings.py中找到INSTALLED_APPS這一項,如下:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'cloud',               # 添加此項
)
注冊模型到管理站點

為了讓 admin 界面管理某個數據模型,我們需要先注冊該數據模型到 admin。修改 cloud/admin.py:

# encoding=utf-8
from django.contrib import admin
from cloud.models import Vm

# Register your models here.


admin.site.register(Vm)
我們所做的事情

好了,我們僅僅只需要做上面一些編寫和設置,即可以實現對Vm這一實體的所有操作,即我們常用的增、刪、改、查。我們做了如下動作:

創建app
編輯模型文件
注冊app到配置項中
注冊模型到管理站點
啟動服務查看效果

我們在命令行中通過命令行啟動服務

python manage.py makemigrations # 讓 Django 知道我們在模型上有一些變更
python manage.py migrate   # 創建表結構
python manage.py runserver 0.0.0.0:8000   # 0.0.0.0 讓其它電腦可連接到此服務器,8000 為端口號。如果不說明,那么端口號默認為 8000。
啟動服務.png

在瀏覽器中訪問我們的站點http://localhost:8000/admin/,并登錄??梢钥吹焦芾砹斜眄?,多了cloud管理列表:

自定義模型管理.png

添加Vm頁面

添加Vm.png

Vm列表

vmList.png

修改Vm和編輯Vm

詳情和修改.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容