Django有个自带的admin后台,不过界面不怎么好看,这里我用xadmin

我的python版本是3.5,可以使用支持py3的xadmin:https://github.com/sshwsfc/xadmin

xadmin部署步骤:

1、把xadmin整个目录拷贝到项目里面

2、需要安装的依赖包:

django~=1.9.0
django-crispy-forms~=1.6.0
django-reversion~=2.0.0
django-formtools==1.0
future==0.15.2
httplib2==0.9.2
six==1.10.0

3、注册xadmin:

把xadmin,crispy_forms,reversion注册到install_apps里面,然后再添加xadmin的url配置就可以了。

import xadmin

urlpatterns = [
url(r'^xadmin/', xadmin.site.urls),
]

4、使用django的命令行工具生成xadmin数据表,然后创建管理后台的超级用户:

分别执行makemigrations和migrate

创建管理后台的超级用户

接着输入email和passwd就可以登陆了。

英文界面不怎么友好,改成中文(我英语不好)

在settings里修改配置:

#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans' # TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/shanghai' USE_I18N = True USE_L10N = True #这里是指定默认时间,如果为True,则写进数据库的时间是utc时间,需要改成False
USE_TZ = False

很明显,我在monitor app的model里创建的表在这里没显示,因为xadmin的使用,首先需要对model进行注册,才能在后台管理中进行操作。

1、在app里创建py文件:adminx(必须这个名称)

2、导入xadmin和models里的类,格式如下:

#!/usr/bin/env python
# _*_ coding:utf- _*_
__author__ = "BIGNI"
__date__ = "2017/4/9 21:08" import xadmin from django import forms
from xadmin import views
from monitor import models
# Register your models here. # from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import ReadOnlyPasswordHashField class UserCreationForm(forms.ModelForm):
"""A form for creating new users. Includes all the required
fields, plus a repeated password."""
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput) class Meta:
model = models.UserProfile
fields = ('email','name') def clean_password2(self):
# Check that the two password entries match
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords don't match")
return password2 def save(self, commit=True):
# Save the provided password in hashed format
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user class UserChangeForm(forms.ModelForm):
"""A form for updating users. Includes all the fields on
the user, but replaces the password field with admin's
password hash display field.
"""
password = ReadOnlyPasswordHashField(label="Password",
help_text=("Raw passwords are not stored, so there is no way to see "
"this user's password, but you can change the password "
"using <a href=\"password/\">this form</a>.")) class Meta:
model = models.UserProfile
fields = ('email','password','is_active', 'is_admin') def clean_password(self):
# Regardless of what the user provides, return the initial value.
# This is done here, rather than on the field, because the
# field does not have access to the initial value
return self.initial["password"] class UserProfileAdmin(object):
# The forms to add and change user instances
form = UserChangeForm
add_form = UserCreationForm # The fields to be used in displaying the User model.
# These override the definitions on the base UserAdmin
# that reference specific fields on auth.User.
list_display = ('id','email','is_admin','is_active')
list_filter = ('is_admin',)
list_editable = ['is_admin'] fieldsets = (
(None, {'fields': ('email','name', 'password')}),
('Personal info', {'fields': ('phone','weixin','memo',)}), ('用户权限', {'fields': ('is_active','is_staff','is_admin','user_permissions','groups')}), )
# add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
# overrides get_fieldsets to use this attribute when creating a user.
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2','is_active','is_admin')}
),
)
search_fields = ('email',)
ordering = ('email',)
filter_horizontal = ('user_permissions','groups') class HostAdmin(object):
list_display = ('id','name','ip_addr','status')
filter_horizontal = ('host_groups','templates') class HostGroupAdmin(object):
style_fields = {'templates': 'm2m_transfer'} class TemplateAdmin(object):
filter_horizontal = ('services','triggers')
style_fields = {'services':'m2m_transfer','triggers':'m2m_transfer'} class ServiceAdmin(object):
filter_horizontal = ('items',)
list_display = ('name','interval','plugin_name')
style_fields = {'items': 'm2m_transfer'}
#list_select_related = ('items',) class TriggerExpressionInline(object):
model = models.TriggerExpression
#exclude = ('memo',)
#readonly_fields = ['create_date'] class TriggerAdmin(object):
list_display = ('name','severity','enabled')
inlines = [TriggerExpressionInline,]
#filter_horizontal = ('expressions',) class TriggerExpressionAdmin(object):
list_display = ('trigger','service','service_index','specified_index_key','operator_type','data_calc_func','threshold','logic_type') class BaseSettings(object):
enable_themes = True
use_bootswatch = True class GlobalSettings(object):
site_title = "大倪的自动化监控系统"
site_footer = "如有雷同,纯属巧合"
menu_style = "accordion" # class ServiceIndexAdmin(object):
# style_fields = {'idc': 'm2m_transfer'} xadmin.site.register(models.Host,HostAdmin)
xadmin.site.register(models.HostGroup,HostGroupAdmin)
xadmin.site.register(models.Template,TemplateAdmin)
xadmin.site.register(models.Service,ServiceAdmin)
xadmin.site.register(models.Trigger,TriggerAdmin)
xadmin.site.register(models.TriggerExpression,TriggerExpressionAdmin)
xadmin.site.register(models.ServiceIndex)
xadmin.site.register(models.Action)
xadmin.site.register(models.ActionOperation)
#admin.site.register(models.ActionCondtion,ActionConditionAdmin)
xadmin.site.register(models.Maintenance)
xadmin.site.register(models.UserProfile,UserProfileAdmin)
xadmin.site.register(models.EventLog) xadmin.site.register(views.BaseAdminView,BaseSettings)
xadmin.site.register(views.CommAdminView,GlobalSettings)

遇到的问题:

1、

ManyToManyField类型的字段,在xadmin里只显示了一个选项框。解决方法:
在定义的类中,加上这个字段,其中templates对应字段名称,效果如下  style_fields = {'templates': 'm2m_transfer'}

自动化监控系统(三) 搭建xadmin做网站后台的更多相关文章

  1. Legolas工业自动化平台案例 —— 水源地自动化监控系统

    天津港爆炸事件后,除了安置群众.追究事故责任外,人们最关心的莫过于爆炸污染物对于周边环境的影响,其中最重要的一块就是饮用水的安全.所幸的是,水源的安全监测是实实在在有据可依的.环保单位和供水企业在建设 ...

  2. Grafana3.0.1+Zabbix3.0.4监控系统平台搭建

    前言 本文的Zabbix部分知识只介绍它的基础安装,Zabbix的使用以及配置优化并不在本文的介绍范围之内. 本文只介绍在CentOS6系列下的安装和部署,其他发行版与其他版本号暂不涉及 本文默认使用 ...

  3. 自动化监控系统(二)连接数据库,创建app,添加model,同步数据库

    数据库我使用:mysql5.7 程序连接数据库的模块:pymysql 一.创建数据库: dbname:automatedmonitor 二.使用pip安装pymysql,这里我直接在pycharm上安 ...

  4. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)

    一.文件准备 1.1 文件名称 telegraf-1.2.1_windows_amd64.zip influxdb-1.2.2_windows_amd64.zip grafana-4.2.0.wind ...

  5. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)--转

    原文地址:http://www.cnblogs.com/liugh/p/6683488.html 一.文件准备 1.1 文件名称 telegraf-1.2.1_windows_amd64.zip in ...

  6. Lepus搭建企业级数据库全方位监控系统

    前言 Lepus(天兔)数据库企业监控系统是一套由专业DBA针对互联网企业开发的一款专业.强大的企业数据库监控管理系统,企业通过Lepus可以对数据库的实时健康和各种性能指标进行全方位的监控.目前已经 ...

  7. 自动化监控软件之zabbix安装

    自动化监控系统 cacti : 基于snmp(简单的网络管理协议)协议的监控软件,强大的绘图软件 缺点: 自带的监控模板比较少,不能默认 自带监控报警功能(只能自己去官网下载模板) Nagios: 插 ...

  8. 打造云原生大型分布式监控系统系列文章-腾讯工程师roc

    附上本系列文章链接 打造云原生大型分布式监控系统(一): 大规模场景下 Prometheus 的优化手段 打造云原生大型分布式监控系统(二): Thanos 架构详解 打造云原生大型分布式监控系统(二 ...

  9. 从零开始搭建前端监控系统(三)——实现控制iframe前进后退

    前言 本系列文章旨在讲解如何从零开始搭建前端监控系统. 项目已经开源 项目地址: https://github.com/bombayjs/bombayjs (web sdk) https://gith ...

随机推荐

  1. 【痛定思痛】TCP 三次握手学习

    前言:今天滴滴面试失败,痛定思痛,好好复习面试中最惨淡的计算机网络部分 面试中,面试官问我TCP与UDP最大的区别是什么,答:TCP可靠,UDP不可靠,一个面向有连接,一个面向无连接,一个快一个慢:追 ...

  2. 还在用 KPI 管研发团队?用 OKR 倍儿爽!

    近几年,经常能听到不少技术管理者在倡导:用 OKR 来管理及打造一个高执行力的研发团队. 据我了解,OKR 最成功的落地公司是在 Google --一家有着非常浓厚工程师文化的公司,后来陆续在 Fac ...

  3. 大型项目必备IPC之Binder机制原理(一)

    阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680 摘要 Binder是Android系统进程间通信(IPC)方式之一.Li ...

  4. Oracle上课学习笔记<1>

    简单的select查询语句 1.select查询语句基本语法 使用两个关键字: select 指定要查询的字段和内容 from 从哪张表中查询 语法:select 字段名 from 表名; 三种不同的 ...

  5. ReactOS 代码更新后的编译安装

    其实四月份就已经更新过了,最新版应该是0.4.11+,具体去GITHUB上去看. 至于编译,其实在最早的0.2版本时代,ReactOS就曾经给出过一套完整的编译方式, 并且给出过一个完整的编译环境,版 ...

  6. LeetCode Array Easy 53. Maximum Subarray 个人解法 和分治思想的学习

    Description Given an integer array nums, find the contiguous subarray (containing at least one numbe ...

  7. Java的HashMap和Hashtable有什么区别HashSet和HashMap有什么区别?使用这些结构保存的数需要重载的方法是哪些?

    HashMap与Hashtable实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用 两者的主要区别如下 1.Hashtable是早期JDK提供的接口,HashMap是新版J ...

  8. TCP协议解析及相关问题

    TCP协议是什么: TCP是一种传输控制层的协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议.也就是要 ...

  9. 批量新增数据(BuckCopy)

    批量新增数据(BuckCopy) 使用webService传输数据时要注意,Datatable中的数据类型,以及科学计数 /// <summary> /// 批量新增数据 /// < ...

  10. 【IP】虚拟IP原理

    使用场景: 当这台机器出现故障时,自动动态切换到另一台热备的机器 高可用性HA(High Availability) 指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间 ...