Flask爱家租房--房屋管理(获取主页幻灯片展示的房屋基本信息)

文章目录

  • 0.效果展示
  • 1.重点总结
  • 2.后端代码
  • 3.前端js
  • 4.前端html

0.效果展示

在这里插入图片描述

1.重点总结

1)当用户访问首页时,开始加载页面信息,此时index.js文件首先调用后端接口check_login(),判断用户是否登录,未登录则在右上角关联注册和登录相关接口;
在这里插入图片描述
在这里插入图片描述
登录则显示用户名相关信息;
在这里插入图片描述
2)接下来,想要获取数据,需要根据index.js文件,调用获取主页幻灯片展示的房屋基本信息的接口get_house_index();
在这里插入图片描述
在这里插入图片描述
并将json格式的数据返回给index.js文件;
在这里插入图片描述3)index.js文件将数据推送给前端类名为swiper-wrapper部分;
在这里插入图片描述在这里插入图片描述
前端得到数据后,想要将数据转换成幻灯片形式进行放映,需要swiper.jquery.min.js文件;
在这里插入图片描述后端index.js文件创建此容器,并对容器相关设置进行规定;容器接受数据,将房屋信息展示出来。
在这里插入图片描述

2.后端代码

house.py部分接口:

@api.route("/houses/index", methods=["GET"])
def get_house_index():"""获取主页幻灯片展示的房屋基本信息"""# 从缓存中尝试获取数据try:ret = redis_store.get("home_page_data")except Exception as e:current_app.logger.error(e)ret = Noneif ret:current_app.logger.info("hit house index info redis")# 因为redis中保存的是json字符串,所以直接进行字符串拼接返回return '{"errno":0, "errmsg":"OK", "data":%s}' % ret, 200, {"Content-Type": "application/json"}else:try:# 查询数据库,返回房屋订单数目最多的5条数据houses = House.query.order_by(House.order_count.desc()).limit(constants.HOME_PAGE_MAX_HOUSES)except Exception as e:current_app.logger.error(e)return jsonify(errno=RET.DBERR, errmsg="查询数据失败")if not houses:return jsonify(errno=RET.NODATA, errmsg="查询无数据")houses_list = []for house in houses:# 如果房屋未设置主图片,则跳过if not house.index_image_url:continuehouses_list.append(house.to_basic_dict())# 将数据转换为json,并保存到redis缓存json_houses = json.dumps(houses_list)  # "[{},{},{}]"try:redis_store.setex("home_page_data", constants.HOME_PAGE_DATA_REDIS_EXPIRES, json_houses)except Exception as e:current_app.logger.error(e)return '{"errno":0, "errmsg":"OK", "data":%s}' % json_houses, 200, {"Content-Type": "application/json"}

3.前端js

index.js

 //模态框居中的控制
function centerModals(){$('.modal').each(function(i){   //遍历每一个模态框var $clone = $(this).clone().css('display', 'block').appendTo('body');    var top = Math.round(($clone.height() - $clone.find('.modal-content').height()) / 2);top = top > 0 ? top : 0;$clone.remove();$(this).find('.modal-content').css("margin-top", top-30);  //修正原先已经有的30个像素});
}function setStartDate() {var startDate = $("#start-date-input").val();if (startDate) {$(".search-btn").attr("start-date", startDate);$("#start-date-btn").html(startDate);$("#end-date").datepicker("destroy");$("#end-date-btn").html("离开日期");$("#end-date-input").val("");$(".search-btn").attr("end-date", "");$("#end-date").datepicker({language: "zh-CN",keyboardNavigation: false,startDate: startDate,format: "yyyy-mm-dd"});$("#end-date").on("changeDate", function() {$("#end-date-input").val($(this).datepicker("getFormattedDate"));});$(".end-date").show();}$("#start-date-modal").modal("hide");
}function setEndDate() {var endDate = $("#end-date-input").val();if (endDate) {$(".search-btn").attr("end-date", endDate);$("#end-date-btn").html(endDate);}$("#end-date-modal").modal("hide");
}function goToSearchPage(th) {var url = "/search.html?";url += ("aid=" + $(th).attr("area-id"));url += "&";var areaName = $(th).attr("area-name");if (undefined == areaName) areaName="";url += ("aname=" + areaName);url += "&";url += ("sd=" + $(th).attr("start-date"));url += "&";url += ("ed=" + $(th).attr("end-date"));location.href = url;
}$(document).ready(function(){// 检查用户的登录状态$.get("/api/v1.0/session", function(resp) {if ("0" == resp.errno) {$(".top-bar>.user-info>.user-name").html(resp.data.name);$(".top-bar>.user-info").show();} else {$(".top-bar>.register-login").show();}}, "json");// 获取幻灯片要展示的房屋基本信息$.get("/api/v1.0/houses/index", function(resp){if ("0" == resp.errno) {$(".swiper-wrapper").html(template("swiper-houses-tmpl", {houses:resp.data}));// 设置幻灯片对象,开启幻灯片滚动var mySwiper = new Swiper ('.swiper-container', {loop: true,autoplay: 2000,autoplayDisableOnInteraction: false,pagination: '.swiper-pagination',paginationClickable: true});}});// 获取城区信息$.get("/api/v1.0/areas", function(resp){if ("0" == resp.errno) {$(".area-list").html(template("area-list-tmpl", {areas:resp.data}));$(".area-list a").click(function(e){$("#area-btn").html($(this).html());$(".search-btn").attr("area-id", $(this).attr("area-id"));$(".search-btn").attr("area-name", $(this).html());$("#area-modal").modal("hide");});}});$('.modal').on('show.bs.modal', centerModals);      //当模态框出现的时候$(window).on('resize', centerModals);               //当窗口大小变化的时候$("#start-date").datepicker({language: "zh-CN",keyboardNavigation: false,startDate: "today",format: "yyyy-mm-dd"});$("#start-date").on("changeDate", function() {var date = $(this).datepicker("getFormattedDate");$("#start-date-input").val(date);});
})

4.前端html

index.html

<!DOCTYPE html>
<html>
<head> <meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><title>爱家</title><link href="/static/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet"><link href="/static/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet"><link href="/static/css/reset.css" rel="stylesheet"><link href="/static/plugins/swiper/css/swiper.min.css" rel="stylesheet"><link href="/static/plugins/bootstrap-datepicker/css/bootstrap-datepicker.min.css" rel="stylesheet"><link href="/static/css/ihome/main.css" rel="stylesheet"><link href="/static/css/ihome/index.css" rel="stylesheet">
</head>
<body><div class="container"><div class="top-bar"><img class="logo fl" src="/static/images/logo@128x59.png"><div class="register-login fr"><a class="btn top-btn btn-theme" href="/register.html">注册</a><a class="btn top-btn btn-theme" href="/login.html">登录</a></div><div class="user-info fr"><span><i class="fa fa-user fa-lg"></i></span> <a class="user-name" href="/my.html"></a></div></div><div class="swiper-container"><div class="swiper-wrapper"></div><script id="swiper-houses-tmpl" type="text/html">{{each houses as house}}<div class="swiper-slide"><a href="/detail.html?id={{house.house_id}}"><img src="{{house.img_url}}"></a><div class="slide-title">{{house.title}}</div></div>{{/each}}</script><div class="swiper-pagination"></div></div><div class="search-bar"><button class="filter-btn" type="button" data-toggle="modal" data-target="#area-modal"><span class="fl" id="area-btn">选择城区</span><span class="fr"><i class="fa fa-map-marker fa-lg fa-fw"></i></span></button><button class="filter-btn" type="button" data-toggle="modal" data-target="#start-date-modal"><span class="fl" id="start-date-btn">入住日期</span><span class="fr"><i class="fa fa-calendar fa-lg fa-fw"></i></span></button><button class="filter-btn end-date" type="button" data-toggle="modal" data-target="#end-date-modal"><span class="fl" id="end-date-btn">离开日期</span><span class="fr"><i class="fa fa-calendar fa-lg fa-fw"></i></span></button><a class="btn search-btn btn-theme" href="#" onclick="goToSearchPage(this);" area-id="" start-date="" end-date="">搜索</a><div class="modal fade" id="area-modal" tabindex="-1" role="dialog" aria-labelledby="area-label"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="area-label">选择城区</h4></div><div class="modal-body"><div class="area-list"></div><script id="area-list-tmpl" type="text/html">{{each areas as area}}<a href="#" area-id="{{area.aid}}">{{area.aname}}</a>{{/each}}</script></div></div></div></div><div class="modal fade" id="start-date-modal" tabindex="-1" role="dialog" aria-labelledby="start-date-label"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="start-date-label">入住日期</h4></div><div class="modal-body"><div class="date-select" id="start-date"></div><input type="hidden" id="start-date-input"></div><div class="modal-footer"><button type="button" class="btn btn-theme" onclick="setStartDate();">确定</button></div></div></div></div><div class="modal fade" id="end-date-modal" tabindex="-1" role="dialog" aria-labelledby="end-date-label"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="end-date-label">离开日期</h4></div><div class="modal-body"><div class="date-select" id="end-date"></div><input type="hidden" id="end-date-input"></div><div class="modal-footer"><button type="button" class="btn btn-theme" onclick="setEndDate();">确定</button></div></div></div></div></div><div class="footer"><p><span><i class="fa fa-copyright"></i></span>爱家租房&nbsp;&nbsp;享受家的温馨</p></div></div><script src="/static/js/jquery.min.js"></script><script src="/static/plugins/bootstrap/js/bootstrap.min.js"></script><script src="/static/plugins/swiper/js/swiper.jquery.min.js"></script><script src="/static/plugins/bootstrap-datepicker/js/bootstrap-datepicker.min.js"></script><script src="/static/plugins/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js"></script><script src="/static/js/template.js"></script><script src="/static/js/ihome/index.js"></script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flask爱家租房--订单支付(支付过程)

文章目录0.支付流程1. 重点总结2.后端代码3.前端js4.前端html0.支付流程 1. 重点总结 1&#xff09;用户进入“我的订单”页面&#xff0c;点击“去支付”&#xff1b; 触发后端js中的函数&#xff0c;发出ajsx异步请求&#xff0c;调用后端相应接口order_pay(order_id)&#…

实验五 类和对象-3

1.ex3.cpp 1 #include <iostream>2 #include <vector>3 #include <string>4 using namespace std;5 6 // 函数声明 7 void output1(vector<string> &); 8 void output2(vector<string> &); 9 10 int main() 11 { 12 vector<st…

linux 共享移动硬盘,随时登陆上QQ 自带Linux移动硬盘实战

在以往我们的观念中&#xff0c;移动硬盘顶多就是个移动存储设备&#xff0c;根本谈不上有什么功能&#xff0c;但今天这款一盘通却将我们原始的观念打了一个180大转弯&#xff01;如果你的电脑支持USB设备启动&#xff0c;那么只需要在BIOS进行一下更改&#xff0c;一盘通就可…

需求分析的图形工具(层次方框 warnier IPO)

1 层次方框图 层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。 例如&#xff0c;描绘一家计算机公司全部产品的数据结构可以用下图层次方框图表示。 这家公司的产品由硬件、软件和服务3类产品组成&#xff0c;软件产品又分为系统软件和应用软件&#xf…

如何处理错误信息 Pricing procedure could not be determined

2019独角兽企业重金招聘Python工程师标准>>> 当给一个SAP CRM Quotation文档的行项目维护一个产品时&#xff0c;遇到如下错误信息&#xff1a;Pricing procedure could not be determined 通过调试得知错误消息在function module CRM_PRIDOC_COM_PRCPROC_DET_SEL第…

Flask爱家租房--订单(下订单)

文章目录0 、效果展示1、思路总结2、后端代码3、前端js4、前端html0 、效果展示 detail.html booking.html 1、思路总结 1&#xff09;用户打开房屋详情页detail.html之后&#xff0c;后端detail.js会判断此访问用户是否为房东&#xff0c;若不是房东&#xff0c;则在详情…

红帽linux lnmp搭建,Linux(redhat5.4)下lnmp环境的搭建

在前面我们已经实现了lamp架构的创建&#xff0c;今天就让我们来看一看lnmp架构是如何实现的。计划的实验步骤如下&#xff1a;1. 数据库mysql的安装2. Nginx的安装&#xff0c;libevent(编译库代码)的安装&#xff0c;pcre的安装3. Php的安装4. 测试1. Mysql 的安装//注意:小编…

Flsak爱家租房--订单(获取用户订单、用户评论)

文章目录0.页面效果1.思路总结2.后端代码3.前端js4.前端html0.页面效果 1.思路总结 1&#xff09;用户点击“我的订单”&#xff0c;js向后端获取数据&#xff0c;并加载在前端的模板中&#xff1b; 2&#xff09;用户点击相应订单的“去支付”按钮&#xff0c;js向引导用户…

软件工程形式化技术简介

形式化技术在软件工程中有效的提高了开发的效率、改进了软件开发的质量、减少了开发费用。形式化的技术容易在软件的规约上取得一致性&#xff0c;它属于一种非常有效的交流方式。 (一)非形式化的缺点 用自然语言书写的系统规格说明书&#xff0c;可能存在矛盾、二义性、含糊性…

Flask爱家租房--订单(房东接单、拒单)

文章目录0.效果展示1.效果展示2.后端接口3.前端js4.前端html0.效果展示 1.效果展示 1&#xff09;当房东点击“客户订单”&#xff0c;js向后端接口get_user_orders()获取数据&#xff0c;订单页面开始加载&#xff1b; 2&#xff09;当房东确定接单时&#xff0c;js会向后端…

开发经验和屁股的关系

昨晚为CSDN俱乐部的同学们做了一个讲座《微博开发、云平台及一个微博应用开发的简单方案》。已经用屏幕录相机记录下来了&#xff0c;不想讲完一边和同学聊着&#xff0c;一边收拾&#xff0c;直接关机&#xff0c;教室中带有保护卡的电脑自然不给面子&#xff0c;录相文件就此…

Flask爱家租房--房屋管理(获取房屋详情)

文章目录0.效果展示1.思路总结2.后端接口3.前端js4.前端html0.效果展示 1.思路总结 1&#xff09;房屋详情页面开始加载时&#xff0c;detail.js首先通过定义的函数&#xff08;重点&#xff1a;document.location.search&#xff09;&#xff0c;截取需要向后端取得详情页面的…

MAC 安装 pygraphviz 找不到头文件

networkx的有向图只能通过箭头来区别两点之间的两条边&#xff0c;但是我在复现snake论文的时候&#xff0c;需要绘制两个交叉口之间的两条不同方向的路段&#xff0c;最后选择了pygraphviz 直接通过anaconda打开对应终端&#xff0c;pip install pygraphviz&#xff0c;一直报…

如此如此,怎能师夷长技以制夷!

以一个爱国的软件设计者的角度来看这样一个weibo,大概的内容就是&#xff1a;北京南站的4SQ上有个老外留言吐槽&#xff1a;“没有中国身份证根本就没法在自动售票机上买票&#xff0c;那他妈的他们弄个英文界面干屁啊&#xff01;” 出于行业的敏感性&#xff0c;我感到很有意…

Flask爱家租房--房屋管理(搜索房屋列表)

文章目录0.效果展示1.后端接口2.前端js3.前端html0.效果展示 1.后端接口 house.py部分接口&#xff1a; # GET /api/v1.0/houses?sd2017-12-01&ed2017-12-31&aid10&sknew&p1 api.route("/houses") def get_house_list():"""获取房…

编程语言API性能大比拼

Ciaran是Skimlinks项目团队中的一名领导者&#xff0c;热爱开发&#xff0c;在业余时间喜欢研究一门新语言。作者和他的团队在开发Skimlinks项目时遇到了一些困难&#xff0c;于是做了这份测试&#xff0c;文中将Node.js、Scala、Go、Python、PHP进行对比&#xff0c;最终Pytho…

Python面试题总结(8)--操作类

1. 请写一个 Python 逻辑&#xff0c;计算一个文件中的大写字母数量 答&#xff1a;读取‘A.txt’中的大写字母数量 with open(A.txt) as f:"""计算一个文件中的大写字母数量"""count 0for i in f.read():if i.isupper():count 1 print(cou…