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

前言

因爲比較懶,本身弄了一個用戶驗證,沒有本身寫後臺,用了django自帶的user認證,並經過admin直接進行管理,但默認的admin並不漂亮,因而使用了這個django-suit插件,效果對比一下。
我用的是django-1.9.9它的admin是這樣的。老版本的django admin長的更醜。

使用了suit以後的admin是這樣的。


清涼了不少吧,如今開始搞它。css

基礎環境

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

配置部分

  • 表結構
    使用了自帶的user,因爲要添加一個字段,因此作了OneToOneField
    models.py
    ```python
    from django.db import models
    from django.contrib.auth.models import User, Grouphtml

    class UserProfile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(u'姓名', max_length=32, blank=True, null=False)python

    class Meta:
         verbose_name = u'用戶詳情'
         verbose_name_plural = u"用戶詳情"
    ```
  • settings.py設置web

    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進行較爲深度的改造以便較適應複雜的需求。sql

    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,以實現一些本身想要的效果django

    admin.py
    ```python
    class DirectionAdmin(admin.ModelAdmin):
    list_display = ('describe', 'db_name')session

    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文件app

    ```函數

  • 效果展現以下
    ui

結語

先寫到這裏,其實除了美化,admin還能夠作不少事情,可是因爲都在django的源碼裏,可定製化不如本身寫的後臺那麼靈活,但也是能夠定製的,定製的方法,請參考我後邊的文章。Django admin定製化,User字段擴展[原創]

相關文章
相關標籤/搜索