爱家租房前端后分离项目学习资料(Flask) 原创 工程项目 2022年8月27日 10:51 夏至未至 640 当前内容 5653 字,在路上,马上到,马上到 ### 目录 [TOC] ### 资料说明 1. 项目是基于 Python Flask 框架完成的 web 租房项目,相比较 Django ,灵活运用,是学习 Flask 必备的学习资料。 2. 资料包含完整源码、和视频教程,以及众多辅助资料。 3. 资料包 4G左右,建议空闲下载,认真学习。 4. 学习资料通过高价课程购买而来,并非原价买卖,这里只是收取辛苦整理费用,还望理解。 ### 项目部分功能展示 ### 云盘资料概览 ### 部分功能源码 #### 用户登录 @api.route("/sessions", methods=["POST"]) def login(): """用户登录 参数: 手机号、密码, json """ # 获取参数 # ajax 放回 JSON数据,request.get_json 获取json 数据 req_dict = request.get_json() current_app.logger.info("登录请求:%s" % req_dict) mobile = req_dict.get("mobile") password = req_dict.get("password") # 校验参数 # 参数完整的校验 if not all([mobile, password]): return jsonify(errno=RET.PARAMERR, errmsg="参数不完整") # 手机号的格式 if not re.match(r"1[34578]\d{9}", mobile): return jsonify(errno=RET.PARAMERR, errmsg="手机号格式错误") # 判断错误次数是否超过限制,如果超过限制,则返回 # redis记录: "access_nums_请求的ip": "次数" user_ip = request.remote_addr # 用户的ip地址 current_app.logger.info("登录用户IP:%s" % user_ip) try: access_nums = redis_store.get("access_num_%s" % user_ip) except Exception as e: current_app.logger.error(e) else: if access_nums is not None and int(access_nums) >= constants.LOGIN_ERROR_MAX_TIMES: return jsonify(errno=RET.REQERR, errmsg="错误次数过多,请稍后重试") # 从数据库中根据手机号查询用户的数据对象 try: user = User.query.filter_by(mobile=mobile).first() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="获取用户信息失败") # 用数据库的密码与用户填写的密码进行对比验证 if user is None or not user.check_password(password): # 如果验证失败,记录错误次数,返回信息 try: # redis的incr可以对字符串类型的数字数据进行加一操作,如果数据一开始不存在,则会初始化为1 redis_store.incr("access_num_%s" % user_ip) redis_store.expire("access_num_%s" % user_ip, constants.LOGIN_ERROR_FORBID_TIME) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DATAERR, errmsg="用户名或密码错误") # 如果验证相同成功,保存登录状态, 在session中 session["name"] = user.name session["mobile"] = user.mobile session["user_id"] = user.id current_app.logger.info("登录成功") return jsonify(errno=RET.OK, errmsg="登录成功") #### 用户下单 @api.route("/orders", methods=["POST"]) @login_required def save_order(): """保存订单""" user_id = g.user_id current_app.logger.info("保存订单") # 获取参数 order_data = request.get_json() if not order_data: return jsonify(errno=RET.PARAMERR, errmsg="参数错误") house_id = order_data.get("house_id") # 预订的房屋编号 start_date_str = order_data.get("start_date") # 预订的起始时间 end_date_str = order_data.get("end_date") # 预订的结束时间 # 参数检查 if not all((house_id, start_date_str, end_date_str)): return jsonify(errno=RET.PARAMERR, errmsg="参数错误") # 日期格式检查 try: # 将请求的时间参数字符串转换为datetime类型 start_date = datetime.datetime.strptime(start_date_str, "%Y-%m-%d") end_date = datetime.datetime.strptime(end_date_str, "%Y-%m-%d") assert start_date <= end_date # 计算预订的天数 days = (end_date - start_date).days + 1 # datetime.timedelta except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.PARAMERR, errmsg="日期格式错误") # 查询房屋是否存在 try: house = House.query.get(house_id) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="获取房屋信息失败") if not house: return jsonify(errno=RET.NODATA, errmsg="房屋不存在") # 预订的房屋是否是房东自己的 if user_id == house.user_id: return jsonify(errno=RET.ROLEERR, errmsg="不能预订自己的房屋") # 确保用户预订的时间内,房屋没有被别人下单 try: # 查询时间冲突的订单数 count = Order.query.filter(Order.house_id == house_id, Order.begin_date <= end_date, Order.end_date >= start_date).count() # select count(*) from order where .... except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg="检查出错,请稍候重试") if count > 0: return jsonify(errno=RET.DATAERR, errmsg="房屋已被预订") # 订单总额 amount = days * house.price # 保存订单数据 order = Order( house_id=house_id, user_id=user_id, begin_date=start_date, end_date=end_date, days=days, house_price=house.price, amount=amount ) try: db.session.add(order) db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DBERR, errmsg="保存订单失败") return jsonify(errno=RET.OK, errmsg="OK", data={"order_id": order.id}) ### 资料下载 链接:h ¥22.00 解锁全文 下载资源 本文标题: 爱家租房前端后分离项目学习资料(Flask) 本文作者: 夏至未至 发布时间: 2022年8月27日 10:51 最近更新: 2023年3月24日 11:04 原文链接: 许可协议: 署名-非商业性-禁止演绎 4.0 国际(CC BY-NC-ND 4.0) 请按协议转载并保留原文链接及作者 Flask(1) 上一个 微信公众号项目 下一个 QT 学习资料(书籍和源码)整理 当前文章评论暂未开放,请移步至留言处留言。