爱家租房前端后分离项目学习资料(Flask)
Posted 码到城攻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爱家租房前端后分离项目学习资料(Flask)相关的知识,希望对你有一定的参考价值。
目录
文章目录
资料地址
资料说明
- 项目是基于 Python Flask 框架完成的 web 租房项目,相比较 Django ,灵活运用,是学习 Flask 必备的学习资料。
- 资料包含完整源码、和视频教程,以及众多辅助资料。
- 资料包 4G左右,建议空闲下载,认真学习。
项目部分功能展示
云盘资料概览
部分功能源码
用户登录
@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]\\d9", 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)
以上是关于爱家租房前端后分离项目学习资料(Flask)的主要内容,如果未能解决你的问题,请参考以下文章
Java项目:在线租房出租房屋系统(java+springboot+maven+mysql)