返回顶部

项目简要分析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添加一个==号到一个列表中这是什么意思

接口文档

 

posted @ 2018-05-04 17:52  Crazymagic  阅读(119)  评论(0)    收藏  举报