Django之后台管理二


前面講到admin界面用戶的注冊以及修改,如果我們注冊的用戶密碼忘記了該怎么辦呢

在終端輸入如下的命令進行重置

D:\django_test2>python manage.py shell

Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)]

Type "copyright", "credits" or "license" for more information.

 

IPython 5.3.0 -- An enhanced Interactive Python.

?         -> Introduction and overview of IPython's features.

%quickref -> Quick reference.

help      -> Python's own help system.

object?   -> Details about 'object', use 'object??' for extra details.

 

In [2]: from django.contrib.auth.models import User

 

In [3]: user = User.objects.get(username='zhf')

(0.001) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_

user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."username" = 'zhf'; args=('zhf',)

 

In [4]: user.set_password('xxxxx')

 

In [5]: user.save()

(0.000) BEGIN; args=None

(0.001) UPDATE "auth_user" SET "password" = 'pbkdf2_sha256$30000$ztylCxamAKb3$upNib9+1EAYRkMGwKESIsy7m6VIzsef0ioHsJYer3wQ=', "last_login" = '2017-12-10 13:53:11.655000', "is_superuser" = 1, "username" = 'zhf', "fi

rst_name" = '', "last_name" = '', "email" = 'maple412@163.com', "is_staff" = 1, "is_active" = 1, "date_joined" = '2017-12-10 13:34:59.874000' WHERE "auth_user"."id" = 1; args=(u'pbkdf2_sha256$30000$ztylCxamAKb3$up

Nib9+1EAYRkMGwKESIsy7m6VIzsef0ioHsJYer3wQ=', u'2017-12-10 13:53:11.655000', True, u'zhf', u'', u'', u'maple412@163.com', True, True, u'2017-12-10 13:34:59.874000', 1)

 

下面進入關鍵部分,前面只有用戶的信息,如何來監控我們自己定義的模塊呢。比如我們在models.py中定義的那些模型如何在后台顯示出來呢。我們先看下Django的文件結構,可以看到有一個admin.py的文件。這里就是我們對模型進行注冊的地方。

我們首先對這些模塊進行注冊,代碼如下

我們再來看下管理界面:可以看到已經增如如下的界面,里面有我們注冊的各個模塊

那么這些模塊的信息是否和我們之前已經創建過的一樣呢。我們拿book來舉例,點擊Book可以看到如下的用戶。

點擊其中的書名稱,即可以進去進行修改

我們可以通過管理界面的增加按鈕添加對應的模塊

如下圖所示:

這些選項和我們模板中的定義的都一樣。每一個都是必填項。如果我們添加的時候有一項沒有添加,則會報錯,如下,提示Address字段是必填項

那么我們怎么能修改某些項為非必填的呢。這需要在模板中修改定義。在address的具體定義中增加blank=True的描述,那么這項就變成了非必填項

可以看到address的顏色變成了灰色。

同樣的使用方法還有verbose_name字段,這個設置可以給這些項添加一個別名。如下address將會顯示為detail_address

address=models.CharField(max_length=40,blank=True,verbose_name='detail_address')

 

之前新增了一個author。點擊查看的時候除了能看到名字意外,其他如名字,郵件,和地址等信息都看不到。

如果我們想顯示出的信息,需要修改代碼如下。在admin.py中修改如下:

我們新增了一個顯示模板,只定義了一項,就是顯示名稱的元組。用於列表顯示。然后在register中新增了AuthorAdmin,這個可以理解為將AuthorAdmin模塊注冊到Author中去。

我們所有對於模板的顯示和自定義操作都可以在這里面進行重寫

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('first_name','last_name','email','age')
    list_editable = ('email','age')
 
admin.site.register(Author,AuthorAdmin)
從下面的解釋中可以看到,如果第二個參數沒有設置,那么模板將會繼續使用第一個參數的模板

我們現在來看下界面:可以看到增加了各個具體字段的顯示。並且email和age可以在線編輯修改。不用點擊進入具體模塊進行修改。

增加list_filter和serach_fields的定義。並會出現對應的過濾器框

list_filter=('age','email')
search_fields = ('age','email')

在輸入框中輸入對應的搜索字段,便可以得到對應的搜索結果

我們再繼續看下動作的定義:在默認的動作項中,只有刪除的動作。如果我們想有更多自定義的動作該如何操作呢

在AuthorAdmin中添加action的描述。Actions里面是具體的動作函數,在這里是save_excel
然后自定義的save_excel函數。並且攜帶request以及queryset的參數。其中request可以訪問的參數,可以用來區別用戶,queryset是author的查詢集合。save_excel.short_description用來命名在動作顯示的名字。
class AuthorAdmin(admin.ModelAdmin):
    list_display = ('first_name','last_name','email','age')
    list_editable = ('email','age')
    list_filter=('age','email')
    search_fields = ('age','email')
    actions = [u'save_excel']
    def save_excel(self,request,queryset):
        pass
   
save_excel.short_description = u'下載選中的數據'

這樣在動作中就有了我們自定義的action。

在后台的訪問中,有多個用戶都會登錄進來,那么我們想針對不同的用戶進行權限隔離,該如何操作呢。這里就要用到重寫changelist_view

首先我們增加一個非super權限的賬戶:

並且設置所有模型的添加,修改,刪除權限

添加后可以看到2個用戶。

在AuthorAdmin中定義changelist_view函數,通過request.user.is_superuser來判斷是否為超級用戶,並且對超級用戶和非超級用戶的顯示和編輯權限進行區分設置
def changelist_view(self, request, extra_context=None):
    if request.user.is_superuser:
        self.list_display = ('first_name','last_name','email','age')
        self.list_editable = ('email','age')
        self.list_filter=('age','email')
        self.search_fields = ('age','email')
    else:
        self.list_display = ('email','age')
        self.list_filter = ('email','age')
    return super(AuthorAdmin, self).changelist_view(request, extra_context=None)

 

再次以zhf1的賬戶登錄,發現其中的顯示頁面以及可編輯頁面都已經和超級用戶不同。

我們來看另外一個模板,Book, 其中authors的定義是manytomanyFiled。這是什么意思呢,通俗理解就是多對多。就比如一本書的作者有多個不知一個的意思。

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()
    def __unicode__(self):
        return self.name

如下在Authors的界面中可以看到2個之前新增的用戶

另外注意Publisher, 在模板中的定義是ForeignKey也就是數據庫中的外鍵。我們添加的時候會自動跳到Publisher的界面

可以看出django的后天可以方便我們對數據進行各種高效的管理,相比flask,django提供了各種各樣的模塊,更加方便我們對數據的處理。更多admin的用法請參考官方的介紹文檔

 

 

 

 

 

 

 
        

 

 
        

 


免責聲明!

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



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