flask网站项目(3)--房屋模块

本文详细介绍了使用Flask框架实现房屋模块的过程,包括缓存与城区信息处理、房源发布页面、我的房源页面、主页房源展示、房屋详情页面和房屋查询列表页面的实现。重点讨论了缓存策略、房源发布时的事务处理、前端交互和数据验证等关键点。
摘要由CSDN通过智能技术生成

房屋模块包含两部分,房屋的发布与房屋的显示,其中房屋的发布位于个人房源发布页面,房屋的显示在首页、列表页、详情页、个人房源页都有涉及,根据其需求信息的不同。

1、缓存与城区信息

城区是房屋的一个大分类,在多个页面都有需求(主页、列表页、详情页、房源发布页),且变化可能性很小,在前述的数据库设计中将其单独提出一个表结构,根据其需求高、变化小的特性,可以将对于城区的请求设计为缓存。
在flask中,有提供缓存扩展(一般使用redis或memcached,关于这两者的简介参前文),但如果想要更灵活的处理,可以自己来实现缓存。
本项目中使用redis实现缓存,自定义了key和保存形式(以json字符串的形式保存内容),没有使用flask和werkzeug的扩展。
代码如下:

@api.route('/areas')
def get_area_info():
    '''获取城区信息'''

    # 尝试从redis中获取缓存
    try:
        resp_json = redis_store.get('area_info').decode()
    except Exception as e:
        current_app.logger.error(e)
    else:
        if resp_json:
            print('hit redis area info')
            return resp_json, 200, {"Content-Type": "application/json"}

    # 查询数据库,读取城区信息
    try:
        area_li = Area.query.all()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据库异常")

    # 组织数据
    area_dict_li = list()
    for area in area_li:
        area_dict_li.append(area.to_dict())

    # 将数据保存到redis中,作为缓存使用,将响应结果直接转换为json字符串
    resp_dict = dict(errno=RET.OK, errmsg="获取成功", data=area_dict_li)
    resp_json = json.dumps(resp_dict)
    try:
        redis_store.setex('area_info', constants.AREA_INFO_REDIS_EXPIRE, resp_json)
    except Exception as e:
        current_app.logger.error(e)
    
    return resp_json, 200, {"Content-Type": "application/json"}

注:①缓存必须设置时效,flask项目无法得知MySQL是否有变化,因此无法设置MySQL变动时自动删除缓存,设置一个有效时间,可以避免更新后的信息无法显示的问题(短时间的延迟是允许的);
②对于缓存保存格式的设定需要注意,r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值