models.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. # coding=utf-8
  2. from django.db import models
  3. from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
  4. from django.utils import timezone
  5. from rest_framework.utils import model_meta
  6. from utils.exceptions import CustomError
  7. class UserManager(BaseUserManager):
  8. def create_employee(self, username, password=None, **extra_fields):
  9. return self.create_user(User.EMPLOYEE, username, password, **extra_fields)
  10. def create_customer(self, username, password=None, **extra_fields):
  11. return self.create_user(User.CUSTOMER, username, password, **extra_fields)
  12. def create_superuser(self, username, password, **extra_fields):
  13. u = self.create_employee(username, password, **extra_fields)
  14. u.is_active = True
  15. u.is_superuser = True
  16. u.save(using=self._db)
  17. return u
  18. def create_user(self, type, username, password=None, **extra_fields):
  19. if not username:
  20. raise CustomError(u'请输入用户名!')
  21. count = User.objects.filter(username=username).count()
  22. if count > 0:
  23. raise CustomError(u'该用户名已存在!')
  24. user = self.model(
  25. type=type,
  26. username=username,
  27. is_superuser=False,
  28. last_login=timezone.now(),
  29. **extra_fields
  30. )
  31. user.set_password(password)
  32. user.save(using=self._db)
  33. return user
  34. class User(AbstractBaseUser, PermissionsMixin):
  35. EMPLOYEE = 1
  36. CUSTOMER = 2
  37. TYPE_CHOICES = (
  38. (EMPLOYEE, u'职工'),
  39. (CUSTOMER, u'客户'),
  40. )
  41. type = models.PositiveSmallIntegerField(verbose_name=u"类型", choices=TYPE_CHOICES, default=CUSTOMER, editable=False)
  42. username = models.CharField(verbose_name=u'帐号', max_length=30, unique=True, db_index=True)
  43. is_active = models.BooleanField(verbose_name=u'激活', default=True)
  44. date_joined = models.DateTimeField(verbose_name=u'注册时间', default=timezone.now, editable=False)
  45. objects = UserManager()
  46. USERNAME_FIELD = 'username'
  47. REQUIRED_FIELDS = []
  48. class Meta:
  49. db_table = "auth_user"
  50. verbose_name = u'用户'
  51. unique_together = [
  52. ('username')
  53. ]
  54. index_together = (
  55. 'date_joined',
  56. )
  57. ordering = ['-id']
  58. default_permissions = ()
  59. permissions = []
  60. def __unicode__(self):
  61. return self.username
  62. def is_customer(self):
  63. if self.type & self.CUSTOMER:
  64. return True
  65. return False
  66. def is_employee(self):
  67. if self.type & self.EMPLOYEE:
  68. return True
  69. return False
  70. def change_password(self, new_password, confirm_password, old_password):
  71. if new_password != confirm_password:
  72. raise CustomError(u'两次输入的密码不一致, 请检查')
  73. if not self.check_password(old_password):
  74. raise CustomError(u'原密码输入错误, 请检查')
  75. self.set_password(new_password)
  76. def update_item(self, validated_data):
  77. def update():
  78. info = model_meta.get_field_info(self)
  79. for attr, value in validated_data.items():
  80. if attr in info.relations and info.relations[attr].to_many:
  81. field = getattr(self, attr)
  82. field.set(value)
  83. else:
  84. setattr(self, attr, value)
  85. if not 'username' in validated_data:
  86. raise CustomError(u'用户名不能为空!')
  87. count = User.objects.filter(username=validated_data['username']).exclude(id=self.id).count()
  88. if count > 0:
  89. raise CustomError(u'该用户名已存在!')
  90. if not 'password' in validated_data or not validated_data['password']:
  91. validated_data['password'] = self.password
  92. update()
  93. else:
  94. update()
  95. self.set_password(validated_data['password'])
  96. self.save()
  97. return self