def POST(self): data = web.input(req='', sid='', name='') if data.req == 'check': web.header('Content-Type', 'application/json') if data.sid == '': return "{}" try: if User.getBy(studentId=data.sid): # 是已注册的学生 return json.dumps({'valid': '2'}) else: if Student.getBy(studentId=data.sid): # 是学生,但尚未注册 return json.dumps({'valid': '1'}) else: return json.dumps({'valid': '0'}) except Exception as err: return json.dumps({}) elif data.req == 'submit': web.header('Content-Type', 'application/json') if data.sid == '': return json.dumps({'errinfo': "请输入您的学号"}) if data.name == '': return json.dumps({'errinfo': "请输入您的姓名"}) try: user = User.getBy(studentId=data.sid, studentName=data.name) if user == None: # 学生身份验证失败 return json.dumps({'errinfo': "您输入的学号和姓名不匹配,请检查后重试."}) else: self.session.name = user.studentName self.session.sid = user.studentId self.session.phone = user.phone self.session.role = "student" self.session.logged = True if hasattr(self.session, 'weixinId'): user.weixinId = self.session.weixinId user.update() del self.session.weixinId return json.dumps({'successinfo': '登陆成功,正在跳转'}) except Exception as err: return json.dumps({'errinfo': '出现错误: ' + err}) else: return web.Forbidden()
def POST(self): data = web.input( sid="", name="", birthday="", phone="", sex="", message="" ) if not data.sid: return json.dumps({'err': '请输入学号!'}) if not data.name: return json.dumps({'err': '请输入姓名!'}) person = User.getBy(studentId=data.sid, studentName=data.name) if person: print("Already Registerd!") """ TODO : 给出过渡页面,提示用户已经注册 """ return json.dumps({'success': '已经注册, 请直接登录', 'action': 'signin'}) else: # 未注册 student = Student.getBy(studentId=data.sid, studentName=data.name) if student == None: # 学号&姓名无效 # self.page.errinfo = "学生身份验证出错,请输入正确的学生信息." # print self.page.errinfo # return render.order.signup(page = self.page) return json.dumps({'err': '学生身份验证出错,请输入正确的学生信息.'}) weixinId = "" if hasattr(self.session, 'weixinId'): weixinId = self.session.weixinId del self.session.weixinId User(dict( studentId=data.sid, studentName=data.name, sex=self.getSexId(data.sex), birthday=data.birthday, phone=data.phone, shortMessage=data.message, weixinId=weixinId, lastOrderTime="0000-00-00", addTime=web.SQLLiteral("NOW()"), isLock=False )).insert() self.session.name = data.name self.session.sid = data.sid self.session.phone = data.phone self.session.role = "student" self.session.logged = True return json.dumps({'success': '注册成功', 'action': 'info'})
def GET(self): # 获取用户信息 try: user = User.getBy(studentId=self.session.sid, studentName=self.session.name) # 获取订单信息 if user == None: return self.error("没有找到您的信息") history_orders = Order.get_my_history_orders(user.id) active_orders = Order.get_my_active_orders(user.id) return render.order.orderinfo(page=self.page, user=user, history_orders=history_orders, active_orders=active_orders) except Exception as err: return self.error(err)
def _decoder(*args, **kwargs): print ("Before {} is called.".format(func.__name__)) data = web.input(wid='') if StuAuth.isValid(data.wid): # 通过URL编码方式登陆 result = User.getBy(weixinId=data.wid) if result: web.config._session.name = result.studentName web.config._session.sid = result.studentId web.config._session.phone = result.phone web.config._session.role = "student" web.config._session.logged = True else: if web.config._session.logged and web.config._session.role == "student": person = User.getBy(studentId=web.config._session.sid) if not person.weixinId: person.weixinId = data.wid person.update() web.config._session.weixinId = data.wid return web.seeother("") else: ret = func(*args, **kwargs) print ("After {} is called.".format(func.__name__)) return ret
def checkMatch(self, sid, name): if sid == '': return -1 if name == '': return -2 try: student = Student.getBy(studentId=sid, studentName=name) if student: # 学生身份验证通过 Order.refresh_orders() user = User.getBy(studentId=sid, studentName=name) if user: # 已注册 if user.isLock: # 被锁定 return 2 else: # 有效 return 1 else: # 没有注册 return 3 else: return 0 # 验证出错 except Exception as err: print err return -3 # 系统出现错误
def get_my_order(message): try: user = User.getBy(weixinId=message.source) if user == None: return "您尚未注册, 请先注册." my_orders = sorted(Order.get_my_active_orders(user.id), key=lambda x: str(x.birthday)) if len(my_orders) == 0: return [[ template.page["info"].title, "您当前没有未处理订单.", site.image_url + "/thumbnail/" + template.page["info"].img, site.root + template.page["info"].url + "?wid=" + str(message.source) ]] msg = [model.print_my_orders(order) for order in my_orders] return [[ template.page["info"].title, "\n\n------\n\n".join(msg), site.image_url + "/thumbnail/" + template.page["info"].img, site.root + template.page["info"].url + "?wid=" + str(message.source) ]] except Exception as err: return 'Error occured' return str(err)
def POST(self): data = web.input( req="", studentId="", studentName="", birthday="", phone="", sex="", location="", canteen="", package="", message="" ) if data.req == 'canteen': web.header('Content-Type', 'application/json') try: canteens = Canteen.getAll(location=data.location) result = [dict(cid=item.id, name=item.name) for item in canteens] return json.dumps(result) except Exception: return '{}' elif data.req == 'package': web.header('Content-Type', 'application/json') try: meals = Meal.getAll(canteenId=data.canteen, active=1) result = [dict(id=item.id, name=item.name) for item in meals] return json.dumps(result) except Exception: return '{}' elif data.req == 'submit': # 验证数据有效性 web.header('Content-Type', 'application/json') status = self.checkMatch(data.studentId, data.studentName) if status == -3: return json.dumps({'errinfo': "抱歉,系统出现错误."}) elif status == -2: return json.dumps({'errinfo': "姓名不能为空"}) elif status == -1: return json.dumps({'errinfo': "学号不能为空"}) elif status == 0: return json.dumps({'errinfo': "学号与姓名不匹配!"}) elif status == 2: return json.dumps({'errinfo': "您的账户被锁定,请检查是否您是否有未完成的订单!"}) elif status == 3: # 先注册 User(dict( studentId=data.studentId, studentName=data.studentName, sex=self.getSexId(data.sex), birthday=data.birthday, phone=data.phone, shortMessage=data.message, lastOrderTime="0000-00-00", addTime=web.SQLLiteral("NOW()"), isLock=False )).insert(); # 检查 餐品是否有效是否有效 meal = Meal.get(data.package) if meal == None or str(meal.canteenId) != str(data.canteen): return json.dumps({'errinfo': "请不要伪造请求"}) # 检查订餐日期是否有效 if not re.match(r'^\d{4}-\d{2}-\d{2}$', data.birthday): return json.dumps({'errinfo': '请输入正确的日期, 如 1990-10-01'}) max_deltatime = datetime.timedelta(days=7) min_deltatime = datetime.timedelta(days=0) order_time = datetime.datetime.strptime(data.birthday, "%Y-%m-%d") now = datetime.datetime.now() # 提前 1 - 7 天订餐 if order_time > now + max_deltatime or order_time < now + min_deltatime: return json.dumps({'errinfo': '请提前1-7天订餐!'}) # 获取领餐人信息 user = User.getBy(studentId=data.studentId, studentName=data.studentName) if user.lastOrderTime: last_order_time = datetime.datetime.strptime(str(user.lastOrderTime), "%Y-%m-%d") deltatime = datetime.timedelta(days=300) # 判断订餐间隔 if last_order_time + deltatime > datetime.datetime.now(): return json.dumps({'errinfo': "订餐时间间隔过短, 一年内只能免费订餐一次!"}) # 获取订餐人(当前操作者信息) adder = User.getBy(studentId=self.session.sid) Order(dict(userId=adder.id, canteenId=data.canteen, mealId=data.package, studentId=data.studentId, studentName=data.studentName, phone=data.phone, sex=self.getSexId(data.sex), birthday=data.birthday, token=self.generateToken(), wish=data.message, addTime=web.SQLLiteral("NOW()"), isActive=True )).insert() user.isLock = 1 user.update() return json.dumps({'successinfo': "添加成功!"}) else: raise web.Forbidden()