1. 程式人生 > >Django(四)後臺管理及Field引數

Django(四)後臺管理及Field引數

Django 提供了基於 web 的管理工具,自動管理工具是 django.contrib的一部分,django.contrib 是一套龐大的功能集,它是Django基本程式碼的組成部分。我們只要加少些程式碼,就可以實現強大的後臺功能。與後臺相關檔案是每個app中的 admin.py 。下面就來學習一下Django的後臺。

建立超級使用者

後臺管理都需要登入,登入的使用者就是超級使用者,這個使用者擁有所有的許可權,而且只能在本地專案裡通過Django命令建立,也就是通過伺服器是無法建立,保證了安全性,當然這個使用者可以建立多個下屬使用者,並給這些使用者授權。這個超級使用者一般不要刪除重新建。

在之前的基礎上我們檢視資料庫(之前講述過就不贅述),預設的auth_*表都是關於超級使用者的關聯表,由於還沒有建立超級使用者,所以只有auth_permission表有內容,裡面包括了超級使用者擁有的許可權。其它的auth_*表都是空的。我們現在就建立超級使用者,還是在專案的第一層demo下執行(輸入使用者名稱、郵箱、和密碼,不要設定漢字):

python manage.py createsuperuser

這裡寫圖片描述

然後可以檢視資料庫,在auth_user表裡就可以看到建的超級使用者了。

登入後臺

建立好了後臺的管理使用者,我們還得把模型註冊到後臺裡去,不然後臺就只是一個空架子。還有就是後臺登入的url必須配置。

  • 後臺模型註冊

    在login這個app模型中找到admin.py檔案,admin.py檔案是專門配置後臺管理的檔案,我們修改為如下(就是將我們在models.py裡的兩個資料表註冊到後臺讓管理員能管理這兩個表,在你新建了其它的表過後也在這裡同樣的註冊):

from django.contrib import admin

# Register your models here.
from login.models import Members
from login.models import Types

admin.site.register(Members)
admin.site
.register(Types)
  • 後臺管理的登入url配置

我們通過哪個網址進入後臺介面呢,還需要在第二層demo目錄下的urls.py檔案修改為如下:

from django.conf.urls import url
from django.contrib import admin
from login import views

urlpatterns = [
    url(r'^$', views.home),
    url(r'^login.html$', views.login),
    url(r'^admin/', admin.site.urls),
]

其中admin.site.urls是django的後臺管理路由,這樣我們就可以通過連結:http://127.0.0.1:8000/admin/ 來進入後臺管理了。

  • 注意

先不著急啟動專案,我們回過頭看看login這個app下的models.py檔案,在Members和Types這兩個類裡都有一個函式:

    def __str__(self):
        return self.name

上述是在python3中這樣使用,在python2中你需要改成,不然會報錯:

    def __unicode__(self):
        return self.name
  • 後臺漢化

    漢化很簡單,django支援多種語言,我們只需要在第二層的demo目錄下將settings.py中的一個設定修改為如下:

LANGUAGE_CODE = 'zh-Hans'   # 修改後臺的字型為漢字,en-us-->zh-Hans
  • 啟動專案後臺

    如果你的模型裡的函式是“str”就用python3,如果是“unicode”就把下面的python3改為python再執行:

python3 manage.py runserver 8000

開啟連結:http://127.0.0.1:8000/admin/ 就能看到登入介面(漢化),然後輸入你建立的超級使用者名稱和密碼登入,進去介面如下:

這裡寫圖片描述

看到有兩個版塊,一個是django預設的認證和授權版塊,在這個版塊下我們可以新增下屬管理使用者和使用者組,並可以對這些下屬管理使用者授權。
然後就是login版塊,這是我們的一個app模型,將它裡面的Members和Types註冊到後臺就會在這裡進行管理,當你新建了其它app模型的時候,只要在對應模型裡的admin.py檔案裡註冊就能在後臺管理了。

  • 建立職員管理使用者

我們點選使用者右邊的增加,建立一個user使用者,如下圖:

這裡寫圖片描述

點選儲存然後在彈出的頁面設定許可權,請將職員狀態勾選上,這樣你就可以通過這個使用者登入到後臺了:

這裡寫圖片描述

然後我們把對members和types這兩個資料表的許可權賦給user使用者:

這裡寫圖片描述

然後我們登出當前admin超級管理員,然後用user使用者登入介面如下:

這裡寫圖片描述

Field引數

  • 使用示例

    切換到admin使用者,點選Types右邊的增加,出現如下圖:

這裡寫圖片描述

我們開啟login這個app模型的models.py檔案,在Types類是這樣寫的:

class Types(models.Model):
    name = models.CharField(max_length=20)
    types = models.IntegerField(default=4)

    def __str__(self):
        return self.name

這樣你就得到上面那張圖的結果,現在我們修改這個類為如下:

class Types(models.Model):
    TYPE_CHOICES = (
        (0, '超級管理員'),
        (1, '管理員'),
        (2, '導師'),
        (3, '成員'),
        (4, '遊客')
    )
    name = models.CharField(max_length=20, verbose_name='名稱')
    types = models.IntegerField(default=4, help_text='選擇使用者型別的編號', verbose_name='使用者型別', choices=TYPE_CHOICES)

    def __str__(self):
        return self.name

然後我們儲存,然後重新整理剛才的頁面會看到如下圖:

這裡寫圖片描述

首先我們得理解types是資料庫中的一張表,其名字為login_types,然後name和types是這個表中的兩列資料(兩個欄位),可以看到verbose_name就是這個欄位在後臺管理中顯示的名稱,沒有設定就預設為該欄位的名稱,help_text就是在輸入框下面顯示的提示或幫助文字,choices是為這個輸入框設定可選值(輸入框改為下拉框)

  • 引數值

下面是Field的引數對應的效果,下面的引數是django所有的Field型別都有的,全部都是可選項:

欄位 效果
null True/False 如果True,Django在資料庫中將空值儲存為NULL。預設是False。
blank True/False 如果True,該欄位被允許為空白。預設是False。
choices 列表或元組 可選值列表,每個元組中的第一個元素是要在模型上設定的實際值,第二個元素是人類可讀的顯示出來的名稱。
db_column 名稱 用於此欄位的資料庫列的名稱。如果沒有給出,Django將使用該欄位變數的名稱。
db_index True/False 如果True,將為此欄位建立一個數據庫索引。
db_tablespace 名稱 如果此欄位已編入索引,則用於此欄位索引的資料庫表空間的名稱。預設值是專案的 DEFAULT_INDEX_TABLESPACE設定(如果已設定)或 db_tablespace模型(如果有)。如果後端不支援索引的表空間,則忽略此選項。
default 欄位的預設值。
editable True/False 如果False,該欄位將不會顯示在後臺管理中,也就是管理員不可管理這個欄位。預設是True。
error_messages 字典 當在後臺管理中修改或新增時輸入此欄位時出現輸入錯誤時顯示的對應資訊。錯誤訊息鍵包括null,blank,invalid,invalid_choice,unique和unique_for_date。
help_text 字串 額外的“幫助”文字與窗體小部件一起顯示在後臺的新增和修改介面中。如果你願意,這可以讓help_text包含HTML標籤。
primary_key True/False 如果True這個欄位是模型的主鍵。
unique True/False 如果True,這個欄位在整個表中必須是唯一的。
unique_for_date True/False 如果True,這個欄位在整個表中在每天是唯一的。
unique_for_month True/False 如果True,這個欄位在整個表中在每個月中是唯一。
verbose_name 名稱 該欄位的人類可讀名稱。如果沒有給出詳細名稱,Django將使用欄位的屬性名稱自動建立它,將下劃線轉換為空格。
validators 字典 要為此欄位執行的驗證程式列表(驗證輸入合法性的程式列表)。