Python Web 大作业
Flask 二手房项目作业说明
准备
- 课程资料中下载python大作业压缩包。
- 将
house.sql导入本地 MySQL(库名house),注意配置好你自己的电脑数据库与密码。 - 项目根目录已提供
app.py、settings.py、models.py、utils/,已经写好的内容无需修改。
备注
utils/pearson_recommend.py与utils/regression_data.py已给完整代码,直接from utils.xxx import xxx调用即可。- 所有视图文件请保留函数签名、注释和返回值结构,仅补全函数体内
# TODO处的代码。
作业一:首页(验证: 访问 /)
📌 功能需求
网站首页展示平台上现在有多少套房、最新挂牌的 6 套、当前浏览量最高的 4 套。
在搜索框打字时,希望系统能根据我当前选的搜索类型(地区 / 户型)实时联想匹配项,比如选了”户型搜索”输个”2室”,下面就弹出”2室1厅 N 套””2室2厅 N 套”。
首页要做到:快、全、准。”
要求:在根目录新建 index_page.py,并补全两个视图函数体。
在
app.py中以url_prefix='/'注册index_page蓝图(app.py已写好 import)。在
index_page.py中实现:GET /:查询并传递”总房源数 + 最新房源 TOP6 + 热点房源 TOP4”给index.html。POST /search/keyword/:接收kw与info('地区搜索'或'户型搜索'),按所选字段聚合查询前 9 条,返回 JSON{code:1, info:[{t_name, num}, ...]}。
需要补全的位置(文件中已用
# TODO 题目一标记):- 第 1 处:
index()函数体内 3 行查询(总房源数、最新 TOP6、最热 TOP4)。 - 第 2 处:
search_kw()函数体内聚合查询与 JSON 返回。 - 第 3 处:
index.html中 AJAX 联想的 success 回调函数体(约 15 行 jQuery DOM 操作)。
- 第 1 处:
验证:启动服务,浏览器访问
http://127.0.0.1:5000/。首页能看到”最新房源””热点房源”卡片即为正确;在搜索框输入文字时下拉出现联想项即为正确。提交:
index_page.py全代码截图 +index.html截图(AJAX 回调部分)+ 首页运行截图及搜索功能运行图。
作业二:列表页(验证:直接访问 /list/pattern/1)
📌 功能需求
“点击首页的’更多地区房源’或’更多热点房源’会进到完整列表页,每页只显示 10 套,有分页功能。
另外在首页搜索框点了某条联想项,回车查询后也要跳到一个搜索结果页,把搜的地区/户型下所有符合的房源列出来。
还有两个细节——标题超过 15 个字的要用...截断(列表页面看着不拥挤),**朝向如果是空的不要显示空白,写’暂无信息’**(用户不会以为是 bug)。”
要求:在根目录新建 list_page.py,并补全三个视图函数与两个自定义过滤器。
在
app.py中注册list_page蓝图。在
list_page.py中实现:GET /query:接收addr或rooms参数,渲染search_list.html。GET /list/pattern/<int:page>:按发布时间倒序分页(per_page=10),渲染list.html。GET /list/hot_house/<int:page>:按浏览量倒序分页,渲染list.html。
注册两个自定义模板过滤器:
dealover:标题超过 15 字符末尾替换为...。dealdirection:朝向为空时显示”暂无信息”。
需要补全的位置(文件中已用
# TODO 题目二标记):- 第 1 处:
search_txt_info()函数体(按 addr/rooms 过滤查询)。 - 第 2 处:
return_new_list()函数体(paginate分页调用)。 - 第 3 处:
return_hot_list()函数体(paginate分页调用)。 - 第 4 处:
deal_title_over()与deal_direction()两个过滤器函数体。 - 第 5 处:两个
add_app_template_filter注册调用。 - 第 6 处:
list.html中createPage分页器初始化 JS(约 15 行 jQuery)。
- 第 1 处:
验证:
- 浏览器访问
http://127.0.0.1:5000/list/pattern/1,能看到房源列表与分页器。 - 访问
http://127.0.0.1:5000/list/hot_house/1,标题超过 15 字符自动加...。 - 访问
http://127.0.0.1:5000/query?addr=xxx(替换为数据库中的小区名),能看到搜索结果。
- 浏览器访问
提交:
list_page.py全代码截图 +list.html截图(分页器部分)+search_list.html截图。
作业三:详情页(验证:直接访问 /house/1)
📌 功能需求
在列表上点了某个房子,跳到详情页。这个页面要完整告诉我这套房的情况——基本信息(户型、朝向、面积、楼层、交通、房东电话等)+ 配套设施(哪些有、哪些没有)。配套设施用图标 + 文字展示,有的高亮,没的用删除线,一眼看出。
下面再推荐几套类似或同小区的房子——如果我已经登录,平台应该根据之前的浏览历史给用户推荐;如果没登录或者推荐不出来,就直接给用户同小区浏览量最高的 6 套当备选。
右侧有几个图表看这个小区的情况(户型占比、价格走势等),这部分需要写好 JS,Python调用接口看效果”
要求:在根目录新建 detail_page.py,并补全主视图函数体;模板中挖空配套设施图标与推荐循环。
在
app.py中注册detail_page蓝图。在
detail_page.py中实现:GET /house/<int:hid>:
① 查询当前房源详情
② 调用utils.pearson_recommend.recommend(user_id, hid)获取推荐(已给完整函数,直接 import)
③ 推荐为空或用户未登录时,降级查询同小区按page_views倒序前 6
④ 渲染detail_page.html,传递house、facilities、recommend_li
在
templates/detail_page.html中补全:- 9 个配套设施图标的
{% if '设施名' in facilities %}模板判断(洗衣机、电视、空调、暖气、热水器、天然气、床、宽带、电梯;”冰箱”已给出示例)。 - 推荐房源
{% for house in recommend_li %}循环(约 15 行 Jinja)。 - 4 个 ECharts 图标 AJAX 调用(约 25 行 jQuery)。
- 9 个配套设施图标的
需要补全的位置(文件中已用
# TODO 题目三标记):- 第 1 处:
detail_page.py的detail()函数体内推荐/降级逻辑(约 10 行)。 - 第 2 处:
detail_page.html的 9 个设施图标{% if %}模板判断(每个 5 行,已用 `` Jinja 注释标出位置)。 - 第 3 处:
detail_page.html推荐房源{% for %}循环(约 15 行)。 - 第 4 处:
detail_page.html的 4 个 ECharts AJAX 调用(约 25 行 jQuery,分别调用/get/piedata、/get/columndata、/get/scatterdata、/get/brokenlinedata,后端接口已在detail_page.py写好)。。
- 第 1 处:
验证:
- 浏览器访问
http://127.0.0.1:5000/house/1(前提:数据库house_info表中存在id=1的房源;如不存在可换成其他 id)。 - 页面正确显示房源标题、价格、朝向等基本信息。
- 配套设施图标:有该设施时为黄色高亮,无该设施时为删除线灰色。
- 推荐房源区域显示同小区 6 条记录(用户未登录或无推荐时走降级逻辑)。
- 右侧 4 个 ECharts 图表正常加载(饼图、柱状图、折线图、回归预测图)。
- 浏览器访问
提交:
detail_page.py全代码截图 +detail_page.html截图。
