版本:django1.9
源码安装部署
1
|
源码下载,,在django中新建python package名字叫extra_apps,将xadmin文件夹拷贝进去,然后设置为source root(前提是你用pycharm开发)
|
- 2、新建一个app名字叫users,用来重写自带的user,增加一些新的功能特性,将users拖入到新的apps文件夹中(所有新的app都放入到apps中,避免目录混乱)
- 3、重写users中的models.py
-
点击(此处)折叠或打开
-
# -*- coding: utf-8 -*-
-
from __future__ import unicode_literals
-
from datetime import datetime
-
-
from django.db import models
-
from django.contrib.auth.models import AbstractUser
-
from django.core import validators
-
-
# Create your models here.
-
-
class Department(models.Model):
-
depart_name = models.CharField(max_length=20,verbose_name='所属部门')
-
depart_group = models.CharField(max_length=20,blank=True,null=True,verbose_name='部门小组')
-
-
class Meta:
-
verbose_name = u'部门信息'
-
verbose_name_plural = verbose_name
-
-
def __unicode__(self):
-
return self.depart_name
-
-
class UserProfile(AbstractUser):
-
gender = models.CharField(max_length=6,choices=(('male',u'男'),('female',u'女')),default='male',verbose_name='性别')
-
address = models.CharField(max_length=100,default=u'',null=True,blank=True,verbose_name='地址')
-
phone = models.CharField(max_length=11,verbose_name='手机号',validators=[validators.RegexValidator(r'^[0-9+()-]+$',('Enter a valid mobile number.'),'invalid')])
-
department = models.ForeignKey(Department,verbose_name='部门')
-
-
class Meta:
-
verbose_name = u'用户信息'
-
verbose_name_plural = verbose_name
-
-
def __unicode__(self):
- return self.username
-
# -*- coding: utf-8 -*-
- settings.py配置
-
sys.path.insert(0,os.path.join(BASE_DIR,'apps'))
sys.path.insert(0,os.path.join(BASE_DIR,'extra_apps'))
-
AUTH_USER_MODEL = 'users.UserProfile'
INSTALLED_APPS中增加2个app:xadmin、crispy_forms、users
1
2
3
4
5
6
7
8
9
10
|
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xadmin',
'crispy_forms',
'users',
]
|
- urls.py配置,xadmin替换admin
1
2
3
4
5
6
7
8
|
from django.conf.urls import url
from django.contrib import admin
import xadmin
urlpatterns = [
# url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
]
|
- 数据库同步
1
2
|
makemigrations
migrate
|
- 访问首页
xadmin注册
已在models创建表EmailVerifyRecord(这个看自己需要吧,可以不用)
1
2
3
4
5
6
7
8
9
|
class EmailVerifyRecord(models.Model):
email_choices = (
('register', u'注册'),
('forget', u'找回密码'),
)
code = models.CharField(max_length=20, verbose_name=u'验证码')
email = models.EmailField(max_length=50, verbose_name=u'邮箱')
send_type = models.CharField(choices=email_choices, max_length=10, verbose_name=u'验证码类型')
send_time = models.DateTimeField(default=datetime.now, verbose_name=u'发送时间')
|
在创建的app下创建adminx.py文件
1
2
3
4
5
6
7
8
9
|
import xadmin
from .models import EmailVerifyRecord
class EmailVerifyRecordAdmin(object):
list_display = ['code', 'email', 'send_type', 'send_time']
search_fields = ['code', 'email', 'send_type']
list_filter = ['code', 'email', 'send_type', 'send_time']
xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
|
主题应用
adminx.py文件增加
1
2
3
4
5
6
7
|
from xadmin import views
class BaseSetting(object):
enable_themes = True
use_bootswatch = True
xadmin.site.register(views.BaseAdminView, BaseSetting)
|
全局应用
- 页头和页尾自定义
adminx.py文件增加
1
2
3
4
5
6
7
|
from xadmin import views
class GlobalSetting(object):
site_title = "shhnwangjian后台管理系统"
site_footer = "http://www.cnblogs.com/shhnwangjian/"
xadmin.site.register(views.CommAdminView, GlobalSetting)
|
- 左侧app中文名称定义和多表紧缩
修改前
修改后
adminx.py文件增加
1
2
3
4
5
6
7
8
|
from xadmin import views
class GlobalSetting(object):
site_title = "shhnwangjian后台管理系统"
site_footer = "http://www.cnblogs.com/shhnwangjian/"
menu_style = "accordion"
xadmin.site.register(views.CommAdminView, GlobalSetting)
|
apps.py文件
1
2
3
4
5
6
7
|
# -*- coding: utf-8 -*-
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
verbose_name = u'用户信息'
|
__init__.py文件
1
|
default_app_config = "users.apps.UsersConfig"
|
font awesome自定义
官网下载:
下载后覆盖css、fonts目录
在adminx.py文件中引入model_icon
1
2
3
4
5
6
7
|
class EmailVerifyRecordAdmin(object):
list_display = ['code', 'email', 'send_type', 'send_time']
search_fields = ['code', 'email', 'send_type']
list_filter = ['code', 'email', 'send_type', 'send_time']
model_icon = 'fa fa-address-book-o'
xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
|
model_icon这个值,在 中选中的图标或class内容,如下图
引用自定义的用户信息
如上图目录中xadmin源码中加入下面内容
1
2
|
from django.contrib.auth import get_user_model
User = get_user_model()
|
修改密码,需要更改源码
actions制作案例
adminx.py文件内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
from django.core.exceptions import PermissionDenied
from xadmin.views.base import filter_hook
from xadmin.util import model_format_dict, model_ngettext
class zabbixitmes_display_off_action(BaseActionView):
action_name = "zabbixitmes_display_off_action"
description = u'%(verbose_name_plural)s 展示和采集关闭'
model_perm = 'change'
@filter_hook
def change_models(self, queryset):
n = queryset.count()
if n:
self.log('change', (u' %(count)d %(items)s. 展示和采集关闭')
% {"count": n, "items": model_ngettext(self.opts, n)})
for obj in queryset:
obj.display_insert = 0
obj.save()
def do_action(self, queryset):
if not self.has_change_permission():
raise PermissionDenied
if self.request.POST:
self.change_models(queryset)
return None
|
提示:可以参考BaseActionView中的删除DeleteSelectedAction,可以实现xadmin自带的日志记录。用于审计操作者的操作内容。