爱家(租房系统)---- 发布房源信息
2018-10-24 本文已影响27人
GHope
关于用户的相关业务逻辑已经基本完成,接下来是关于房屋的业务逻辑。所以此时就需要在项目中的app文件中创建house_views.py文件来管理房屋相关逻辑。关于蓝图的绑定此时在manager.py(启动文件)中进行一个简单的引入及绑定即可。
对用户是否实名的检测
前端提起的用户实名证判断请求:
//获取用户信息,判断是否进行过实名认证
$.get('/house/my_auth/',function (data) {
if(data.code== '200'){
//已经完成实名认证
$('#houses-list').show();
var html=template('house_list',{hlist:data.hlist});
$('#houses-list').append(html);
}else{
//未实名认证
$('#auth-warn').show();
}
});
后台接收请求做出判断并返回相应数据:
house_blueprint = Blueprint('house', __name__)
@house_blueprint.route('/my_house/', methods=['GET', 'POST'])
def my_house():
if request.method == 'GET':
return render_template('myhouse.html')
@house_blueprint.route('/my_auth/')
def my_auth():
"""
验证当前用户是否完成实名认证
"""
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='200', hlist=house_list2)
else:
# 没有完成实名认证
return jsonify(status_code.MYHOUSE_USER_IS_NOT_AUTH)
获取数据库中房屋信息的设施及地区信息
对后台发起房屋设施和所处地区的信息请求,同时置空页面中关于房屋设施和地区的信息,遍历后台返回的数据,一一填制到对应模块中即完成了该项功能。
//查询地区、设施信息
$.get('/house/area_facility/',function (data) {
//地区
var area_html = ''
for(var i=0; i<data.area.length; i++){
area_html += '<option value="' + data.area[i].id + '">' + data.area[i].name + '</option>'
}
$('#area-id').html(area_html);
//设施
var facility_html_list = ''
for(var i=0; i<data.facility.length; i++){
var facility_html = '<li><div class="checkbox"><label><input type="checkbox" name="facility"'
facility_html += ' value="' + data.facility[i].id + '">' + data.facility[i].name
facility_html += '</label></div></li>'
facility_html_list += facility_html
}
$('.house-facility-list').html(facility_html_list);
});
接收前端提出的请求,查询数据库中关于房屋设施及所处地区的数据,生成列表后返回给前端。
@house_blueprint.route('/area_facility/')
def area_facility():
# 查询地址
area_list = Area.query.all()
area_dict_list = [area.to_dict() for area in area_list]
# 查询设施
facility_list = Facility.query.all()
facility_dict_list = [facility.to_dict() for facility in facility_list]
# 构造结果并返回
return jsonify(area=area_dict_list, facility=facility_dict_list)
创建用户房屋信息
提交创建用户房屋信息的请求,同时隐藏当前模块,展示之前隐藏的房屋上传信息模块。
//为房屋表单绑定提交事件
$('#form-house-info').submit(function () {
$('.error-msg text-center').hide();
$.post('/house/new_house/',$(this).serialize(),function (data) {
if(data.code== '200'){
$('#form-house-info').hide();
$('#form-house-image').show();
$('#house-id').val(data.house_id);
}else{
$('.error-msg text-center').show().find('span').html(ret_map[data.code]);
}
});
return false;
});
根据前端发出的请求,创建用户房屋信息。首先实例一个房屋对象,对其属性进行一一赋值,关于设施信息需要遍历前端返回的列表,多个设施信息一一加入。
@house_blueprint.route('/new_house/', methods=['GET', 'POST'])
def new_house():
if request.method == 'GET':
return render_template('newhouse.html')
if request.method == 'POST':
# 接收用户信息
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.in_(facility_ids)).all()
house.facilities = facility_list
house.add_update()
# 返回结果
return jsonify(code='200', house_id=house.id)
用户上传房屋图片
发起房屋图片信息的请求
//为图片表单绑定事件
$('#form-house-image').submit(function (e) {
e.preventDefault();
$(this).ajaxSubmit({
url: "/house/image_house/",
type: "post",
dataType: "json",
success: function (data) {
if (data.code == '200') {
$('.house-image-cons').append('<img src="'+data.url+'"/>');
}
}
});
return false;
});
后台收到请求,获取前端页面中的信息,通过判断用户房屋图片信息存在来保存首图信息,在之后的首页,及搜索页面中使用。若已存在图片信息,则不再设置首图,只做简单的保存页面即可。
@house_blueprint.route('/image_house/', methods=['POST'])
def image_house():
if request.method == 'POST':
# 接收房屋编号
house_id = request.form.get('house_id')
# 接收图片信息
f1 = request.files.get('house_image')
# 保存到图片
con = Config()
url = os.path.join(os.path.join(con.UPLOAD_FOLDER, 'house'), f1.filename)
f1.save(url)
# 保存图片对象
image = HouseImage()
image.house_id = house_id
image.url = os.path.join('/static/upload/house', f1.filename)
image.add_update()
# 房屋的默认图片
house = House.query.get(house_id)
if not house.index_image_url:
house.index_image_url = os.path.join('/static/upload/house', f1.filename)
house.add_update()
# 返回图片信息
return jsonify(code='200', url=os.path.join('/static/upload/house', f1.filename))