项目简要分析4
获取区域接口(这个有疑问)
获取区域信息在json.dumps需要看
保存房屋的基本信息接口
有几个问题没有弄明白
关于过滤掉设施的id的语句
还有就是把房屋添加设施的列表
接口文档
url /houses/info 请求方式 POST 接受参数: 所有配套设施 返回格式 { house_id:1 }
业务逻辑如下:
接受所有的房屋的基本设置和房屋的基本设施参数
保存房屋的基本设置到house表
在添加和设施关联的房屋设施的id号
接受前端传得参数,并对其校验
if not all((title, price, area_id, address, room_count,acreage, unit, capacity, beds, deposit, min_days, max_days)): return jsonify(errno=RET.PARAMERR, errmsg="参数不完整")
创建房屋对象
user_id = g.user_id house = House( user_id=user_id, area_id=area_id, title=title, price=price, address=address, room_count=room_count, acreage=acreage, unit=unit, capacity=capacity, beds=beds, deposit=deposit, min_days=min_days, max_days=max_days )
处理房屋的设施信息,过滤掉不合理的设施 id
facility_id_list = house_data.get("facility") # [u'1', u'4'] 是一个列表
if facility_id_list:
# 表示用户勾选了房屋设施
# 过滤用户传送的不合理的设施id
# select * from facility where id in (facility_id_list)
facility_list = Facility.query.filter(Facility.id.in_(facility_id_list)).all() # [u'1', u'4']
为房屋添加设施信息
if facility_list: house.facilities = facility_list
把以上的信息保存道数据库
db.session.add(house)
db.session.commit()
返回房屋的id号,给下个请求为房屋添加图片信息
return jsonify(errno=RET.OK, errmsg="保存成功", data={"house_id": house.id})
保存房屋图片接口
接口文档
url: /houses/image 请求方式: post 接受的参数: house_id image_file 返回的格式: { "image_url" : image_url }
业务逻辑如下:
1. 判断房屋是否存在
2. 上传房屋图片到七牛中
3. 保存图片信息到数据库中
4. 处理房屋基本信息中的主图片
5. 统一提交数据
接受参数
house_id = request.form.get("house_id") image_file = request.files.get("house_image") # 校验参数 if not all([house_id, image_file]): return jsonify(errno=RET.PARAMERR, errmsg="参数不完整")
判断房屋信息是否正确
try: house = House.query.get(house_id) except Exception as e: logging.error(e) return jsonify(errno=RET.DBERR, errmsg="数据库异常") if house is None: return jsonify(errno=RET.NODATA, errmsg="房屋不存在")
上传图片都七牛云
image_data = image_file.read()
file_name = storage(image_data)
保存图片信息到数据库,还没保存,要commit后才生效
house_image = HouseImage( house_id=house_id, url=file_name ) db.session.add(house_image)
处理房屋基本信息中的主图片,没有就设置一个,有就跳过
if not house.index_image_url: house.index_image_url = file_name db.session.add(house)
提交数据,保存到数据库,返回图片的路径
db.session.commit() image_url = constants.QINIU_URL_DOMAIN + file_name return jsonify(errno=RET.OK, errmsg="保存图片成功", data={"image_url": image_url})
获取房东发布的房源信息条目
接口文档
url /users/houses 请求方式 get 返回格式: { errno=RET.OK, errmsg="OK", data={"houses": houses_list} # 包含所有发布房屋的信息 }
业务逻辑如下:
从g变量中获取user.id
根据user.id查询所有的房屋信息
返回给前端所有的列表数据
从g变量中获取user.id
user_id = g.user_id user = User.query.get(user_id) houses = user.houses # 一对多
把查询到的结果转换成字典的格式存到字典中传给前端
houses_list = [] if houses: for house in houses: houses_list.append(house.to_basic_dict()) return jsonify(errno=RET.OK, errmsg="OK", data={"houses": houses_list})
获取主页幻灯片展示的房屋基本信息
接口文档
url houses/index 请求方式 get 请求的参数: 无 返回的格式: { "errno":0, "errmsg":"OK", "data: json_houses, 200, {"Content-Type": "application/json" }
业务逻辑
查询数据库返回订单数目最多的5条
转换成对象转换成json格式放到列表中
返回给前端
查询数据库,返回订单数目最多的5条
houses = House.query.order_by(House.order_count.desc()).limit(constants.HOME_PAGE_MAX_HOUSES) if not houses: return jsonify(errno=RET.NODATA, errmsg="查询无数据")
转成json的格式返回给前端
houses_list = [] for house in houses: # 如果房屋未设置主图片,则跳过 if not house.index_image_url: ontinue houses_list.append(house.to_basic_dict()) # 将数据转换为json,并保存到redis缓存 json_houses = json.dumps(houses_list)
return '{"errno":0, "errmsg":"OK", "data":%s}' % json_houses, 200, {"Content-Type": "application/json"}
获取房屋详情的接口
接口文档
url houses/<int:house_id> 请求方式 get 接受的参数 : house_id 返回格式: { "errno":"0", "errmsg":"OK", "data":{"user_id":%s, "house":%s}}' % (user_id, json_house), 200, {"Content-Type": "application/josn} }
在这个地方牵扯到不是房东本人的话,可以预订房间的操作,需要返回当前用户的user.id如果是没登录的话返回-1
业务逻辑如下:
从session中获取用户的user.id,没有的话设为-1
校验参数houser.id
先从redis中获取,没有的话查询数据库,在设置到redis中
把hourse对象转换成json的格式返回给前端
尝试从session中获取用户的user.id
user_id = session.get("user_id", "-1")
先从redis中获取房屋的信息,如果存在直接返回
if ret: logging.info("hit house info redis") return '{"errno":"0", "errmsg":"OK", "data":{"user_id":%s, "house":%s}}' % (user_id, ret), 200, {"Content-Type": "application/json"}
不存在查询数据库
house = House.query.get(house_id) house_data = house.to_full_dict() json_house = json.dumps(house_data)
把数据库存入到redis中
redis_store.setex("house_info_%s" % house_id, constants.HOUSE_DETAIL_REDIS_EXPIRE_SECOND, json_house)
返回给前端数据
resp = '{"errno":"0", "errmsg":"OK", "data":{"user_id":%s, "house":%s}}' % (user_id, json_house), 200, {"Content-Type": "application/json"} return resp
获取房屋列表信息接口
需要解决的东西,append添加一个==号到一个列表中这是什么意思
接口文档

浙公网安备 33010602011771号