PageRenderTime 48ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Model/StudentModel.py

https://gitlab.com/CloudPrintTech/CloudPrintBackend
Python | 205 lines | 177 code | 24 blank | 4 comment | 35 complexity | b2a83f7e8fd625219a96ad3e44e8c2fb MD5 | raw file
  1. # -*- coding: utf-8 -*-
  2. __author__ = 'raytlty'
  3. from sqlalchemy.sql.expression import and_, or_
  4. from Model.BaseModel import BaseModel
  5. from sqlalchemy import and_
  6. from Model.ORM import *
  7. import tornado.web
  8. import hashlib
  9. import time
  10. class StudentModel(BaseModel):
  11. def signup(self,**kwargs):
  12. try:
  13. session = self.session
  14. redisconn = self.redisconn
  15. if not redisconn.exists(kwargs['username']):
  16. return self.err("验证码已过期")
  17. if redisconn.get(kwargs['username']) != kwargs['smsCode'].encode('utf-8'):
  18. return self.err("验证码错误")
  19. kwargs['password']=hashlib.md5((kwargs['password']+':'+kwargs['username']).encode()).hexdigest()
  20. del kwargs['smsCode']
  21. student = Student(**kwargs)
  22. session.add(student)
  23. session.commit()
  24. token = hashlib.md5((student.username + ':' +str(time.time()) + student.password).encode()).hexdigest()
  25. week = 60 * 60 * 24 * 7
  26. redisconn.setex(token,student.student_id,week)
  27. return self.success([{'token':token}],"注册成功")
  28. except Exception as emsg:
  29. return self.err(emsg)
  30. def resetPassword(self,**kwargs):
  31. try:
  32. session = self.session
  33. redisconn = self.redisconn
  34. if not redisconn.exists(kwargs['username']):
  35. return self.err("验证码已过期")
  36. if redisconn.get(kwargs['username']) != kwargs['smsCode'].encode('utf-8'):
  37. return self.err("验证码错误")
  38. kwargs['password']=hashlib.md5((kwargs['password']+':'+kwargs['username']).encode()).hexdigest()
  39. student = session.query(Student).filter(Student.username==kwargs['username']).first()
  40. session.query(Student).filter(Student.username==kwargs['username']).update({'password':kwargs['password']})
  41. session.commit()
  42. token = hashlib.md5((kwargs['username'] + ':' +str(time.time()) + kwargs['password']).encode()).hexdigest()
  43. week = 60 * 60 * 24 * 7
  44. redisconn.setex(token,student.student_id,week)
  45. return self.success([],"重置密码成功")
  46. except Exception as emsg:
  47. return self.err(emsg)
  48. def login(self,username,password):
  49. try:
  50. session = self.session
  51. redisconn = self.redisconn
  52. student = session.query(Student).filter(Student.username == username).first()
  53. if not student:
  54. return self.err("该账号尚未注册")
  55. if student and student.password == hashlib.md5((password+':'+username).encode()).hexdigest():
  56. token = hashlib.md5((student.username + ':' +str(time.time()) + student.password).encode()).hexdigest()
  57. week = 60 * 60 * 24 * 7
  58. redisconn.setex(token, student.student_id,week)
  59. results = self.studentInfo(student.student_id)
  60. results['token']=token
  61. return self.success([results],"登陆成功")
  62. else:
  63. return self.err("密码或账号不正确")
  64. except Exception as emsg:
  65. return self.err(emsg)
  66. def firstCheck(self,student_id):
  67. return self.success([self.studentInfo(student_id)],"token有效")
  68. #登陆后的
  69. def studentInfo(self,student_id):
  70. session = self.session
  71. baseinfo = session.query(Student.username,Student.building_id,Student.nickname,Student.community_id,Student.openid).filter(Student.student_id==student_id).first()
  72. results = dict()
  73. results['studentInfo']=dict(zip(['username','building_id','nickname','community_id','openid'],baseinfo))
  74. copyTasks = session.query(PrintTask.task_id,PrintTask.file_name,PrintTask.pages,PrintTask.bothside,PrintTask.colorful,PrintTask.copies,PrintTask.handouts)\
  75. .filter(and_(PrintTask.student_id==student_id,PrintTask.task_state == 0,PrintTask.file_key==None)).all()
  76. printTasks= session.query(PrintTask.task_id,PrintTask.file_name,PrintTask.pages,PrintTask.bothside,PrintTask.colorful,PrintTask.copies,PrintTask.handouts)\
  77. .filter(and_(PrintTask.student_id==student_id,PrintTask.task_state == 0,PrintTask.file_key != None)).all()
  78. copy = list()
  79. for item in copyTasks:
  80. copy.append(dict(zip(['task_id','file_name','pages','bothside','colorful','copies','handouts'],item)))
  81. printTask = list()
  82. for item in printTasks:
  83. printTask.append(dict(zip(['task_id','file_name','pages','bothside','colorful','copies','handouts'],item)))
  84. results['todoTask']={"print": printTask, "copy" : copy}
  85. priceRule = session.query(Shop.id,Shop.black1_price,Shop.black2_price,Shop.colorful1_price,Shop.colorful2_price).filter(Shop.community_id==baseinfo.community_id).first()
  86. if priceRule:
  87. results["priceRule"]= {
  88. "oneFace":{
  89. "black":priceRule.black1_price/100.0,
  90. "colorful":priceRule.colorful1_price/100.0
  91. },
  92. "twoFace":{
  93. "black":priceRule.black2_price/100.0,
  94. "colorful":priceRule.colorful2_price/100.0
  95. }
  96. }
  97. results['shop_id']=priceRule.id
  98. results['demand_time']=["8点-9点","11点-12点","14点-15点","17点-18 点","21点-22点"]
  99. return results
  100. def getStudentInfo(self, **kwargs):
  101. session = self.session
  102. try:
  103. token = kwargs['token']
  104. studentid = kwargs['studentid']
  105. collection = session.query(Student,Academy, Class, Major, Building, Community).join(Academy, Student.academy_id == Academy.id)\
  106. .join(Class, Student.class_id == Class.id)\
  107. .join(Major, Student.major_id == Major.id)\
  108. .join(Building, Building.id == Student.building_id)\
  109. .join(Community, Student.community_id == Community.id)\
  110. .filter(Student.student_id == studentid).first()
  111. results = [dict(
  112. username = collection[0].username,
  113. nickname = collection[0].nickname,
  114. enroll_year = collection[0].enroll_year,
  115. academyName = collection[1].name,
  116. className = collection[2].name,
  117. majorName = collection[3].name,
  118. buildingName = collection[4].name,
  119. communityName = collection[5].name,
  120. )]
  121. return self.success(results=results)
  122. except KeyError:
  123. raise tornado.web.HTTPError(400)
  124. except Exception as emsg:
  125. return self.err(msg=emsg)
  126. #Not Finished
  127. def updateStudentInfo(self, **kwargs):
  128. session = self.session
  129. try:
  130. token = kwargs['token']
  131. studentid = kwargs['studentid']
  132. return self.success()
  133. except KeyError:
  134. raise tornado.web.HTTPError(400)
  135. except Exception as emsg:
  136. return self.err(msg=emsg)
  137. def updateStuentPass(self, **kwargs):
  138. session = self.session
  139. redisconn = self.redisconn
  140. try:
  141. token = kwargs['token']
  142. studentid = kwargs['studentid']
  143. oldPassword = kwargs['oldPassword']
  144. newPassword = kwargs['newPassword']
  145. collection = session.query(Student).filter(Student.student_id == studentid).first()
  146. if collection is None:
  147. return self.err(msg='请注册后登陆')
  148. if hashlib.md5((collection.username + ':' +str(time.time()) + oldPassword).encode()).hexdigest() != collection.password:
  149. return self.err('输入原密码错误')
  150. else:
  151. student = Student(student_id=studentid,
  152. password=hashlib.md5((collection.username + ':' +str(time.time()) + newPassword).encode()).hexdigest())
  153. session.merge(student)
  154. session.commit()
  155. token = hashlib.md5((collection.username + ':' + str(time.time()) + collection.password).encode()).hexdigest()
  156. week = 60 * 60 * 24 * 7
  157. redisconn.setex(token, studentid, week)
  158. return self.success([],"修改密码成功")
  159. except KeyError:
  160. raise tornado.web.HTTPError(400)
  161. except Exception as emsg:
  162. return self.err(msg=emsg)
  163. def bindWechat(self,student_id,openid):
  164. try:
  165. session = self.session
  166. session.query(Student).filter(Student.student_id==student_id).update({'openid':openid})
  167. session.commit()
  168. # return self.success([],"绑定微信成功")
  169. return True
  170. except Exception,e:
  171. return False
  172. def bindWechatStatus(self,student_id):
  173. try:
  174. session = self.session
  175. student = session.query(Student).filter(Student.student_id==student_id).first()
  176. if student.openid:
  177. return self.success([],"绑定微信成功")
  178. else:
  179. return self.err("暂未成功")
  180. except Exception,e:
  181. return self.err(e)