Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
    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'})
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
        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
Exemplo n.º 5
0
 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  # 系统出现错误
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
    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()