models.py 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. from django.db import models
  2. from django.contrib.auth.hashers import check_password
  3. from datetime import datetime
  4. from .functions import *
  5. # Create your models here.
  6. class Organizer (models.Model):
  7. # 定义扫码组织者
  8. ID = models.AutoField(primary_key=True)
  9. username = models.CharField(max_length=30, unique=True)
  10. nickname = models.CharField(max_length=30, unique=False)
  11. email = models.EmailField(max_length=30, null=True)
  12. mobile = models.IntegerField(unique=True)
  13. password = models.CharField(max_length=128)
  14. photo = models.CharField(null=True, max_length=256)
  15. userActive = models.BooleanField(default=True) # 用户激活,开发阶段默认为true
  16. accountType = models.IntegerField(default=0) # 定义用户类型 0:基础用户;1高级用户
  17. registerDate = models.DateField(auto_now_add=True)
  18. registerIP = models.GenericIPAddressField(null=True)
  19. emailConfirmation = models.BooleanField(default=False)
  20. mobileConfirmation = models.BooleanField(default=False)
  21. def __str__ (self):
  22. return self.username
  23. def createNew (self):
  24. Organizer.objects.get_or_create(username=self.username,
  25. nickname=self.nickname,
  26. email=self.email,
  27. mobile=self.mobile,
  28. password=self.password,
  29. photo=self.photo,
  30. registerIP=self.registerIP,
  31. )
  32. def sameUsername (self):
  33. # 检查是否有同样的用户名
  34. result = len(Organizer.objects.filter(username = self.username))
  35. if result == 0:
  36. return False
  37. else:
  38. return True
  39. def sameMobile (self):
  40. # 检查是否有同样的手机号码
  41. result = len(Organizer.objects.filter(mobile = self.mobile))
  42. if result == 0:
  43. return False
  44. else:
  45. return True
  46. def upadteInfo(self):
  47. return True
  48. def login(self):
  49. result = False
  50. try:
  51. result = check_password(self.password, Organizer.objects.filter(username=self.username).values('password')[0]['password'])
  52. except:
  53. pass
  54. return result
  55. def searchByID(self):
  56. try:
  57. result = Organizer.objects.get(ID=self.ID)
  58. return result
  59. except:
  60. return None
  61. def searchByUsername(self):
  62. try:
  63. result = Organizer.objects.get(username=self.username)
  64. return result
  65. except:
  66. return None
  67. def updateByID(self):
  68. Organizer.objects.filter(ID=self.ID).update(username=self.username,
  69. nickname=self.nickname,
  70. email=self.email,
  71. mobile=self.mobile,
  72. password=self.password,
  73. photo=self.photo,
  74. )
  75. class CheckIn (models.Model):
  76. # 定义一个扫码签到活动
  77. ID = models.AutoField(primary_key=True)
  78. startTime = models.DateField()
  79. endTime = models.DateField(null=True)
  80. createTime = models.DateTimeField(null=True, blank=True)
  81. o_ID = models.IntegerField() # 组织者的ID
  82. description = models.CharField(max_length=256)
  83. maxNum = models.IntegerField(null = True, blank = True) # 签到人数最大
  84. creatorConfirm = models.IntegerField() # 定义签到后组织者确认方式:0不需要确认,1点击确认,2扫码确认
  85. captcha = models.BooleanField() # 确认签到的时候是否需要验证码
  86. status = models.CharField(max_length=30, null=True) # draft 未发布可修改 active 可以签到 pause 已发布不可签到不可修改 delete删除
  87. def __str__(self):
  88. return self.description
  89. def searchByID(self):
  90. try:
  91. result = CheckIn.objects.get(ID=self.ID)
  92. return result
  93. except Exception:
  94. return None
  95. def createNew(self):
  96. existing = CheckIn.objects.filter(description=self.description, o_ID=self.o_ID).count()
  97. if existing != 0:
  98. return 0 # 如果检测到重名的就返回0.
  99. else:
  100. CheckIn.objects.get_or_create(startTime=self.startTime,
  101. endTime=self.endTime,
  102. createTime=datetime.datetime.now(),
  103. o_ID=self.o_ID,
  104. description=self.description,
  105. maxNum=self.maxNum,
  106. creatorConfirm=self.creatorConfirm,
  107. captcha=self.captcha,
  108. status='draft',
  109. )
  110. createdCheckIn = CheckIn.objects.get(o_ID=self.o_ID, description=self.description) # 搜索到创建的ID,并返回
  111. return createdCheckIn.ID
  112. def updateByID(self):
  113. CheckIn.objects.filter(ID=self.ID).update(startTime=self.startTime,
  114. endTime=self.endTime,
  115. description=self.description,
  116. maxNum=self.maxNum,
  117. creatorConfirm=self.creatorConfirm,
  118. captcha=self.captcha,
  119. status=self.status,
  120. )
  121. def getExistingList(self):
  122. qs = CheckIn.objects.filter(o_ID=self.o_ID).order_by('createTime').values().exclude(status='delete')
  123. return qs
  124. class Item (models.Model):
  125. # 保存一个签到项目下具体的签到内容要求
  126. ID = models.AutoField(primary_key=True)
  127. o_ID = models.IntegerField() # 组织者的ID
  128. c_ID = models.IntegerField() # checkIn的ID
  129. c_description = models.CharField(max_length=256) # checkIn项目的ID
  130. description = models.CharField(max_length=256)
  131. type = models.IntegerField() # 类型:0字符串,1数字,2邮件,3日期,4选项
  132. order = models.IntegerField() # 同一个checkIn项目内显示排序
  133. unique = models.BooleanField(default=False)
  134. reservedFlag = models.BooleanField(default=False) # 是否预制签到验证信息
  135. reservedContent = models.TextField(null=True, blank=True)
  136. itemSelection = models.TextField(null=True, blank=True) # 选项内容
  137. def __str__(self):
  138. return self.c_description + self.description
  139. def createNew(self):
  140. itemCount = Item.objects.filter(o_ID=self.o_ID, c_ID=self.c_ID).count()
  141. Item.objects.create(o_ID=self.o_ID, c_ID=self.c_ID, c_description=self.c_description, description=self.description,
  142. type=self.type, unique=self.unique, reservedFlag=self.reservedFlag, reservedContent=self.reservedContent, itemSelection=self.itemSelection, order=itemCount+1,)
  143. def sameItem(self):
  144. # 检查是否有同样的内容
  145. result = Item.objects.filter(o_ID=self.o_ID, c_description=self.c_description, description=self.description,).count()
  146. if result == 0:
  147. return False
  148. else:
  149. return True
  150. def searchByC_ID(self):
  151. result = Item.objects.filter(c_ID=self.c_ID).order_by('order').values()
  152. return result
  153. def updateItemByID(self):
  154. Item.objects.filter(ID=self.ID).update(description=self.description, type=self.type, unique=self.unique, reservedFlag=self.reservedFlag, reservedContent=self.reservedContent, itemSelection=self.itemSelection)
  155. def searchByID(self):
  156. try:
  157. result = Item.objects.get(ID=self.ID)
  158. return result
  159. except Exception:
  160. return None
  161. def deleteByID(self):
  162. try:
  163. Item.objects.get(ID=self.ID).delete()
  164. return True
  165. except:
  166. return False
  167. # 定义数据收集后的存储
  168. class UserContent(models.Model):
  169. ID = models.AutoField(primary_key=True)
  170. c_ID = models.IntegerField() # checkIn的ID
  171. o_ID = models.IntegerField() # Organizor的ID
  172. content = models.TextField()
  173. confirmation = models.IntegerField() # 0不需要确认,10需要但是未确认, 11需要并且确认
  174. datetime = models.DateTimeField(auto_now_add=True)
  175. IPAddress = models.GenericIPAddressField(null=True)
  176. def createNew(self):
  177. UserContent.objects.create(c_ID=self.c_ID, o_ID=self.o_ID, content=self.content, confirmation=self.confirmation, IPAddress=self.IPAddress)
  178. def getContentList(self):
  179. result = UserContent.objects.filter(c_ID=self.c_ID).values('content')
  180. return result
  181. def searchByC_ID(self):
  182. result = UserContent.objects.filter(c_ID=self.c_ID).exclude(confirmation = '10' )
  183. return result
  184. def existingInContent(self):
  185. result = UserContent.objects.filter(content__contains=self.content)
  186. return result
  187. def getContentQty(self):
  188. result = UserContent.objects.filter(c_ID=self.c_ID).count()
  189. return result
  190. def uniqueCheck(self):
  191. resultQty = UserContent.objects.filter(content__contains=self.content).count()
  192. if resultQty == 0:
  193. return True
  194. else:
  195. return False
  196. def clearByC_ID(self):
  197. try:
  198. UserContent.objects.filter(c_ID=self.c_ID).delete()
  199. return True
  200. except:
  201. return False