web服务器

爱家(租房系统)---- 发布房源信息

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))
上一篇下一篇

猜你喜欢

热点阅读