Django admin美化插件suit應用[原創]


前言

由於比較懶,自己弄了一個用戶驗證,沒有自己寫后台,用了django自帶的user認證,並通過admin直接進行管理,但默認的admin並不漂亮,於是使用了這個django-suit插件,效果對比一下。
我用的是django-1.9.9它的admin是這樣的。老版本的django admin長的更丑。

使用了suit之后的admin是這樣的。


清涼了很多吧,現在開始搞它。

基礎環境

  • 我的環境
    python: 2.7.10
    django: 1.9.9
  • 安裝
    pip install django-suit # 安裝完畢了

配置部分

  • 表結構
    使用了自帶的user,由於要添加一個字段,所以做了OneToOneField
    models.py

    from django.db import models
    from django.contrib.auth.models import User, Group
    
    class UserProfile(models.Model):
        user = models.OneToOneField(User)
        name = models.CharField(u'姓名', max_length=32, blank=True, null=False)
    
        class Meta:
            verbose_name = u'用戶詳情'
            verbose_name_plural = u"用戶詳情"
        
    
  • settings.py設置

    INSTALLED_APPS = [
    'suit',  # 添加suit支持
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'web_sso',
    ]
    ......
    LANGUAGE_CODE = 'zh-Hans'  # 設置成中文,老版本django使用'zh_CN'
    TIME_ZONE = 'Asia/Shanghai'
    USE_I18N = True
    USE_L10N = False  # 注意是False 配合下邊時間格式
    USE_TZ = False  # 如果只是內部使用的系統,這行建議為false,不然會有時區問題
    DATETIME_FORMAT = 'Y-m-d H:i:s'  # suit在admin里設置時間的一個小bug。需要把時間格式指定一下
    DATE_FORMAT = 'Y-m-d'
    ......
    SUIT_CONFIG = {  # suit頁面配置
        'ADMIN_NAME': '統一認證平台',  #登錄界面提示
        'LIST_PER_PAGE': 20,
        'MENU': ({'label': u'用戶管理', 'app': 'web_sso', 'models': ('web_sso.MyUser', 'auth.Group', 'web_sso.User_ex')},  #每一個字典表示左側菜單的一欄
                 # {'label': u'SQL管理', 'app': 'web_sso', 'models': ('web_sso.Sql', 'web_sso.PreSql', 'web_sso.Direction')},  # 可以是多個字典
                 ),
        # label表示name,app表示上邊的install的app,models表示用了哪些models
    }
    
    
  • admin.py配置
    這里只介紹一些最基礎的admin的配置,詳細可以參考django book的admin部分,后續的定制化admin部分請參考我后邊的博文,將對admin進行較為深度的改造以便較適應復雜的需求。

    from django.contrib import admin
    from web_sql import models
    
    class UserProfileAdmin(admin.ModelAdmin):
        list_display = ('user', 'name', 'get_email', 'get_is_active')  # 定義admin總覽里每行的顯示信息,由於email是在userprofile的外鍵user表中,所以需要特殊返回,注意這個字段不能用user__email的形式
        search_fields = ('user__username', 'name')  # 定義搜索框以哪些字段可以搜索,因為username是在user表中,所以用user__username的形式,這里需要注意下,不能直接用user表名,要用字段名,表名__字段名
        list_filter = ('user__groups', 'user__is_active')  #傳入的需要是列表,設定過濾列表
    
        def get_email(self, obj):  # 定義這個函數是由於email是在userprofile表的外鍵表user里,所以需要單獨return一下
            return obj.user.email
        get_email.short_description = 'Email'  #list展示時候顯示的title
        get_email.admin_order_field = 'user__email'  #指定排序字段
    
        def get_is_active(self, obj):
            return obj.user.is_active
        get_is_active.short_description = '有效'
        get_is_active.admin_order_field = 'user__is_active'
    
    
    admin.site.register(models.UserProfile, UserProfileAdmin) # 引用的固定格式,注冊的model和對應的Admin,Admin放在后邊,同樣還有noregister方法:比如admin.site.noregister(Group),把group這個表在admin中去掉(默認user和group都是注冊到admin中的)
    
    
  • 其他admin小技巧,admin自定義js或css,以實現一些自己想要的效果

    admin.py

    class DirectionAdmin(admin.ModelAdmin):
        list_display = ('describe', 'db_name')
    
        class Media:
            js = ('js/my_own_admin.js',) 
            css = {
                 'all': ('css/admin/my_own_admin.css',)
            }
    admin.site.register(models.Direction, DirectionAdmin)
    # 然后把對應的js或css文件寫入到static下邊的指定文件里吧,運行admin的頁面會額外引用你自己的css和js文件    
    
    
  • 效果展示如下

結語

先寫到這里,其實除了美化,admin還可以做很多事情,但是由於都在django的源碼里,可定制化不如自己寫的后台那么靈活,但也是可以定制的,定制的方法,請參考我后邊的文章。Django admin定制化,User字段擴展[原創]


免責聲明!

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



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