第6章 智能租房——前期准备

news2025/3/15 10:57:26

学习目标

  • 了解智能租房项目,能够说出项目中各模块包含的功能

  • 熟悉智能租房项目的开发模式与运行机制,能够复述项目的开发模式与运行机制

  • 掌握智能租房项目的创建,能够独立创建智能租房项目

  • 掌握智能租房项目的配置,能够为智能租房项目配置前端静态文件、模板文件以及使用配置信息

  • 了解数据表的结构,能够复述各数据表所包含的字段

  • 熟悉数据的导入方式,能够通过Navicat工具运行SQL文件的方式导入数据

  • 掌握模型的创建方式,能够根据数据表的结构创建对应的模型

通过学习前面的内容,我们已经对Flask框架的主要功能有所了解。自本章起,将带领大家递进式地开发一个完整的Flask项目,以构建一个智能分析租房平台——智能租房。考虑到智能租房包含的模块较多,且功能稍复杂,本章仅对智能租房项目的所有模块进行简单介绍,快速搭建项目雏形,关于项目中各个模块的具体实现会在后续章节中分别讲解。

6.1 项目介绍

智能租房项目按照业务需求大体归纳为4个模块,分别是首页模块、列表页模块、详情页模块和用户中心模块,每个模块均包含既定的功能。结合页面展示的效果依次对首页、列表页、详情页和用户中心这4个模块进行分析,以明确各模块包含哪些功能。

1.首页模块

首页是网站的入口页面,该页面一般负责呈现网站的简要信息以及其他页面的入口,让互联网用户一眼便能够清楚地了解网站的用途,并引导用户浏览其他页面的内容。

在智能租房首页页面主要有4个部分,分别是智能提示搜索框、房源总数、最新房源信息和热门房源信息,关于这4部分的介绍如下。

智能提示搜索框位于首页上方,属于网页的标配功能,它会根据用户输入的内容实时地显示相关房源信息的提示列表,以提升用户的搜索体验。 智能提示搜索框可以通过地区和户型这两种搜索条件查找房源信息,默认按地区搜索。例如,在智能提示搜索框中输入“二”,此时搜索框的提示列表如图所示。

房源总数位于智能提示搜索框的下方,用于展示北京市在售房源的总数量。

最新房源信息位于房源总数的下方,默认会根据房源的更新时间对房源信息进行排序,并呈现排在前6名的房源信息。

热门房源信息位于最新房源信息的下方,默认会根据用户的浏览量对房源信息进行排序,并呈现排在前4名的房源信息。 综合上述对首页模块的分析可知,首页模块包含以下功能。 房源总数展示。 最新房源数据展示。 热点房源数据展示。 智能搜索。

2.列表页模块

列表页会以分页的形式呈现所有房源的简略信息,用户在首页可通过如下3种方式进入列表页。 (1)从智能提示搜索框下方的提示列表中选择某个选项,单击“提交”按钮后进入列表页,此时该页面会呈现该选项包含的所有房源信息。 (2)单击最新房源模块右上角的链接文本“更多北京房源”进入列表页,此时该页面会按照时间先后顺序呈现房源信息列表(至多100套)。 (3)单击最热房源模块右上角的链接文本“更多北京房源”进入列表页,此时该页面会按照用户浏览量呈现房源信息列表(至多100套)。

滑动至智能租房的列表页页面的底部,可以看到页码指示器。由页面指示器可知,当前页面是第一页,该页面中一共呈现了10套房源信息,每套房源信息包括房源标题、房源价格、房源地址、建筑面积、房源户型、房源朝向、交通条件和浏览量。 综合上述对列表页模块的分析可知,列表页模块包含以下功能。 搜索房源列表页展示。 最新房源列表页展示。 热点房源列表页展示。

3.详情页模块

用户在首页单击任意一套房源图片,或者在列表页中单击任意一套房源的标题、图片、右箭头,可以进入详情页查看房源的详细信息。例如,单击智能租房的列表页中第1套房源信息右方的箭头,进入“顺义-顺义城-怡馨家园 2室1厅”的详情页。

在“顺义-顺义城-怡馨家园 2室1厅”的详情页所示的详情页中,左半部分呈现了房源的相关信息,包括图片、基本信息、房源配套设施、推荐房源,右半部分呈现了4种类型的图表,包括散点图、饼图、柱形图和折线图,通过这4个图表直观地描述了当前房源所在区房源的价格走势、户型占比、小区房源数量TOP20、户型价格走势。 综合上述对详情页模块的分析可知,详情页模块包含以下功能。 房源数据展示。 户型占比可视化。 小区房源数量TOP20可视化。 户型价格走势可视化。 预测房价走势可视化。 智能推荐。

4.用户中心模块

用户在详情页的右上角单击“登录”按钮,会弹出登录窗口。若用户还没有账号,则单击登录窗口的链接文本“点我注册”即可弹出注册窗口。

填写完注册信息后,用户单击登录窗口中的“提交”按钮会跳转到用户中心页。

由智能租房的用户中心页可知,用户可以通过单击“编辑”按钮修改账号信息,另外还可以通过单击“房源收藏”标签选项查看自己收藏和浏览过的房源信息。 用户中心模块包含以下功能。 用户注册。 用户中心页展示。 用户登录与退出。 账号信息修改。 房源收藏和取消收藏。 用户浏览记录管理。

综上所述,我们已经对智能租房项目中各模块包含的功能有了全面的了解。不过,智能推荐功能依赖用户的浏览行为,需要结合当前用户的浏览记录推荐房源。因此,这里将智能推荐功能挪到用户中心模块中。

6.2 项目开发模式运行机制

智能租房是一个涉及前端开发和后端开发的项目,在开发项目之前,我们需要明确项目的开发模式以及运行机制,以提前了解项目中会用到哪些服务和接口。

1.开发模式

智能租房项目通过Flask框架,采用前后端不分离的开发模式进行开发,同时前端用到的框架是Bootstrap;后端用到的模板引擎为Flask框架自带的Jinja2。若页面需要整体刷新,使用Jinja2模板引擎进行渲染并返回页面,响应速度快,且没有延迟;若页面需要局部刷新,可使用Bootstrap,虽然在网络状况不佳时会有延迟,但简洁方便,流量小。

2.运行机制

用户通过浏览器发送的请求被Web服务器接收,Web服务器根据URL判断用户请求的是静态数据还是动态数据。 若用户请求的是静态数据,例如CSS文件、JavaScript文件、图片文件等,由于这些静态数据全部存储在本地,所以服务器会根据URL到本地找到数据并返回给浏览器,浏览器再将数据呈现给用户,这个过程非常迅速;若用户请求的是动态数据,Flask程序实现的动态业务逻辑为接收请求、生成动态页面并返回。

智能租房项目的动态数据由Jinja2模板引擎渲染,该服务由Flask程序提供。Flask程序的后端提供了注册、登录、验证这几个业务,实现这几个业务会涉及到数据存储服务。

6.3 项目创建和配置

6.3.1 创建项目

创建项目是开发的第一个步骤。打开PyCharm工具,新建一个名称为house的项目,并为该项目配置隔离环境flask_env。为了便于组织与管理项目中的资源文件和代码文件,我们可以在house项目中新建若干目录和py文件,使项目的目录结构变得清晰。

house:根目录,包含所有的资源文件、代码文件和子目录。 house/utils:子目录,用于放置第三方的工具包。 house/app.py:文件,用于放置程序的入口代码。

6.3.2 使用配置信息

为了对智能租房项目的一些行为进行定制,比如开启调试模式,可以在该项目中使用配置信息。接下来,介绍如何在house项目中使用配置信息,具体步骤如下。

(1)在house项目的根目录下新建名称为settings的py文件,在该文件中定义一个Config类,用于给指定的配置项赋值。

class Config:
开启调试模式
    DEBUG = False

为了对智能租房项目的一些行为进行定制,比如开启调试模式,可以在该项目中使用配置信息。接下来,介绍如何在house项目中使用配置信息,具体步骤如下。

(2)在app.py文件中导入Config类,并将Config类加载到应用程序实例中,具体代码如下所示。

from flask import Flask
from settings import Config
app = Flask(__name__)
app.config.from_object(Config)
if __name__ == '__main__':
    app.run(debug=True)

为了对智能租房项目的一些行为进行定制,比如开启调试模式,可以在该项目中使用配置信息。接下来,介绍如何在house项目中使用配置信息,具体步骤如下。

(3)为了检测项目当前能否正常运行开发服务器,需要在app.py文件中增加一段测试用的视图函数,代码如下所示。

@app.route('/')
def test():
    return 'OK'

6.3.3 配置前端静态文件

1.准备静态文件

本项目用到的静态文件均存储在本地的static文件夹中,我们需要将该文件夹直接复制到house项目的根目录下。

2.指定静态文件加载路径

默认情况下,Flask程序会到根目录下的static目录中加载需要用到的静态文件。如果希望指定静态文件的加载路径,则可以在通过Flask()方法创建程序实例时传入static_url_path参数来指定静态文件的加载路径,传入static_folder参数来指定静态文件夹的名称。 这里,我们使用默认的静态文件加载路径,不再另行指定静态文件的加载路径。 配置完成后重启项目,在浏览器中访问http://127.0.0.1:5000/static/img/about-bg.jpg,浏览器展示的图片效果如图所示。

6.3.4 配置模板文件

本项目中的每个模块均对应一个单独的页面,每个页面对应一个HTML文件。由于搜索列表页会展示符合搜索条件的全部房源,也需要对应一个独立页面。分准备模板文件和指定模板文件加载路径两部分预先为项目配置模板文件。

1.准备模板文件

本项目用到的模板文件均存储在本地的templates文件夹中。我们将该文件夹直接复制到house项目的根目录下。

detail_page.html:用于显示详情页。 index.html:用于显示首页。 list.html:用于显示列表页。 search_list.html:用于显示搜索列表页。 user_page.html:用于显示用户中心页。

2.指定模板文件加载路径

默认情况下,Flask程序会到根目录下的templates目录中加载需要用到的模板文件。如果希望指定模板文件的加载路径,则可以在通过Flask()方法创建程序实例时传入template_folder参数来指定模板文件夹的名称。这里,我们使用默认的模板文件夹的名称,不再另行指定。 为了检测项目是否可以正常渲染模板,在app.py文件的test()函数中,返回渲染的模板文件index.html,具体代码如下所示。

from flask import Flask, render_template
……
@app.route('/')
def test():
    return render_template('index.html')
if __name__ == '__main__':
    app.run(debug=True)

6.4 数据准备

6.4.1 数据表设计

在智能租房项目中,首页、列表页、详情页和用户中心页或多或少都展示了房源信息,考虑到智能推荐功能依赖多个用户的浏览行为,因此,我们需要准备3张数据表,分别用于保存房源数据、用户数据、推荐房源数据。

(1)首页、列表页、详情页和用户中心页都包含标题、户型、价格等房源数据,为此,可以将这些页面房源数据保存到房源数据表中,使多个页面上共享一个数据表。

(2)用户数据表设计,用户中心页展示了用户的基本信息,包括昵称、密码、邮箱、住址等,为此我们可以将这些信息保存到用户数据表中。

(3)推荐房源数据表设计,当向用户推荐房源时,需要找到这个用户的浏览历史,包括浏览次数,浏览的房源数据等。

6.4.2 导入数据

由于智能租房项目涉及的数据量非常庞大,若仍然通过手动编写代码的方式逐条向数据库添加数据,显然是极其繁琐的。为此,我们准备了包含数据库执行语句的house.sql文件,借用Navicat工具运行该文件来批量导入数据,具体步骤如下。

(1)由于house.sql文件中没有创建数据库的SQL语句,所以我们需要另行创建数据库。打开Navicat工具,在数据库列表的根目录localhost_3306上右击弹出右键菜单,在右键菜单中选择“新建数据库...”打开新建数据库窗口,在该窗口中填写数据库名,选择字符串和排序规则。

(2)在新建数据库窗口中,单击“确定”按钮关闭新建数据库窗口,并跳转回Navicat工具主界面,此时数据库列表中增加了house数据库。选中house数据库,在该数据库上方右击弹出右键菜单,在右键菜单菜单中选择“运行SQL文件...”打开运行SQL文件窗口。

(3)在运行SQL文件窗口中,单击文件输入框后面的 按钮弹出打开窗口,在该窗口中找到house.sql文件。选择完SQL文件的窗口如图所示。

(4)在选择完SQL文件窗口中,单击“打开”按钮后自动关闭打开窗口,跳转回运行SQL文件窗口,此时该窗口的文件输入框中自动填写了house.sql文件所在的路径。

(5)在运行完SQL文件的窗口中,单击“关闭”按钮关闭当前窗口,跳转回Navicat工具的主窗口。双击house数据库,可以看到该数据库中包含3个数据表,分别是house_info、house_recommend和user_info。双击打开house_info表,可以看到该表里面的数据。

(6)为了能够让Flask项目能够访问house数据库,我们需要让house项目连接house数据库。在settings.py文件中创建SQLAlchemy类的对象,指定house数据库的连接。

(7)在app.py文件中初始化数据库。

6.4.3 创建模型

为了能够在Flask项目中访问数据库,我们需要对照数据表的结构创建模型,利用SQLAlchemy的ORM机制将模型类与数据表之间建立关联。

首先,在house项目的根目录下新建用于存放模型的models.py文件,此时项目的目录结构如图所示。

然后,在model.py文件中定义3个模型类,分别是House、Recommend和User,依次与数据表house_info、house_recommend和user_info进行关联。

由于在模型类中使用了数据库对象db,所以需要在model.py文件的开头导入db,具体代码如下所示。

from settings import db

最后,为了保证house项目中可以正常操作数据表,这里通过访问一个数据表的记录进行验证。打开app.py文件,在该文件中导入House类,并在视图函数test()中查询house_info表的第一条记录。

为了避免测试代码干扰项目,测试完成后需要将所有的测试代码进行注释或者删除。

本章小结

本章围绕智能租房项目的前期准备工作进行了介绍,首先介绍了智能租房项目的核心模块,并对各模块包含的功能进行了归纳,然后介绍了项目的开发模型和运行机制,最后搭建了项目所需的环境,准备了数据。通过学习本章的内容,读者能够明确智能租房项目核心模块的功能,搭建开发环境,为开发项目做好准备工作。

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

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

相关文章

教师考试,搜题软件哪个好用?大学生必备工具:搜题软件推荐 #微信#学习方法

在大学生的学习过程中,我们经常会遇到各种难题和疑惑。有时候,我们可能会花费大量的时间和精力去寻找答案,但结果却并不尽如人意。为了帮助大家更好地解决这个问题,今天我要向大家介绍几款备受大学生欢迎的搜题软件,它…

【NICN】探索牛客之求阶乘

1.题目描述 递归和非递归分别实现求n的阶乘&#xff08;不考虑溢出的问题&#xff09; 2.代码解题 2.1递归 递归思想&#xff1a; Fac(N) 1*2*3*……*N递归方式实现&#xff1a;1 N < 1 Fac(N)Fac(N-1)*N N > 2 long long Fac(int N) {if(N < 1)return 1;retu…

欢度春节,祝福万家。

值此春节佳节来临之际,新年问候如一道灯光&#xff0c;照亮我们前行的路。在这光芒中&#xff0c;期待与你携手走过新的一年。 春节是中华民族最重要的传统节日,它代表着新的开始和希望。在这个特殊的时刻,让我们放下过去的烦恼和忧虑,迎接新的挑战和机遇。让我们珍惜和家人团…

使用 Elasticsearch 和 OpenAI 构建生成式 AI 应用程序

本笔记本演示了如何&#xff1a; 将 OpenAI Wikipedia 向量数据集索引到 Elasticsearch 中使用 Streamlit 构建一个简单的 Gen AI 应用程序&#xff0c;该应用程序使用 Elasticsearch 检索上下文并使用 OpenAI 制定答案 安装 安装 Elasticsearch 及 Kibana 如果你还没有安装好…

Android性能调优 - 应用安全问题

Android应用安全 1.组件暴露&#xff1a; 像比如ContentProvider,BroadcastReceiver&#xff0c;Activity等组件有android:exported属性&#xff1b; 如果是私有组件 android:exported “false”&#xff1b; 如果是公有组件 android:exported “true” 且进行权限控制&…

Linux 存储管理(磁盘管理、逻辑卷LVM、交换分区swap)

目录 1.磁盘管理 1.1 磁盘简介 1.2 管理磁盘 添加磁盘 管理磁盘流程三步曲 1.查看磁盘信息 2.创建分区 3.创建文件系统 4.挂载mount 5.查看挂载信息 6.MBR扩展分区 7.重启后的影响 2.逻辑卷LVM 2.1 简介 ​​​​​​2.2 创建LVM 2.3 VG管理 2.4 LV管理实战-在…

单片机学习笔记---DS1302实时时钟工作原理

目录 DS1302介绍 学会读芯片手册&#xff08;DS1302芯片手册&#xff09; 封装 引脚定义 电源部分 时钟部分 通信部分 总结列表 内部结构图 电源控制部分 时钟控制部分 寄存器部分 访问部分 寄存器部分的详细定义 命令字 时序的定义 单字节读 单字节写 提前预…

qt/c++实现拓扑排序可视化

&#x1f482; 个人主页:pp不会算法^ v ^ &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 实现功能 1、选择文件导入初始数据 2、逐步演示 3、排序完成输出…

L1-096 谁管谁叫爹

一、题目 二、解题思路 依据题意判断即可。 三、代码 #include<iostream> using namespace std; #include<cmath> int main() {int n;cin>>n;while(n--){int n1,n2,s10,s20;cin>>n1>>n2;for(int i1;n1/i>0;i*10){s1(n1/i%10);}for(int i1;n…

FastDFS安装并整合Openresty

FastDFS安装 一、环境--centos7二、FastDFS--tracker安装2.1.下载2.2.FastDFS安装环境2.3.安装FastDFS依赖libevent库2.4.安装libfastcommon2.5.安装 libserverframe 网络框架2.6.tracker编译安装2.7.文件安装位置介绍2.8.错误处理2.9.配置FastDFS跟踪器(Tracker)2.10.启动2.11…

【JAVA WEB】 css背景属性 圆角矩形的绘制

目录 背景属性设置 圆角矩形 背景属性设置 背景颜色,在style中 background-color:颜色&#xff1b; 背景图片 background-image:url(……) 背景图片的平铺方式 background-repeat: 平铺方式 repeat 平铺&#xff08;默认&#xff09;no-repeat 不平铺repeat-x 水平平铺repea…

设计模式3-责任链模式

责任链模式是一种行为设计模式&#xff0c;它允许你创建一个对象链。请求沿着这条链传递&#xff0c;直到有一个对象处理它为止。这种模式通常用于需要以某种方式动态地决定处理请求的顺序或方式的情况。 类图&#xff1a; 从图中可见最大的特点是AbstractHandler它自己聚合了自…

探索Xposed框架:个性定制你的Android体验

探索Xposed框架&#xff1a;个性定制你的Android体验 1. 引言 在当今移动设备市场中&#xff0c;Android系统作为最受欢迎的操作系统之一&#xff0c;其开放性和可定制性备受用户青睐。用户希望能够根据个人喜好和需求对其设备进行定制&#xff0c;以获得更符合自己习惯的使用…

svg 进阶

svg 进阶 svg 应用场景 绘制 icon绘制动画 svg viewport 和 viewBox viewport 是 svg 图像的可见区域 viewBox 是用于在画布上绘制 svg 图形的坐标系统 在一下案例中 svg中 width“500” height“200” 就是可视区域 比如你的svg是100X100但是你的可视区域只有20X20 那么他…

c语言中的模拟多态性

在C语言中模拟多态性 多态性是面向对象编程中的一个核心概念&#xff0c;它允许我们通过一个共同的接口来操作不同的数据类型。虽然C语言是一种过程式语言&#xff0c;本身不直接支持面向对象的特性&#xff0c;如继承、封装和多态&#xff0c;但我们可以通过一些技巧来模拟这些…

mac docker 宿主机和容器间网络打通

动因 是这样&#xff0c;笔者最近满怀欣喜入手Docker&#xff0c;看着各种文章命令都是不断点头称道&#xff1a;“嗯嗯&#xff0c;不错不错”,在接下来终于准备大干一场的时候碰壁了&#xff0c;主要情况是说在Mac中跑了第一把的时候发现碰到&#xff0c;虚拟机和宿主机居然…

arkTS开发鸿蒙OS应用(登录页面实现,连接数据库)

前言 喜欢的朋友可在抖音、小红书、微信公众号、哔哩哔哩搜索“淼学派对”。知乎搜索“编程淼”。 前端架构 Toubu.ets import router from ohos.router Component export struct Header{build(){// 标题部分Row({space:5}){Image($r(app.media.fanhui)).width(20).onClic…

HiveSQL——用户中两人一定认识的组合数

注&#xff1a;参考文章&#xff1a; SQL之用户中两人一定认识的组合数--HQL面试题36【快手数仓面试题】_sql面试题-快手-CSDN博客文章浏览阅读1.2k次&#xff0c;点赞3次&#xff0c;收藏12次。目录0 需求分析1 数据准备2 数据分析3 小结0 需求分析设表名&#xff1a;table0现…

深度分析一款新型Linux勒索病毒

前言 DarkRadiation勒索病毒是一款全新的Linux平台下的勒索病毒&#xff0c;2021年5月29日首次在某平台上发布了此勒索病毒的相关的信息&#xff0c;6月中旬趋势科技针对这个新型的勒索病毒进行了相关的分析和报道。 DarkRadiation勒索病毒采用Bash脚本语言编写实现&#xff0…

渗透测试练习题解析 2(CTF web)

题目均来自 BUUCTF 1、[极客大挑战 2019]Upload 1 考点&#xff1a;文件上传漏洞 进入靶场 一看就知道是考察文件上传漏洞&#xff0c;看源码有没有敏感信息 没有什么敏感信息&#xff0c;那我们试着按要求传一张图片看看结果&#xff0c;但是传了 png、jpg 类型的图片后发现上…