因爲比較懶,本身弄了一個用戶驗證,沒有本身寫後臺,用了django自帶的user認證,並經過admin直接進行管理,但默認的admin並不漂亮,因而使用了這個django-suit插件,效果對比一下。
我用的是django-1.9.9它的admin是這樣的。老版本的django admin長的更醜。
使用了suit以後的admin是這樣的。
清涼了不少吧,如今開始搞它。css
表結構
使用了自帶的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字段擴展[原創]