flask爱家租房项目开发(十四)

本节代码下载:https://download.csdn.net/download/geek_xiong/11620560

订单评论

用户订单完成支付后,会显示“发表评论”按钮,这也是本节要完成的内容。

具体如下图所示:已经评价完成的订单,表示该订单已结束,将无法进行任何操作了(根据项目来说,删除等操作暂时不考虑),并将订单状态改为“已完成”,同时显示评价的内容。

如果还没有评价,则显示评价按钮,订单状态为“待评价”,不显示“评价”

前端代码编写

当用户点击“发表评论”按钮时,页面会弹出一个弹层,输入内容后,点击提交按钮,立即向后端发起请求,根据后端返回的结果做出相应的页面效果。

       
            $(".modal-comment").on("click", function () {
                var orderId = $(this).attr("order-id");
                var comment = $("#comment").val();
                if (!comment) return;
                var data = {
                    order_id: orderId,
                    comment: comment
                };
                // 处理评论
                $.ajax({
                    url: "/api/v1.0/orders/" + orderId + "/comment",
                    type: "PUT",
                    data: JSON.stringify(data),
                    contentType: 'application/json',
                    dataType: "json",
                    headers: {
                        "X-CSRFToken": getCookie("csrf_token")
                    },
                    success: function (resp) {
                        if ("4101" == resp.errno){
                            location.href = "/login.html"
                        }else if("0" == resp.errno){
                            $(".orders-list>li[order-id="+ orderId +"]>div.order-content>div.order-text>ul li:eq(4)>span").html("已完成");
                            $("ul.orders-list>li[order-id="+ orderId +"]>div.order-title>div.order-operate").hide();
                            $("#comment-modal").modal("hide");
                        }
                    }
                });
            });

后端代码编写

后端接收前端发送的请求,如订单编号,评价内容,并根据session中的用户编号以及订单编号、订单状态判断是否可进行评论(防止作假),通过的话,将评价信息保存到数据库中,并更新订单状态为“已完成”,因为redis中可能会存在该房子的信息,由于作出了修改,所以进行删除,下次再浏览该房子时,重新保存到redis中即可

URL:127.0.0.1:5000/api/v1.0/orders/orderId/comment

请求方式:PUT

URL参数:orderId

请求数据:comment

数据格式:json

# PUT 127.0.0.1:5000/api/v1.0/orders/orderId/comment

@api.route("/orders/<int:order_id>/comment", methods=['PUT'])
@login_required
def save_order_comment(order_id):
    """保存评论信息
    参数:订单编号
    """
    # 获取用户 id
    user_id = g.user_id

    # 获取参数
    req_data = request.get_json()
    comment = req_data.get("comment")

    if not comment:
        return jsonify(errno=RET.PARAMERR, errmsg='参数错误')

    # 根据订单编号,检验该订单是自己下的订单,并且处于待评论的状态, 否则不予许评论
    try:
        order = Order.query.filter(Order.id==order_id, Order.user_id==user_id, Order.status=='WAIT_COMMENT').first()
        house = order.house
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='无法获取订单数据')

    if not order:
        return jsonify(errno=RET.REQERR, errmsg='无法操作')

    # 保存评论
    try:
        # 修改订单状态为"已完成"
        order.status = 'COMPLETE'
        # 添加评论内容
        order.comment = comment
        # 房子表中该房子被订单数量加 1
        house.order_count += 1
        # 提交
        db.session.add(order)
        db.session.add(house)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR, errmsg='操作失败')

    # 因为房屋详情中有订单的评价信息,为了让最新的评价信息展示在房屋详情中,所以删除redis中关于本订单房屋的详情缓存
    try:
        redis_store.delete("house_info_%s" % order.house.id)
    except Exception as e:
        current_app.logger.error(e)

    return jsonify(errno=RET.OK, errmsg='OK')

评价测试

启动项目

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秒不可闫M先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值