models.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from hashlib import sha1
  2. from django.db import models
  3. from django.db.models import PROTECT
  4. # 高内聚 低耦合
  5. # 面向对象七个设计原则
  6. # 单一职责原则 / 开闭原则 / 依赖倒转原则 / 里氏替换原则 / 接口隔离原则 / 合成聚合复用原则 / 迪米特法则
  7. # 1995年 - GoF - 23个设计模式
  8. # 创建型模式中的原型模式
  9. proto = sha1()
  10. class User(models.Model):
  11. no = models.AutoField(primary_key=True, db_column='uno', verbose_name='编号')
  12. username = models.CharField(max_length=20, unique=True, verbose_name='用户名')
  13. password = models.CharField(max_length=40, verbose_name='口令')
  14. email = models.CharField(max_length=255, verbose_name='邮箱')
  15. def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
  16. hasher = proto.copy()
  17. hasher.update(self.password.encode('utf-8'))
  18. self.password = hasher.hexdigest()
  19. super().save(force_insert, force_update, using, update_fields)
  20. class Meta(object):
  21. db_table = 'tb_user'
  22. verbose_name = '用户'
  23. verbose_name_plural = '用户'
  24. class Subject(models.Model):
  25. no = models.AutoField(primary_key=True, db_column='sno', verbose_name='编号')
  26. name = models.CharField(max_length=50, db_column='sname', verbose_name='学科名称')
  27. intro = models.CharField(max_length=511, db_column='sintro', verbose_name='学科介绍')
  28. def __str__(self):
  29. return self.name
  30. class Meta(object):
  31. db_table = 'tb_subject'
  32. verbose_name = '学科'
  33. verbose_name_plural = '学科'
  34. class Teacher(models.Model):
  35. no = models.AutoField(primary_key=True, db_column='tno', verbose_name='编号')
  36. name = models.CharField(max_length=20, db_column='tname', verbose_name='姓名')
  37. intro = models.CharField(max_length=1023, db_column='tintro', verbose_name='简介')
  38. motto = models.CharField(max_length=255, db_column='tmotto', verbose_name='教学理念')
  39. photo = models.CharField(max_length=511, db_column='tphoto', verbose_name='照片', null=True, blank=True)
  40. subject = models.ForeignKey(Subject, db_column='sno', on_delete=PROTECT, related_name='+', verbose_name='所属学科')
  41. manager = models.BooleanField(default=False, db_column='tmanager', verbose_name='是否主管')
  42. good_count = models.IntegerField(default=0, db_column='tgcount', verbose_name='好评数')
  43. bad_count = models.IntegerField(default=0, db_column='tbcount', verbose_name='差评数')
  44. @property
  45. def gcount(self):
  46. return f'{self.good_count}' \
  47. if self.good_count <= 999 else '999+'
  48. @property
  49. def bcount(self):
  50. return f'{self.bad_count}' \
  51. if self.bad_count <= 999 else '999+'
  52. class Meta(object):
  53. db_table = 'tb_teacher'
  54. verbose_name = '讲师'
  55. verbose_name_plural = '讲师'
  56. ordering = ('name', )