def cart_index(): if g.current_member is None: return json_error_response("您需要登录才能使用购物车!") if g.current_member.status != 1: return json_error_response("该账户已被注销,无法使用购物车") member_id = g.current_member.id cart_info_list = MemberCart.query.filter_by(member_id=member_id).all() if cart_info_list is None: data = {"list": None} return json_response(data=data) # this is different from what the imooc course does cart_food_info_list = db.session.query(MemberCart, Food)\ .filter(MemberCart.food_id == Food.id).all() cart_list = [{ "id": cart_info.id, "food_id": food_info.id, "pic_url": build_image_url(food_info.main_image), "name": food_info.name, "price": str(food_info.price), "quantity": cart_info.quantity, "active": True } for cart_info, food_info in cart_food_info_list] app.logger.info("length of list %d" % len(cart_list)) total_price = sum(float(item["price"]) for item in cart_list) data = { "list": cart_list, "totalPrice": str(Decimal(total_price).quantize(Decimal("0.00"))), } return json_response(data=data)
def order_ops(): member_info = g.current_member order_sn = request.form.get("order_sn", None) if order_sn is None: return json_error_response("订单操作失败(1)") action = request.form.get("action", None) if action is None: return json_error_response("订单操作失败(2)") pay_order_info = PayOrder.query.filter_by(order_sn=order_sn).first() if pay_order_info is None: return json_error_response("订单操作失败(3)") if action == "cancel": if pay_utils.close_order(pay_order_id=pay_order_info.id): return json_response("取消订单成功") else: return json_error_response("订单操作失败(4)") elif action == "confirm": pay_order_info.deliver_status = 1 pay_order_info.updated_time = get_current_time() db.session.add(pay_order_info) db.session.commit() return json_response("确认收货成功") elif action == "comment": pass else: return json_response("订单操作失败(5)")
def my_address_ops(): addr_id = utils.get_int(request.form, "id", 0) action = request.form.get("action", "") addr_info = MemberAddress.query.filter_by(id=addr_id).first() if not addr_info: return json_error_response("地址更改操作错误(1)") if action == "set_default": member_id = g.current_member.id current_time = utils.get_current_time() MemberAddress.query.filter_by(member_id=member_id) \ .update({"is_default": 0, "updated_time": current_time}) addr_info.is_default = 1 addr_info.updated_time = utils.get_current_time() db.session.add(addr_info) db.session.commit() return json_response() elif action == "delete": addr_info.status = 0 addr_info.updated_time = utils.get_current_time() db.session.add(addr_info) db.session.commit() latest_addr = MemberAddress.query.filter_by(status=1).order_by(MemberAddress.updated_time.desc()).first() if latest_addr: latest_addr.is_default = 1 db.session.add(latest_addr) db.session.commit() return json_response() else: return json_error_response("地址更改操作错误(2)")
def cart_set(): member_id = g.current_member.id food_id = get_int(request.form, "food_id", 0) food_info = Food.query.filter_by(id=food_id).first() if food_id < 1 or food_info is None: return json_error_response("该菜品不存在") quantity = get_int(request.form, "quantity", None) if quantity is None or quantity < 0: return json_error_response("请提供正确的菜品数量") if food_info.stock < quantity: return json_error_response("该菜品库存不足") if quantity > 0: cart_info = set_cart_info(member_id, food_id, quantity) if cart_info is None: return json_error_response("添加至购物车失败") else: return json_response("成功添加菜品至购物车") else: if delete_cart_info(member_id, food_id): return json_error_response("删除菜品失败") else: return json_response("成功从购物车删除菜品")
def login(): """Complete login process: 1. mina/pages/index/index.js: Page.login() --> request with login_code --> this server 3. this function --> request with appid, appSecretKey, login_code --> wechat official api 4. wechat official api --> session_key, openid --> this server """ values = request.values login_code = values.get("login_code", "") if len(login_code) < 1: return json_error_response("需要login_code") # complete login process using login_code openid = get_wechat_openid(login_code) if openid is None: return json_error_response("调用微信登录信息出错") # check if user has registered bind_info = OauthMemberBind.query.filter_by( openid=openid, type=1).first() # type=1 corresponds to wechat if bind_info: # member exists member_info = Member.query.filter_by(id=bind_info.member_id).first() if not member_info: return json_error_response("查询不到后台用户信息") return json_response("已经绑定成功", data={"token": generate_token(member_info)}) else: # register new member new_member = Member() new_member.nickname = values.get("nickName", "") new_member.sex = values.get("gender", 0) new_member.avatar = values.get("avatarUrl", "") new_member.salt = generate_salt() new_member.updated_time = new_member.created_time = get_current_time() db.session.add(new_member) db.session.commit() # bind new member with new OathMemberBind entry new_bind = OauthMemberBind() new_bind.member_id = new_member.id new_bind.type = 1 new_bind.openid = openid new_bind.extra = "" new_bind.updated_time = new_bind.created_time = get_current_time() db.session.add(new_bind) db.session.commit() return json_response("新用户注册成功", data={"token": generate_token(new_member)})
def set(): if request.method == "GET": id = int(request.args.get("id", "0")) redir_response = make_response(redirect(build_url("/member/index"))) if id == 0: return redir_response member_info = Member.query.filter_by(id=id).first() if member_info is None: return redir_response return render_template_with_global_vars( "member/set.html", context={"member": member_info}) elif request.method == "POST": id = int(request.form.get("id", "0")) if id == 0: return json_error_response("该用户不存在,请确认用户id!") member_info = Member.query.filter_by(id=id).first() if member_info is None: return json_error_response("该用户不存在,请确认用户id!") new_nickname = request.form.get("nickname", "") if len(new_nickname) < 1: return json_error_response("会员名称不能为空!") member_info.nickname = new_nickname member_info.update_time = get_current_time() db.session.add(member_info) db.session.commit() return json_response("修改会员信息成功!")
def ops(): values = request.form if "act" not in values or "id" not in values: return json_error_response("无效的账号编辑操作") member_info = Member.query.filter_by(id=values["id"]).first() if not member_info: return json_error_response("无效的账号编辑操作") if values["act"] == "remove": member_info.status = 0 success_msg = "成功移除 %s 的账户" % (member_info.nickname) elif values["act"] == "recover": success_msg = "成功恢复 %s 的账户" % (member_info.nickname) member_info.status = 1 else: return json_error_response("无效的账号编辑操作") member_info.update_time = get_current_time() db.session.add(member_info) db.session.commit() return json_response(success_msg)
def ops(): id = get_int(request.form, "id", 0) act = request.form.get("act", None) if "act" is None or "id" == 0: return json_error_response("无效的菜品项目编辑操作") food_info = Food.query.filter_by(id=id).first() if not food_info: return json_error_response("无效的菜品项目编辑操作") if act == "remove": food_info.status = 0 success_msg = "成功移除菜品项目 %s" % (food_info.name) elif act == "recover": success_msg = "成功恢复菜品项目 %s" % (food_info.name) food_info.status = 1 else: return json_error_response("无效的账号编辑操作") food_info.update_time = get_current_time() db.session.add(food_info) db.session.commit() return json_response(success_msg)
def food_info(): values = request.values food_id = get_int(values, "id", 0) if food_id == 0: return json_error_response("该菜品不存在!") food_info = Food.query.filter_by(id=food_id).first() if food_info is None: return json_error_response("该菜品不存在!") if food_info.status != 1: return json_error_response("该菜品已下架!") member_info = g.current_member member_id = member_info.id if member_info else 0 main_image_url = build_image_url(food_info.main_image) info = { "id": food_id, "name": food_info.name, "summary": food_info.summary, "total_count": food_info.total_count, "comment_count": food_info.comment_count, "stock": food_info.stock, "price": str(food_info.price), "main_image": main_image_url, "pics": [main_image_url], "cart_quantity": get_cart_quantity(member_id, food_id) } return json_response(data={"info": info})
def food_search(): values = request.values cat_id = get_int(values, "cat_id", 0) mix_kw = values.get("mix_kw", "") current_page = get_int(values, "p", 1) food_info_query = Food.query.filter_by(status=1) if len(mix_kw) > 0: pattern = "%%%s%%" % values["mix_kw"] rule = or_(Food.name.ilike(pattern), Food.tags.ilike(pattern)) food_info_query = food_info_query.filter(rule) if cat_id > 0: food_info_query = food_info_query.filter_by(cat_id=cat_id) num_items = food_info_query.count() items_per_page = app.config["APP_FOOD_INDEX_ITEMS_PER_PAGE"] offset = (current_page - 1) * items_per_page food_info_query = food_info_query.order_by(Food.total_count.desc(), Food.id.desc()) food_info_list = food_info_query.offset(offset).limit(items_per_page).all() food_list = [] if food_info_list: food_list = [{"id": food.id, "name": food.name, "price": str(food.price), "min_price": str(food.price), "pic_url": build_image_url(food.main_image) } for food in food_info_list] data = {"list": food_list, "has_next_page": math.ceil(num_items / items_per_page) > current_page} return json_response(data=data)
def reset_pwd(): if request.method == "GET": return render_template_with_global_vars("user/reset_pwd.html") elif request.method == "POST": old_pwd = request.form["old_pwd"] if "old_pwd" in request.form else "" new_pwd = request.form["new_pwd"] if "new_pwd" in request.form else "" if len(old_pwd) < 1 or len(new_pwd) < 1: return json_error_response("您输入的密码不能为空!") if len(new_pwd) < 6: return json_error_response("您的密码不能短于6个字符!") if "current_user" not in g or g.current_user is None: return json_error_response("您还没有登录,不能更改个人信息!") # check old password user_info = g.current_user if generate_salted_pwd(old_pwd, user_info.login_salt) != user_info.login_pwd: return json_error_response("您输入的旧密码不正确!") user_info.login_pwd = generate_salted_pwd(new_pwd, user_info.login_salt) db.session.add(user_info) db.session.commit() response = json_response(msg="修改密码成功!") response.set_cookie(app.config["AUTH_COOKIE_NAME"], generate_cookie(user_info), 60*60*24*30) return response
def ops(): values = request.values if "act" not in values or "uid" not in values: return json_error_response("无效的账号编辑操作") user_info = User.query.filter_by(uid=values["uid"]).first() if not user_info: return json_error_response("无效的账号编辑操作") if values["act"] == "remove": user_info.status = 0 success_msg = "成功移除 %s 的账户 (登录名 %s)" % (user_info.nickname, user_info.login_name) elif values["act"] == "recover": success_msg = "成功恢复 %s 的账户 (登录名 %s)" % (user_info.nickname, user_info.login_name) user_info.status = 1 else: return json_error_response("无效的账号编辑操作") user_info.update_time = get_current_time() db.session.add(user_info) db.session.commit() return json_response(success_msg)
def my_index(): data = {"user_info": { "avatar_url": g.current_member.avatar, "nickname": g.current_member.nickname, "mobile": g.current_member.mobile }} return json_response(data=data)
def order_info(): member_id = g.current_member.id purchase_list = request.form.get("purchaseList", None) if purchase_list is None: return json_error_response("订单内容不能为空!") purchase_list = json.loads(purchase_list) if len(purchase_list) < 1: return json_error_response("订单内容不能为空!") food_id_to_quantity = { item["food_id"]: item["quantity"] for item in purchase_list } food_ids = food_id_to_quantity.keys() food_info_list = Food.query.filter(Food.id.in_(food_ids)).all() if len(food_info_list) < 1: return json_error_response("无法查询到订单中的菜品!") deliver_price = Decimal(5000.00) order_list = [{ "food_id": food.id, "name": food.name, "price": str(food.price), "pic_url": build_image_url(food.main_image), "quantity": food_id_to_quantity[food.id], } for food in food_info_list] pay_price = Decimal( sum(food.price * food_id_to_quantity[food.id] for food in food_info_list)) default_address = {} default_addr_info = MemberAddress.query.filter_by( status=1, is_default=1, member_id=member_id).first() if default_addr_info: default_address = { "id": default_addr_info.id, "name": default_addr_info.contact_name, "mobile": default_addr_info.mobile, "address": "%s%s%s%s" % (default_addr_info.province_str, default_addr_info.city_str, default_addr_info.district_str, default_addr_info.address) } data = { "order_list": order_list, "deliver_price": str(deliver_price), "pay_price": str(pay_price), "total_price": str(pay_price + deliver_price), "default_address": default_address } return json_response(data=data)
def my_address_set(): member_id = g.current_member.id addr_id = utils.get_int(request.form, "id", 0) contact_name = request.form.get("contact_name", "") mobile = request.form.get("mobile", "") address = request.form.get("address", "") province_id = utils.get_int(request.form, "province_id", 0) city_id = utils.get_int(request.form, "city_id", 0) district_id = utils.get_int(request.form, "district_id", 0) province_str = request.form.get("province_str", "") city_str = request.form.get("city_str", "") district_str = request.form.get("district_str", "") empty_items = [] for var, item in zip([contact_name, mobile, address, province_str, city_str, province_id, city_id], ["联系人姓名", "手机号码", "详细地址", "省份名称", "城市名称", "省份代码", "城市代码"]): if not var: empty_items.append(item) if len(empty_items) > 0: return json_error_response("设置地址时以下内容不能为空:" + "、".join(empty_items)) # check if addr_info already exists addr_info = MemberAddress.query.filter_by(id=addr_id).first() if addr_info: if addr_info.member_id != member_id: return json_error_response("修改地址时出现错误(1)") if not addr_info: default_addr_cnt = MemberAddress.query.filter_by(is_default=1, member_id=member_id, status=1).count() addr_info = MemberAddress() addr_info.member_id = member_id addr_info.is_default = 1 if default_addr_cnt == 0 else 0 addr_info.created_time = utils.get_current_time() addr_info.contact_name = contact_name addr_info.mobile = mobile addr_info.province_id = province_id addr_info.province_str = province_str addr_info.city_id = city_id addr_info.city_str = city_str addr_info.district_id = district_id addr_info.district_str = district_str addr_info.address = address addr_info.updated_time = utils.get_current_time() db.session.add(addr_info) db.session.commit() return json_response("操作成功")
def login(): if request.method == "GET": return render_template("user/login.html") else: error_response, user_info = check_login(request) if error_response: return error_response response = json_response(msg="You've logged in successfully!") response.set_cookie(app.config["AUTH_COOKIE_NAME"], generate_cookie(user_info), 60*60*24*30) return response
def my_address_list(): member_id = g.current_member.id address_info = MemberAddress.query.filter_by(member_id=member_id, status=1) address_list = [{ "id": addr.id, "isDefault": addr.is_default == 1, "name": addr.contact_name, "mobile": addr.mobile, "address": "%s%s%s%s" % (addr.province_str, addr.city_str, addr.district_str, addr.address) } for addr in address_info] data = {"address_list": address_list} return json_response(data=data)
def my_comment_list(): member_id = g.current_member.id comment_order_list = db.session.query(MemberComment, PayOrder)\ .filter(MemberComment.pay_order_id == PayOrder.id, MemberComment.member_id == member_id).all() res_list = [{ "date": str(comment.created_time), "order_number": pay_order.order_number, "content": comment.content } for comment, pay_order in comment_order_list] return json_response(data={"list": res_list})
def comment(): id = get_int(request.args, "id", 0) if id == 0: return json_error_response("无法获取评价信息(1)") comment_member_list = db.session.query(MemberComment, Member)\ .filter(MemberComment.member_id == Member.id, MemberComment.food_ids.ilike("%_{0}_%".format(id))).all() res_list = [{ "date": str(comment.created_time), "user_avatar_url": member.avatar, "content": comment.content, "score": comment.score_desc } for comment, member in comment_member_list] return json_response(data={"list":res_list})
def order_callback_dev(): """ Dev mode handling """ if not app.config["DEV_MODE"]: return json_error_response("操作有误!") xml_data = request.form.get("xml", None) callback_data = wc_utils.xml_to_dict(xml_data) sign = callback_data.pop("sign") check_sign = wc_utils.create_sign(callback_data) if sign != check_sign: return json_error_response("操作有误(1)") order_sn = callback_data["out_trade_no"] pay_order_info = PayOrder.query.filter_by(order_sn=order_sn).first() if pay_order_info is None: return json_error_response("操作有误(2)") if int(pay_order_info.total_price * 100) != int( callback_data["total_fee"]): return json_error_response("操作有误(3)") if pay_order_info.status == 1: return json_error_response("操作有误(4)") # callback succeeded, modify records and states in database # tables affected: PayOrder, PayOrderCallbackData, FoodSaleChangeLog pay_sn = callback_data["transaction_id"] res = pay_utils.order_success(pay_order_id=pay_order_info.id, pay_sn=pay_sn) if not res: return json_error_response("操作有误(5)") # add record of this successful transaction to database pay_utils.add_pay_callback_data(pay_order_id=pay_order_info.id, data=xml_data) # pass raw form of data return json_response("【开发模式】付款成功,信息已录入数据库")
def cart_delete(): if g.current_member is None: return json_error_response("请先登录再删除菜品") if g.current_member.status != 1: return json_error_response("该账户已被注销,无法删除菜品") member_id = g.current_member.id deleted_list = request.form.get("deleted", None) if deleted_list is None: return json_error_response("菜品删除操作有误") else: deleted_list = list(json.loads(deleted_list)) if deleted_list is None or len(deleted_list) < 1: return json_error_response("菜品删除操作有误") app.logger.debug("deleted_list %s" % str(deleted_list)) if not delete_cart_info(member_id, deleted_list): return json_error_response("菜品删除操作遇到错误") else: return json_response("成功从购物车删除%d件菜品" % len(deleted_list))
def check_reg(): values = request.values login_code = values.get("login_code", "") if len(login_code) < 1: return json_error_response("需要login_code") openid = get_wechat_openid(login_code) if openid is None: return json_error_response("调用微信登录信息出错") bind_info = OauthMemberBind.query.filter_by( openid=openid, type=1).first() # type=1 corresponds to wechat if not bind_info: return json_error_response("未绑定") member_info = Member.query.filter_by(id=bind_info.member_id).first() if not member_info: return json_error_response("查询不到对应的用户信息") # similar function to cookies, token is saved in front end so we may save login status return json_response("登录成功", data={"token": generate_token(member_info)})
def cat_set(): if request.method == "GET": id = get_int(request.args, "id", 0) if id > 0: cat_info = FoodCat.query.filter_by(id=id).first() if cat_info is None: return make_response(redirect(build_url("/food/cat"))) else: cat_info = None return render_template_with_global_vars("food/cat_set.html", context={"cat": cat_info}) elif request.method == "POST": id = get_int(request.form, "id", 0) if id > 0: cat_info = FoodCat.query.filter_by(id=id).first() if cat_info is None: return json_error_response("无效的食品类别编辑操作") else: cat_info = None name = request.form.get("name", "") weight = int(request.form.get("weight", "0")) if len(name) < 1: return json_error_response("食品类别名称不能为空!") if weight < 1 or weight > 4: return json_error_response("食品类别的权重必须在1-4之间!(含1和4)") if cat_info is None: cat_info = FoodCat() cat_info.created_time = get_current_time() cat_info.status = 1 cat_info.name = name cat_info.weight = weight cat_info.updated_time = get_current_time() db.session.add(cat_info) db.session.commit() return json_response("修改食品类别信息成功!")
def my_address_get(): address_id = utils.get_int(request.values, "id", 0) address_info = MemberAddress.query.filter_by(id=address_id).first() if not address_info: return json_error_response("无法获取地址信息") prov_idx, city_idx, distr_idx = \ utils.get_addr_idxs(address_info.province_id, address_info.city_id, address_info.district_id) data = { "contact_name": address_info.contact_name, "mobile": address_info.mobile, "province_name": address_info.province_str, "city_name": address_info.city_str, "district_name": address_info.district_str, "province_idx": prov_idx, "city_idx": city_idx, "distr_idx": distr_idx, "address": address_info.address } return json_response(data=data)
def edit(): if request.method == "GET": return render_template_with_global_vars("user/edit.html") elif request.method == "POST": nickname = request.form["nickname"] if "nickname" in request.form else "" email = request.form["email"] if "email" in request.form else "" if "current_user" not in g or g.current_user is None: return json_error_response("您还没有登录,不能更改个人信息!") if len(nickname) < 1 or len(email) < 1: return json_error_response("您的姓名或邮箱不能为空!") user_info = g.current_user user_info.nickname = nickname user_info.email = email db.session.add(user_info) db.session.commit() res_data = {"nickname": nickname, "email": email} return json_response(msg="账号个人信息编辑成功!", data=res_data)
def my_order_info(): order_sn = request.values.get("order_sn", "") if not order_sn: return json_error_response("查询订单信息错误,请稍后再试(1)") pay_order_info = PayOrder.query.filter_by(order_sn=order_sn).first() if not pay_order_info: return json_error_response("查询订单信息错误,请稍后再试(2)") pay_wait_time = app.config["PAY_WAIT_TIME"] deadline = pay_order_info.created_time + datetime.timedelta(minutes=pay_wait_time) address_info = json.loads(pay_order_info.deliver_info) data = { "order_sn": pay_order_info.order_sn, "status": pay_order_info.pay_status, "status_desc": pay_order_info.pay_status_desc, "deadline": deadline.strftime("%Y-%m-%d %H:%M"), "address": address_info, "base_price": str(pay_order_info.base_price), "shipping_price": str(pay_order_info.shipping_price), "total_price": str(pay_order_info.total_price), } # "poi" short for "PayOrderItem" poi_and_food_list = db.session.query(PayOrderItem, Food).filter( PayOrderItem.pay_order_id == pay_order_info.id, PayOrderItem.food_id == Food.id ) goods = [{ "pic_url": build_image_url(food.main_image), "name": food.name, "price": str(poi.price), "unit": poi.quantity } for poi, food in poi_and_food_list] data["goods"] = goods return json_response(data=data)
def food_index(): # get food info from database food_cat_info_list = FoodCat.query.filter_by(status=1).order_by(FoodCat.weight.desc()).all() food_cat_list = [{"id": 0, "name": "全部"}] if food_cat_info_list: food_cat_list = food_cat_list + [{"id": cat.id, "name": cat.name} for cat in food_cat_info_list] else: food_cat_list = None food_info_list = Food.query.filter_by(status=1).order_by(Food.total_count.desc(), Food.id).limit(3).all() if food_info_list: food_list = [{"id": food.id, "name": food.name, "pic_url": build_image_url(food.main_image)} for food in food_info_list] else: food_list = None data = { "bannerList": food_list, "catList": food_cat_list } return json_response(data=data)
def my_comment_add(): member_id = g.current_member.id order_sn = request.form.get("order_sn", None) if not order_sn: return json_error_response("评价操作失败(1)") pay_order_info = PayOrder.query.filter_by(member_id=member_id, order_sn=order_sn).first() if not pay_order_info: return json_error_response("评价操作失败(2)") if pay_order_info.comment_status: return json_error_response("已经评价过了,请勿重复评价") pay_order_items = PayOrderItem.query.filter_by(pay_order_id=pay_order_info.id).all() food_ids = "_".join(str(item.food_id) for item in pay_order_items) score = utils.get_int(request.form, "score", 10) content = request.form.get("content", "") comment_info = MemberComment() comment_info.member_id = member_id comment_info.food_ids = "_" + food_ids + "_" comment_info.pay_order_id = pay_order_info.id comment_info.score = score comment_info.content = content comment_info.created_time = utils.get_current_time() db.session.add(comment_info) db.session.commit() pay_order_info.comment_status = 1 pay_order_info.updated_time = utils.get_current_time() db.session.add(pay_order_info) db.session.commit() return json_response()
def set(): if request.method == "GET": cat_list = FoodCat.query.all() id = get_int(request.args, "id", 0) food_info = Food.query.filter_by(id=id).first() if (id > 0 and food_info is None) or (food_info is not None and food_info.status != 1): return redirect(build_url("/food/index")) ctx = {"food": food_info, "cat_list": cat_list} return render_template_with_global_vars("food/set.html", context=ctx) elif request.method == "POST": id = get_int(request.form, "id", 0) cat_id = get_int(request.form, "cat_id", 0) name = request.form.get("name", "") price = request.form.get("price", "") title_pic = request.form.get("title_pic", "") summary = request.form.get("summary", "") stock = get_int(request.form, "stock", 0) tags = request.form.get("tags", "") # form content verification if cat_id == 0: return json_error_response("请选择类别") empty_items = [] for var, item in zip([name, price, title_pic, summary, tags], ["菜品名称", "菜品价格", "封面图", "描述", "标签"]): if len(var) < 1: empty_items.append(item) if len(empty_items) > 0: return json_error_response("以下内容不能为空:" + "、".join(empty_items)) price = Decimal(price).quantize(Decimal("0.00")) if price <= 0: return json_error_response("售卖价格不能小于或者等于0") # create new entry in Food table food_info = Food.query.filter_by(id=id).first() before_stock = 0 if food_info: before_stock = food_info.stock else: food_info = Food() food_info.status = 1 food_info.created_time = get_current_time() food_info.cat_id = cat_id food_info.name = name food_info.price = price food_info.main_image = title_pic food_info.summary = summary food_info.stock = stock food_info.tags = tags food_info.updated_time = get_current_time() db.session.add(food_info) db.session.commit() # add entry into food stock change log if not set_food_stock_change_log(food_info.id, int(before_stock), int(stock) - int(before_stock), "后台直接更改"): return json_error_response("登记库存变更信息出现错误") return json_response("成功添加菜品 %s" % name)
def set(): default_pwd = "******" if request.method == "GET": # pass user info into template to fill in values of html form uid = request.args["uid"] if "uid" in request.args else None user_info = User.query.filter_by(uid=uid).first() if uid else None ctx = {"user": user_info, "default_pwd": default_pwd} return render_template_with_global_vars("account/set.html", context=ctx) elif request.method == "POST": # obtain info from form uid = int(request.form["uid"]) if "uid" in request.form else 0 username = request.form[ "login_name"] if "login_name" in request.form else "" pwd = request.form["login_pwd"] if "login_pwd" in request.form else "" nickname = request.form[ "nickname"] if "nickname" in request.form else "" mobile = request.form["mobile"] if "mobile" in request.form else "" email = request.form["email"] if "email" in request.form else "" app.logger.debug("setting info for uid %d, new username %s, pwd %s" % (uid, username, pwd)) # validate form elements if len(nickname) < 1 or len(email) < 1 or len(mobile) < 1: empty_items = [] if len(nickname) < 1: empty_items.append("姓名") if len(mobile) < 1: empty_items.append("手机") if len(email) < 1: empty_items.append("邮箱") if len(username) < 1: empty_items.append("登录名") if len(pwd) < 1: empty_items.append("登录密码") msg = "以下内容不能为空:" + "、".join(empty_items) return json_error_response(msg) if len(pwd) < 6 and uid == 0: return json_error_response("您的密码不能短于6个字符!") user_info = User.query.filter(User.login_name == username, User.uid != uid).first() if user_info: return json_error_response("该用户名已被使用,请使用别的用户名!") user_info = User.query.filter_by(uid=uid).first() app.logger.debug("uid %d user_info %s" % (uid, user_info)) new_user = False if user_info is None: new_user = True user_info = User() user_info.login_salt = generate_salt() user_info.created_time = get_current_time() user_info.login_name = username user_info.nickname = nickname user_info.mobile = mobile user_info.email = email user_info.updated_time = get_current_time() # edit password when it is not default value "*****" (see set.html) if pwd != default_pwd: user_info.login_pwd = generate_salted_pwd(pwd, user_info.login_salt) db.session.add(user_info) db.session.commit() return json_response("账号个人信息编辑成功!", data={})