域账号密码自助-相关表结构设计 发表于 2019-04-28 | 更新于 2019-05-01 本文字数: 6.8k | 阅读时长 ≈ 6 分钟 用户表# coding:utf8from __future__ import unicode_literals from django.db import modelsfrom datetime import datetimefrom django.contrib.auth.models import AbstractUser # Create your models here. class UserProfile(AbstractUser): company = ( ('suzhou', u'苏州'), ('beijing', u'北京'), ('tianjing', u"天津"), ('guangzhou', u'广州'), ('nanjing', u"南京"), ('usa', u"美国"), ('lizhi', u"离职") ) uid = models.CharField(max_length=100, verbose_name=u'用户UID', null=True, blank=True) sid = models.CharField(max_length=100, verbose_name=u'用户SID', null=True, blank=True) dn = models.CharField(max_length=100, verbose_name=u'DN名称', null=True, blank=True,) email = models.EmailField(max_length=50, verbose_name=u"邮箱", null=True, blank=True) rescue_email = models.EmailField(max_length=50, null=True, blank=True, verbose_name=u"救援邮箱") is_enabled = models.BooleanField(default=True, verbose_name=u'帐号启用') is_lockedout = models.BooleanField(default=False, verbose_name=u'帐号锁定') is_dial_in = models.BooleanField(default=False, verbose_name=u'VPN权限') gender = models.CharField(max_length=10, choices=(("male", "男"), ("female", "女")), default="male", verbose_name=u'性别') mobile = models.CharField(max_length=11, null=True, blank=True, verbose_name=u'联系方式') department = models.CharField(max_length=100, null=True, blank=True, verbose_name=u'部门') company = models.CharField(choices=company, max_length=50, null=True,blank=True, help_text=u'所属公司', verbose_name=u'所属公司') birday = models.DateField(null=True, blank=True, verbose_name=u"生日") image = models.ImageField(upload_to="image/%Y/%m/%m", blank=True, default=u"image/default.png", max_length=100) check = models.URLField(max_length=100, null=True, blank=True, verbose_name=u'在线检查') quit_time = models.DateField(max_length=100, null=True, blank=True, verbose_name=u'离职时间') created_time = models.CharField(max_length=100,verbose_name=u"创建时间",null=True, blank=True,) pwd_last_set_time = models.CharField(max_length=100,verbose_name=u"密码最后一次设置时间",null=True, blank=True,) add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间") def list_groups(self): return self.usergroup_set.all() list_groups.short_description = u'属组信息' class Meta: verbose_name = "用户信息" verbose_name_plural = verbose_name def __unicode__(self): return self.username 用户组class UserGroup(models.Model): username = models.CharField(max_length=100, verbose_name=u'组名', null=True, blank=True) uid = models.CharField(max_length=100, verbose_name=u'组UID', null=True, blank=True) sid = models.CharField(max_length=100, verbose_name=u'组SID', null=True, blank=True) gc = models.CharField(max_length=100, verbose_name=u'GC', null=True, blank=True) gs = models.CharField(max_length=100, verbose_name=u'GS', null=True, blank=True) dn = models.CharField(max_length=100, verbose_name=u'DN', null=True, blank=True) members = models.ManyToManyField(UserProfile) add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间") class Meta: verbose_name = "用户组信息" verbose_name_plural = verbose_name def __unicode__(self): return self.dn 邮箱验证码class EmailVerifyRecord(models.Model): action_type = ( ("user_reset_pwd_code", u"重置密码"), ("email_modify", u"修改邮箱"), ('user_reset_email_code', u'重置邮箱') ) user = models.ForeignKey(UserProfile, verbose_name=u"用户", default='') code = models.CharField(max_length=20, verbose_name=u"验证码") email = models.EmailField(max_length=50, verbose_name=u"邮箱") is_used= models.BooleanField(default=False, verbose_name=u"是否使用") send_type = models.CharField(choices=action_type, max_length=100, verbose_name=u"验证码类型") send_time = models.DateTimeField(default=datetime.now, verbose_name=u"发送时间") # datetime.now() model编译时间生成默认时间 # datetime.now classs实例化时生成的时间 class Meta: verbose_name = u"邮箱验证码" verbose_name_plural = verbose_name def __unicode__(self): return '{0}({1})'.format(self.code, self.email) 用户日志# coding:utf8from __future__ import unicode_literals from django.db import modelsfrom datetime import datetime # Create your models here. class UserActionLog(models.Model): user_type = ( ("user_modify_pwd", u"修改密码"), ("user_reset_pwd", u"重置密码"), ("user_unlock", u"账号解锁"), ("user_bind_email", u"绑定外部邮箱"), ("user_modify_email", u"修改外部邮箱"), ('user_reset_pwd_code', u'密码重置码'), ('user_reset_email_code', u'邮箱重置码') ) status = models.BooleanField(verbose_name=u'状态', default=True) user_type = models.CharField(verbose_name=u'类型', max_length=100, choices=user_type) client_ip = models.CharField(verbose_name='客户端IP',max_length=128,null=True, blank=True) username = models.CharField(verbose_name='用户',max_length=128, null=True, blank=True) comment = models.CharField(verbose_name='备注',max_length=1000, null=True, blank=True) add_time = models.DateTimeField(verbose_name=u"添加时间", default=datetime.now) class Meta: verbose_name = u"用户操作日志" verbose_name_plural = verbose_name def __unicode__(self): return self.username class PwdModifySuccess(UserActionLog): class Meta: verbose_name = u"密码修改成功" verbose_name_plural = verbose_name proxy = True class PwdResetSuccess(UserActionLog): class Meta: verbose_name = u"密码重置成功" verbose_name_plural = verbose_name proxy = True class UserUnlockSuccess(UserActionLog): class Meta: verbose_name = u"账号解锁成功" verbose_name_plural = verbose_name proxy = True class AdmActionLog(models.Model): adm_type = ( ("adm_update", u"更新信息"), ("adm_disable", u"禁用帐号"), ("adm_disable_lizhi", u"禁用帐号[离职]"), ("adm_enable", u"启用帐号"), ("adm_unlock", u"解锁帐号"), ("adm_reset_pwd", u"重置密码"), ("adm_enable_vpn", u"启用VPN"), ("adm_disable_vpn", u"禁用VPN") ) status = models.BooleanField(verbose_name=u'状态', default=True) adm_type= models.CharField(verbose_name=u'类型', max_length=100, choices=adm_type) client_ip = models.CharField(verbose_name='客户端IP', max_length=128, null=True, blank=True) username = models.CharField(verbose_name='用户',max_length=128, null=True, blank=True) comment = models.CharField(verbose_name='备注',max_length=128, null=True, blank=True) sa = models.CharField(verbose_name='操作用户', max_length=128, null=True, blank=True) add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间") class Meta: verbose_name = u"管理员操作日志" verbose_name_plural = verbose_name def __unicode__(self): return self.username