django Admin
admin是django强大功能之一,它能共从数据库中读取数据,呈现在页面中,进行管理。可以理解为数据库的web版
正常情况下创建超级用户,默认以name为用户名登陆
python manage.py createsuperuser

默认为英文界面,如果想用中文
#settings.py 设置 LANGUAGE_CODE = 'en-us' #LANGUAGE_CODE = 'zh-hans'
将models里的模型注册到admin后台里
在admin.py里注册
①、使用register的方法 admin.site.register(Book,MyAdmin) ②、使用register的装饰器 @admin.register(Book)
示例一(search_fields,list_display)
#admin.py
from django.contrib import admin from web import models class HostAdmin(admin.ModelAdmin): search_fields = ('hostname','ip_addr') #search_fields表示搜索的时候的搜索依据如下图所示 list_display = ('hostname','ip_addr','port','system_type','enabled') #list_display表示在菜单里列出的字段 admin.site.register(models.Hosts,HostAdmin) #这里的HostAdmin为上面定义的HostAdmin类 admin.site.register(models.IDC) admin.site.register(models.Department) admin.site.register(models.Session)


示例二(__str__)
#models.py class IDC(models.Model): name = models.CharField(max_length=64, unique=True) #def __str__(self): #这里定义了idc字段在web界面里返回的是一个值,而不是一个对象,如下图所示 #return self.name class Meta: verbose_name = 'IDC' verbose_name_plural = 'IDC'

示例三 list_filter
#models.py
class Hosts(models.Model): hostname = models.CharField(max_length=64, unique=True) ip_addr = models.GenericIPAddressField(unique=True) system_type_choices = ( ('windows', 'Windows'), ('linux', 'Linux/Unix') ) idc = models.ForeignKey('IDC') system_type = models.CharField(choices=system_type_choices, max_length=32, default='linux') port = models.IntegerField(default=22) enabled = models.BooleanField(default=True, help_text='主机若不想被用户访问可以去掉此选项') # host_users = models.ForeignKey('HostUsers') # host_groups = models.ForeignKey('HostGroups') memo = models.CharField(max_length=128, blank=True, null=True) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return '%s(%s)' % (self.hostname, self.ip_addr) class Meta: verbose_name = '主机' verbose_name_plural = '主机'
#admin.py from django.contrib import admin from web import models
class HostAdmin(admin.ModelAdmin): search_fields = ('hostname','ip_addr') list_display = ('hostname','ip_addr','port','system_type','enabled') list_filter = ("ip_addr",) #表示作为过滤条件的字段,这里写上字段后,默认会以字段的内容结果作为过滤条件,如下图

在看一个示例
#models.py class AuditLog(models.Model): session = models.ForeignKey(SessionTrack) user = models.ForeignKey('UserProfile') host = models.ForeignKey('BindHosts') action_choices = ( (0, 'CMD'), (1, 'Login'), (2, 'Logout'), (3, 'GetFile'), (4, 'SendFile'), (5, 'exception'), ) action_type = models.IntegerField(choices=action_choices, default=0) cmd = models.TextField(blank=True, null=True) memo = models.CharField(max_length=128, blank=True, null=True) date = models.DateTimeField() def __str__(self): return '%s-->%s@%s:%s' % (self.user.email, self.host.host_user.username, self.host.host.ip_addr, self.cmd) class Meta: verbose_name = '审计日志' verbose_name_plural = '审计日志'
# admin.py class AuditLogAdmin(admin.ModelAdmin): list_display = ('id','session','user','host','action_type','cmd','date') list_filter = ('session','user','host','action_type','date') search_fields = ['user__user__username','host__host__hostname','host__host__ip_addr','cmd'] #看下图 actions = ['make_published']
ordering = ("-id",) #表示将数据根据id排序 list_per_page =20 choice_fields = ('action_type',) fk_fields = ('user','host') colored_fields = { 'action_type':{'Login':'#83e277','Logout':'orange'} } def get_actions(self, request): actions = super(AuditLogAdmin, self).get_actions(request) if 'delete_selected' in actions: del actions['delete_selected'] return actions def make_published(self, request, queryset): rows_deleted = models.AuditLog.objects.all() #if rows_updated == 1: message_bit = "1 story was" #else: # message_bit = "%s stories were" % rows_updated self.message_user(request, "%s successfully marked as published." % message_bit) make_published.short_description = '删除3个月以前的审计日志' # def suit_row_attributes(self, obj, request): css_class = { 1: 'success', 2: 'warning', 5: 'error', }.get(obj.action_type) if css_class: return {'class': css_class, 'data': obj.action_type} def has_add_permission(self, request, obj=None): return False def has_delete_permission(self, request, obj=None): return False


浙公网安备 33010602011771号