Django基礎篇--用戶權限管理和組管理


Django作為一個成熟的python后台開發框架,為開發者提供了很多內置的功能,開發者只需要做一些配置就可以完成原生操作中比較復雜的代碼編寫。這些內置功能中其中一個比較強大的功能就是后台用戶管理類。

首先什么是用戶?用戶指能夠登錄站點,進行對本站點的進行操作(例如session會話,日志管理等)的開發者賬號。

在Django中可以輸入網址url/admin(例如:localhost:8000/admin)進入管理頁面來創建用戶和進行組管理。什么是組?組就是指用戶擁有的權限,一個組可以將用戶允許擁有的權限放在一起。

 

Django管理頁面之用戶創建

 

首先,想用進入管理頁面,需要去創建一個超級用戶。如何創建?

Linux操作系統進入項目所在的目錄(manage.py文件同級目錄)輸入

./manage.py  createsuperuser 

接下來跟着終端輸入的提示來輸入就可以了,需要設置的值有用戶名,密碼,郵箱(注意:密碼要大於8位,且不能全部為數字,並且不能跟用戶名太相似,否則就會報錯)。

創建好超級用戶之后,在瀏覽器輸入localhost:8000/admin進入用戶登錄入口

 

輸入賬號和密碼后,可以看到主頁的界面

 

 

 

 Django管理頁面之用戶和組    

 

下面主要講講認證和權限這一塊的內容。

鼠標點擊‘用戶’,即可以進入以下的用戶展示頁面

以修改超級用戶Tan為例

點擊進入Tan的管理頁面,拖動到下面可以看到用戶權限一欄,可以為每個用戶設置不同的權限,如對日志的管理權限,對其他用戶的管理權限,對數據庫的管理權限等等。直接點擊選擇,再按中間的箭頭就可以添加權限了。

 

在當前頁面往上拉,可以看到組管理欄,點擊右上角的‘+’符號,可以進入組添加頁面

那么什么是組,組有什么用呢?

Django管理后台管理中將同類型的管理權限組織在一起,就叫做一個組,為這個組織起的名稱叫組名。而用戶可以自由地添加到組中,被添加到組中的用戶會擁有這個組中所包含的管理權限。這樣就很好地實現了多人擁有相同權限的管理,而不需要手動為每個用戶添加相同重復的權限,用戶只需要添加自己獨特擁有的權限就可以。

創建完組后,可以在‘用戶’設置頁面,看到創建好的組,只要點擊中間的箭頭按鈕就可以將用戶添加到組里面。(這里由於字符集的關系,我用英文‘log admin’來表示‘日志管理’組)

回退到‘站點管理’頁面,點擊‘組’,可以看到之前創建的組。點擊進去還可以修改組的權限。

 

注意以下這一欄的內容

一般對於超級用戶而言是全部選擇的,而對於普通用戶(由超級用戶創建)而言,就可以通過以下的選項來對用戶是否可以登錄管理站點和(超級用戶)是否可以刪除用戶進行設置。

 

      Django管理頁面之數據庫管理        

 

Django另外一個強大的功能是它能夠在管理頁面中對數據庫進行直接的操作。當初的設計據說是為了方便新聞內容的更新所以添加上上去的。

那么Django是如何實現這個過程的呢?首先我把一些必要的代碼寫出來。

在admin.py文件中的代碼如下

from django.contrib import admin      #這一句代碼是在初始化app應用的時候,Django自動幫我們寫好的,不用改動
from  .models  import *     
admin.site.register(Author)

原理解析:

首先第一句代碼:from django.contrib import admin

contrib模塊是Django的強大的功能包,也可以說是Django的標准庫,就像math數學庫是python的標准庫一樣。實際上,這個Django的標准庫在Django中的地位可就強得多了。打個比喻,就好像騰訊在國內手機移動端通信App一家獨大的位置一樣,Django的很多模塊包是基於contrib來構建的。具體有什么包,這些包又有什么用?需要講的內容很多,筆者自己也沒有學習完每一個包。在這里就大概說一下一些常用的包和它們的用途。

admin : 自動化的站點管理工具(我們這里的管理頁面就是用到了這個包)。

auth : Django的用戶驗證包。

csrf : 用於防御跨站請求偽造的包。

redirects : 用來管理重定向的包。

sessions : 會話包。

sites : 一個可以讓開發者在同一個數據庫與 Django項目中管理多個網站的包。

 

這里借用網上一張總結得比較完整的圖

第二句和第三句代碼:

from  .models  import *     

admin.site.register(Author)

from  .models  import *  將models.py中定義的映射類引入到當前文件中,那么就可注冊任何一個想在管理頁面中進行管理的數據庫表。

為了在管理頁面中對數據庫表進行管理和操作,同時還需要在admin.site中注冊相應的表。這里Django用的是admin下的site模塊進行一個代理,將數據庫表傳輸到管理頁面中。如果打開Django的sites.py文件,就會看到下面一段說明

意思是用register()來注冊在models.py中定義的類,並通過get_urls()方法來提供一個獲取管理views模型層的接口,跟我們平常經常的MTV架構(即Models-Templates-Views)沒有什么太大的區別,本質上權限管理頁面也是一個頁面,服務端的邏輯還是那樣。理解這一點很有用,接下來修改數據庫實體對象的名稱在頁面上的顯示結果就很好理解了。

 

在管理頁面中可以看到Inedx-Authors表

點擊進入Authors表之后可以看到以下這個頁面,但是有沒發現,這個管理頁面的字段都是英文?顯然,這是跟實體類的字段保持一致的。那么如果是一個后台管理者,在平常閱讀英文的時候覺得比較麻煩,那怎么辦呢?

可以在實體類的字段定義時為字段添加verbose_name屬性(默認條件下verbose_name=None),例如:

class Author(models.Model):
    name = models.CharField(max_length=30,null=False,verbose_name='用戶名')
    age = models.IntegerField(verbose_name='年齡')
    email = models.URLField(null=True,verbose_name='Email')

添加verbose_name屬性值之后,字段的名稱變為中文

既然我上面說到,本質上權限管理頁面也是一個頁面,那么可以通過在頁面中對數據進行一定的修改,那么映射到數據庫中的數據也會跟着改變。上面的Authors實體類中,name,age,email字段都是可以修改的(注意id值不會顯示在管理頁面中)

 

在頁面中可以數據庫的內容進行修改,那么一個即使不懂編程的管理者,也可以為網站添加需要的內容。比如說一個新聞網站,有一個Aritcle的數據庫,其中有一個Content的字段,那么新聞編輯人員就可以大段大段地往數據庫里面添加文本。這就是為什么Django早期是為新聞網站而設計的框架的原因。自動化的管理可以讓不懂編程的人在管理網站的時候更加方便和容易操作。這就是Django的強大之處。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM