#coding=utf-8
from flask import Blueprint, jsonify
from flask import request
from flask import sessionfrom qiniu_sdk import put_qiniu
from status_code import REThouse_blueprint=Blueprint('house',__name__)from flask import current_app
from flask import jsonfrom models import Area, Facility, HouseImage, House, User, Order#獲取地區信息,并進行緩存
def get_areas():area_dict_list=current_app.redis.get('area_list')if not area_dict_list:area_list=Area.query.all()arear_dict_list=[area.to_dict() for area in area_list]current_app.redis.set('area_list',json.dumps(area_dict_list))else:#存儲到redis后會被轉換成字符串,所以取出來后需要轉換area_dict_list=json.loads(area_dict_list)return area_dict_list#獲取設施信息并緩存
def get_facilities():facility_dict_list=current_app.redis.get('facility_list')if not facility_dict_list:facility_list=Facility.query.all()facility_dict_list=[facility.to_dict() for facility in facility_list]current_app.redis.set('facility_list',json.dumps(facility_dict_list))else:facility_dict_list=json.loads(facility_dict_list)return facility_dict_list@house_blueprint.route('/area_facility',methods=['GET'])
def newhouse():#查詢地址kkkkarea_dict_list=get_areas()#查詢設施facility_dict_list=get_facilities()#構造結果并返回return jsonify(area=area_dict_list,faciclity=facility_dict_list)#保存房屋圖片
@house_blueprint.route('/newhouse_image')
def newhouse_image():#接受房屋編號house_id=request.form.get('house_id')#接受圖片信息f1=request.files.get('house_image')#保存到七牛云上url=put_qiniu(f1)#保存圖片對象image=HouseImage()image.house_id=house_idimage.url=urlimage.add_update()#房屋的默認圖片house=House.query.get(house_id)if not house.index_image_url:house.index_image_url=urlhouse.add_update()#返回圖片信息return jsonify(code=RET.OK,url=current_app.config.get("QINIU_URL")+url)#保存信息
@house_blueprint.route('/',methods=['POST'])
def newhouse_save():#接收數據params=request.form.to_dict()facility_ids=request.form.getlist('facility')#創建對象并保存house = House()house.user_id = session['user_id']house.area_id = params.get('area_id')house.title = params.get('title')house.price = params.get('price')house.address = params.get('address')house.room_count = params.get('room_count')house.acreage = params.get('acreage')house.beds = params.get('beds')house.unit = params.get('unit')house.capacity = params.get('capacity')house.deposit = params.get('deposit')house.min_days = params.get('min_days')house.max_days = params.get('max_days')#根據設施的編號查詢設施對象if facility_ids:facility_list=Facility.query.filter(Facility.id.iin_(facility_ids)).all()house.facilities=facility_listhouse.add_update()#返回結果return jsonify(code=RET.OK,house_id=house.id)#我的房屋
@house_blueprint.route('/',methods=['GET'])
def myhouse():user_id=session['user_id']user=User.query.get(user_id)if user.id_name:#已經完成實名認證,查詢當前用戶的房屋信息house_list=House.query.filter(House.user_id==user_id).order_by(House.id.desc())house_list2=[]for house in house_list:house_list2.append(house.to_dict())return jsonify(code=RET.OK,hlist=house_list2)else:#沒有完成實名認證return jsonify(code=RET.USERERR)#查詢房屋與設施,如果是自己的則查詢不出來,目的就是不讓自己預定自己的房子
@house_blueprint.route('/<init:id>',methods=['GET'])
def house_detail(id):#查詢房屋信息house=House.query.get(id)#查詢設施信息facility_list=get_facilities()#判斷當前房屋是不是自己booking=1if 'user_id' in session:if house.user_id==session['user_id']:booking=0return jsonify(house=house.to_full_dict(),facility_list=facility_list,booking=booking)#搜索房屋
@house_blueprint.route('/search',methods=['GET'])
def search():#接收參數dict=request.argsarea_id=int(dict.get('aid'))begin_date=dict.get('sd')end_date=dict.get('ed')sort_key=dict.get('sk')#滿足地區條件hlist=House.query.filter(House.area_id==area_id)#不能查詢自己發布的房源,排除當前用戶發布的房屋if 'user_id' in session:hlist=hlist.filter(House.user_id!=(session['user_id']))#滿足事件條件,當訂單完成后再完成時間限制order_list=Order.query.filter(Order.status!='REJECTED')#情況一:# order_list1=Order.query.filter(Order.begin_date>=begin_date,Order.end_date<=end_date)#情況二order_list2=Order.query.filter(Order.begin_date<begin_date,Order.end_date>end_date)#情況三order_list3=Order.query.filter(Order.end_date>=begin_date,Order.end_date<=end_date)#情況四:order_list4=Order.query.filter(Order.begin_date>=begin_date,Order.begin_date<=end_date)#獲取訂單中的房屋編號house_ids=[order.house_id for order in order_list2]for order in order_list3:house_ids.append(order.house_id)for order in order_list4:if order.house_id not in house_ids:house_ids.append(order.house_id)hlist=hlist.filter(House.id.notin_(house_ids))#排序規則,默認根據最新排列sort=House.id.desc()if sort_key=='booking':sort=House.order_count.desc()elif sort_key=='price-inc':sort=House.price.asc()elif sort_key=='price-des':sort=House.price.desc()hlist=hlist.order_by(sort)hlist2=[]for house in hlist:hlist2.append(house.to_dict())#獲取地區信息if request.args.get('area','0')=='1':alist=get_areas()else:alist=[]return jsonify(hlist=hlist2,alist=alist)
訂單
新建booking_views.py
# coding=utf-8
from flask import Blueprint,jsonify,request,session
order_blueprint=Blueprint('order',__name__)
from datetime import datetime
from models import House,Order
from status_code import RET,ret_map
from my_decorators import is_login
import logging#查詢指定編號的房屋信息
@order_blueprint.route('/house/<int:id>')
def booking_house(id):house=House.query.get(id)return jsonify(house=house.to_dict())#創建訂單
@is_login
@order_blueprint.route('/',methods=['POST'])
def booking():#接收參數dict=request.formhouse_id=int(dict.get('house_id'))start_date=datetime.strptime(dict.get('start_date'),'%Y-%m-%d')end_date=datetime.strptime(dict.get('end_date'),'%Y-%m-%d')#驗證有效性if not all([house_id,start_date,end_date]):return jsonify(code=RET.PARAMERR,msg=ret_map[RET.PARAMERR])if start_date>end_date:return jsonify(code=RET.PARAMERR,msg=ret_map[RET.PARAMERR])#查詢房屋對象try:house=House.query.get(house_id)except:logging.error(u'下訂單-查詢房屋出錯,房屋編號%d'%house_id)return jsonify(code=RET.DBERR,msg=ret_map[RET.DBERR])#創建訂單對象order=Order()order.user_id=session['user_id']order.house_id=house_idorder.begin_date=start_dateorder.end_date=end_dateorder.days=(end_date-start_date).days+1order.house_price=house.priceorder.amount=order.days*order.house_pricetry:order.add_update()except:logging.error(u'下訂單-出錯')return jsonify(code=RET.DBERR,msg=ret_map[RET.DBERR])#返回信息return jsonify(code=RET.OK)#作為租客查詢訂單
@is_login#
@order_blueprint.route('/',methods=['GET'])
def orders():uid=session['user_id']order_list=Order.query.filter(Order.user_id==uid).order_by(Order.id.desc())order_list2=[order.to_dict() for order in order_list]return jsonify(olist=order_list2)#作為房東查詢訂單
@is_login
@order_blueprint.route('/fd',methods=['GET'])
def lorders():uid=session['user_id']#查詢當前用戶的所有房屋編號hlist=House.query.filter(House.user_id==uid)hid_list=[house.id for house in hlist]#根據房屋編號查找訂單order_list=Order.query.filter(Order.house_id.in_(hid_list)).order_by(Order.id.desc())#構造結果olist=[order.to_dict() for order in order_list]return jsonify(olist=olist)#修改狀態
@order_blueprint.route('/<int:id>',methods=['PUT'])
def status(id):#接收參數:狀態status=request.form.get('status')#查找訂單對象order=Order.query.get(id)#修改order.status=status#保存order.add_update()return jsonify(code=RET.OK)