第7章 智能租房——首页

学习目标

  • 掌握房源总数展示功能,能够实现将统计的房源总数在首页中展示

  • 掌握最新房源数据展示功能,能够实现将查询的最新房源数据在首页中展示

  • 掌握热点房源数据展示功能,能够实现将查询的热点房源数据在首页中展示

  • 了解智能提示搜索框的功能说明,能够说出智能提示搜索框的功能逻辑

  • 熟悉智能提示搜索框的前端逻辑,能够归纳用户输入和选择的数据如何传递到后端

  • 掌握智能提示搜索框的后端逻辑,能够实现根据输入的数据返回相应房源信息的功能

为方便用户能够快速、便捷地查找到心仪的房源,智能租房项目的首页提供了房源总数展示、最新房源展示、热点房源展示和智能搜索这几个功能,其中智能搜索功能可以帮助用户按地区和户型筛选出符合条件的房源。本章将对房源总数展示、最新房源数据展示、热点房源数据展示和智能搜索进行介绍。

7.1 房源总数展示

在智能租房项目中,首页的智能提示搜索框下方展示了当前城市的房源总数。

从图中可以看出,南昌市的房源总数为113318。

房源总数展示功能分功能分析、接口设计、后端实现和渲染模板4个部分实现。

1.功能分析

房源总数展示功能的逻辑比较简单,只需要从数据库中查询房源数据表的总数量,然后将查询结果返回至后端,再由后端渲染到模板文件中即可。房源总数展示功能的实现流程如图所示。

2.接口设计

在设计房源总数接口时,需要明确请求页面、请求方式、请求地址以及返回数据。 请求页面指浏览器发送请求要加载的页面。 请求方式指浏览器向智能租房服务器发送请求或者提交资源时使用的方法。 请求地址指用户在浏览器输入的URL。 返回数据指智能租房服务器接收请求后返回的响应结果。

接口描述说明
请求页面index.html
请求方式GET
请求地址/
返回数据数字,表示查询的房源总数量,如33980

3.后端实现

在项目的根目录下新建文件app.py,在该文件中创建蓝图,并结合房源总数接口定义视图函数。

from flask import Flask, render_template
from setting import Config
import pymysql as ps
app=Flask(__name__)
app.config.from_object(Config)@app.route("/")
def test():# 获得数据库连接con = ps.connect(host="127.0.0.1", port=3306,user="root", password="admin",db="house", charset="utf8")# 获得游标cursor = con.cursor()# 执行查询操作cursor.execute("select count(*) from house_info ")rows = cursor.fetchall()nums=rows[0]return render_template("index.html",num=nums[0])if __name__ == "__main__":app.run(debug=True)

4.渲染模板

在index.html文件中,查询class属性值为area-info的div标签,在该标签下找到房源总数对应的span标签,并将span标签的内容替换为{{ num }}。

<!-- Main Content -->
<div class="container"><!--定位,数量--><div class="row"><div class="col-lg-12"><div class="area-info"><span style="color:#2980b9">当前城市:</span><span style="color:#e74c3c">南昌</span>&nbsp<span style="color:#2980b9">房源总数:</span><span style="color:#e74c3c">{{ num }}</span></div></div></div><!--当前城市--><div class="row info-line"><!-- 模块1标题 --><div class="col-lg-12 tj-header"><h3>为您为家</h3><div class="describe"><span>为您精准定位,当前城市房源信息</span><span class="float-right"><a href="/list/pattern/1"style="color: #3498db; padding-right: 5px">更多南昌房源</a></span></div></div>

7.2 最新房源数据展示

在智能租房项目中,首页房源总数下方会为用户展示最新房源数据。

从图中可以看出,首页总共展示了6套最新的房源数据,每套房源信息包括房源图片、房源地址、房源户型、房源面积和房源价格。分功能分析、接口设计、后端实现和渲染模板4个部分实现最新房源数据展示的功能。

1.功能分析

最新房源数据为最近新添加的房源数据,若希望在首页中展示最新的房源数据,需要从数据库中查询发布时间较晚的6条房源数据,之后将查询结果返回至后端,由后端渲染到模板文件中即可。

2.接口设计

最新房源数据接口设计如表所示。

接口描述说明
请求页面index.html
请求方式GET
请求地址/
返回数据房源对象列表

因为项目中的房源图片均使用同一张图片,所以返回的数据中无需包含图片名称。

3.后端实现

因为最新房源数据仍然显示在首页上,所以会将最新房源数据展示功能的逻辑代码写到视图函数index()中。在index()函数中增加最新房源数据展示的逻辑代码,具体如下所示。

@app.route("/")
def index():# 查询总房源数量cursor.execute("select count(*) from house_info ")rows = cursor.fetchall()# 总房源数量nums=rows[0]# 查询所有房源中时间最新的6条记录cursor.execute("select * from house_info order by publish_time desc limit 0,6")houses=cursor.fetchall()return render_template("index.html",num=nums[0],house_new_list=houses)

4.渲染模板

为了能够将最新房源数据渲染到首页,这里我们需要将模板变量house_new_list插入到模板文件的指定位置。在index.html文件中,查询class属性值为col-lg-4的所有div标签,保留第一个div标签并删除其他div标签,在保留的div标签外部使用循环结构遍历house_new_list取出每套房源数据,依次将指定标签的内容替换为相应的模板变量。

<!-- 模块1信息展示 -->
{% for house in house_new_list %}
<div class="col-lg-4"><div class="course"><div><a href="/house/{{ house[0] }}"><img class='img-fluid img-box' src="/static/img/house-bg1.jpg"alt=""></a></div><div class="course-info"><span>{{ house[9] }}</span></div><div class="course-info1"><span>{{ house[2] }} - {{ house[3] }}平方米</span><span class="price float-right">¥&nbsp{{ house[4] }}</span></div></div>
</div>
{% endfor %}

7.3 热点房源数据展示

智能租房项目中,首页最新房源下方会为用户展示热点房源数据。

首页总共展示了4套热点房源数据,每套房源数据包括房源图片、房源地址、房源户型、房源面积、房源热度和房源价格。

热点房源数据展示功能分功能分析、接口设计、后端实现和渲染模板4个部分实现。

1.功能分析

热点房源数据为浏览量较高的部分数据。热点房源数据展示功能与最新房源数据展示功能类似,不同的是,热点房源数据展示功能用到的房源数据是根据房源的浏览量筛选出来的,而最新房源数据展示功能用到的房源数据是根据房源的发布时间筛选出来的。 若希望在首页中展示热点房源数据,需要从数据库中查询浏览量较高的前4条房源数据,之后将查询结果返回至后端,由后端渲染到模板文件中即可。

2.接口设计

热点房源数据同样在智能租房的首页进行展示,因此请求页面仍然为index.html,请求地址为“/”;由于热点房源数据展示功能的后端逻辑只涉及获取房源数据,所以请求方式为GET;返回的数据为房源对象列表,每套房源包括房源id、房源地址、房源户型、房源面积、房源价格和房源热度。

接口描述说明
请求页面index.html
请求方式GET
请求地址/
返回数据房源对象列表

3.后端实现

热点房源数据展示的后端逻辑:首先从数据库中查询所有的房源数据,并按照浏览量进行降序排列,然后取出位于前4行的房源数据渲染到模板文件中。因为热点房源数据仍然显示在首页上,所以会将热点房源数据展示功能的逻辑代码写到视图函数index()中。

from flask import Flask, render_template
from setting import Config
import pymysql as ps
app=Flask(__name__)
app.config.from_object(Config)
# 获得数据库连接
con = ps.connect(host="127.0.0.1", port=3306,user="root", password="admin",db="house", charset="utf8")
# 获得游标
cursor = con.cursor()@app.route("/")
def index():# 查询总房源数量cursor.execute("select count(*) from house_info ")rows = cursor.fetchall()# 总房源数量nums=rows[0]# 查询所有房源中时间最新的6条记录cursor.execute("select * from house_info order by publish_time desc limit 0,6")houses=cursor.fetchall()# 查询所欲房源中热点房源最高的4条记录cursor.execute("select * from house_info order by page_views desc limit 0,4")pages=cursor.fetchall()return render_template("index.html",num=nums[0],house_new_list=houses,house_hot_list=pages)if __name__ == "__main__":app.run(debug=True)

4.渲染模板

后端代码已经获取了热点房源数据,接下来就需要将热点房源数据渲染到模板文件index.html中。在index.html文件中,查询class属性值为col-lg-3的div标签,保留第一个标签并删除其他标签,在保留的标签外部使用循环结构遍历house_hot_list取出每套房源数据,依次将指定标签的内容替换为指定的模板变量。

<!-- 模块2内容 -->
{% for house in house_hot_list %}
<div class="col-lg-3"><div class="course"><div><a href="/house/{{ house[0] }}"><img class='img-fluid img-box' src="/static/img/house-bg1.jpg"alt=""></a></div><div class="course-info"><span>{{ house[9] }}</span></div><div class="course-info1"><span>{{ house[2] }} - {{ house[3] }}平方米</span><span style="color: #3498db">&nbsp&nbsp<i class="fa fa-heart"aria-hidden="true">&nbsp热度{{ house[16] }}</i></span><span class="price float-right">¥{{ house[4] }}</span></div></div>
</div>
{% endfor %}

7.4 智能搜索

7.4.1 智能搜索功能说明

智能租房中,首页上方展示了一个智能提示搜索框。

1.地区搜索

地区搜索是根据房源所在小区进行搜索,用户在输入框中输入的查询信息可以是地区或小区名称。例如,在智能搜索框中输入“昌平”,此时输入框下方显示了包含“昌平”字眼的提示列表。

当用户输入的查询信息在智能租房中查询不到时,首页顶部会以弹框形式告知用户未找到相关房源。

2.户型搜索

户型搜索是根据房源的户型进行搜索,用户输入的查询信息可以是“x室”、“x厅”或“x室x厅”。例如,将智能提示搜索框中的搜索选项切换成户型搜索,之后在输入框中输入“1室”,此时输入框下方显示了包含“1室”字眼的提示列表。

提示列表罗列了与查询信息“1室”相关的3条房源信息,每条房源信息包括房源户型和该户型包含房源的总套数。值得一提的是,智能提示搜索框除了支持中文搜索之外,也支持英文搜索。

7.4.2 前端逻辑说明

智能租房已经实现了智能搜索的前端逻辑,为了让大家能够快速理解智能搜索的业务逻辑,我们也需要对智能搜索功能的前端逻辑有所了解。智能搜索的前端逻辑代码均位于index.html文件中。

1.定义智能提示搜索框

智能提示搜索框由搜索选项、输入框和提交按钮组成,其中搜索选项由ul标签定义;输入框和提交按钮由form标签定义。

<ul class="nav nav-tabs my-nav-tab" style="margin:15px 0 0 0"><li class="chanle1 active"><span>地区搜索</span></li><li class="chanle2"><span>户型搜索</span></li>
</ul>

输入框和提交按钮的代码如下所示。

<form class="form-inline" role="form" id="my-form" action="/query"><div class="form-group"><label class="sr-only" for="txt">名称</label><input type="text" class="form-control" id="txt" name='addr' placeholder="请输入区域、商圈或小区名开始找房"></div><button type="submit" class="my-btn btn btn-info" id="btn">提交</button><ul id="list" class="list-group"></ul>
</form>

2.选择搜索选项

当用户选择地区搜索或户型搜索选项后,在前端页面中可以看到对应的背景颜色由灰色变为蓝色,输入框的提示信息也跟着发生了变化。 选择搜索选项是通过监听用户点击事件完成的,当触发点击事件后会执行3个操作,分别是给选中选项的标签添加一个类名active、给input标签添加name属性、修改input标签的placholder属性值。

// 由户型搜索切换至地区搜索或者重复点击地区搜索
$(".chanle1").on('click', function () {// 用于地区搜索重复点击的初始化if ($('.chanle1').hasClass('active')) {$(".chanle1").removeClass('active');$("#txt").attr('name', '');$('#txt').attr('placeholder', '')}// 移除户型搜索的样式$(".chanle2").removeClass('active');// 重新设置选中字段和<input>标签的属性$(".chanle1").addClass('active');$("#txt").attr('name', 'addr');$('#txt').attr('placeholder', '请输入区域、商圈或小区名开始找房');
});// 由地区搜索切换至户型搜索或者重复点击户型搜索
$(".chanle2").on('click', function () {// 用于户型搜索重复点击的初始化if ($('.chanle2').hasClass('active')) {$(".chanle2").removeClass('active');$("#txt").attr('name', '');$('#txt').attr('placeholder', '')}// 移除地区搜索的样式$(".chanle1").removeClass('active');// 重新设置选中字段和<input>标签的属性$(".chanle2").addClass('active');$("#txt").attr('name', 'rooms');$('#txt').attr('placeholder', '请输入户型开始找房,例如:1室1厅');
});

3.监听输入框状态

当输入框状态为中文输入法时需要使用compositionstart事件和compositionend事件同步监听,其中compositionstart事件会在中文输入法状态开始输入时触发,compositionend事件会在中文输入法输入完成时触发;当输入框状态为英文输入法时使用input事件同步监听。

// 输入框的书写逻辑
var oTxt = document.getElementById('txt');  // 输入框
var oBtn = document.getElementById('btn');  // 提交按钮
var oList = document.getElementById('list');// 提示列表// 设置锁,true表示锁住输入框,false表示解锁输入框
var cpLock = false;// 中文搜索,监听compositionstart事件,如果触发该事件,就锁住输入框
$('#txt').on('compositionstart', function () {cpLock = true;
});// 中文搜索,监听compositionend事件,如果触发该事件,就解锁输入框
$('#txt').on('compositionend', function () {cpLock = false;var keyWord = oTxt.value;var resultList = searchByIndexOf(keyWord);
});// 英文搜索,监听input事件,用于处理字母搜索
$('#txt').on('input', function () {if (!cpLock) {var keyWord = oTxt.value;var resultList = searchByIndexOf(keyWord);}
});

4.查询关键字

前端获取了关键字后需要向后端发送请求,用于从数据库中查询匹配关键字的内容,并获取查询后的结果。

// 搜索关键字
function searchByIndexOf(keyWord) {$(".my-nav-tab li").each(function (index, element) {if ($(this).hasClass("active")) {var info = $(this).text();data = {"kw": keyWord, "info": info};$.ajax({url: "/search/keyword/",type: 'post',dataType: 'json',data: data,success: function (data) {  // {code=0, info=[]}if (data['code'] == 0) {warning_str = '未找到关于' + keyWord + '的房屋信息!';alert(warning_str)}if (data['code'] == 1) {  // {code=1, info=[{t_name='字段的名字 例如:东城-xxx-xxxx', num=108},{},{}]}list = data['info'];console.log('search', list);oList.innerHTML = '';var item = null;for (var i = 0; i < 9; i++) {item = document.createElement('li');item.setAttribute("class", "list-group-item li_style");item.setAttribute("title", list[i]['t_name']);li_text = list[i]['t_name'] + '<span class="badge float-right">大约有' + list[i]['num'] + '套房</span>';console.log(li_text);item.innerHTML = li_text;oList.appendChild(item);info_to_txt();}return list;}}});}});
}

7.4.3 后端逻辑实现

智能提示搜索框的前端代码实现了将用户选择的搜索选项和搜索关键字发送到后端,当后端接收到前端发送的请求后,便会根据搜索关键字到数据库中查询相关的房源数据。智能搜索接口设计如下。

接口描述说明
请求方式GET
请求地址/
请求参数{'kw':'xxx','info':'地区搜索'}或者{'kw':'xxx','info':'户型搜索'}
返回数据房源对象列表

智能搜索接口返回的数据是JSON数据。

{"code": 1, "info": [{"t_name": "朝阳-朝阳公园-观湖国际", "num": 100},……]
}

code表示查询成功标志位,支持两种取值0和1,其中0代表查询失败,1代表查询成功;info表示查询到的房源数据,info数组中包含零个或若干个JSON对象,每个JSON对象包含两个键值对,其中键t_name表示查询到的房源所在小区,其类型为字符串;键num表示房源总套数,其类型为整数。

在app.py文件中定义视图函数search_kw(),用于获取用户输入的关键字和用户选择的搜索选项,根据获取的查询条件向数据查询房源数据,并将查询的数据进行返回。

# 关键字搜索
# 完成查询关键字的功能
# 1. 获取前端传递过来的查询参数 {"kw": keyWord, "info": info} kw:查询关键字 info:查询字段  使用request提取参数信息
# 2. 根据查询参数  过滤房源信息 address 包含三里屯的房源
# 3. 使用group_by 对address字段进行分组
# 4. 使用count来统计 相同地址下的房源数量
# 5. 使用order_by 根据房源的数量进行排序 并把它换成降序排序
# 6. 使用limit 获取数据的前9行
# 7. 组装数据 完成前后端的交互
from flask import request,jsonify
@app.route("/search/keyword/",methods=["POST"])
def search_kw():kw = request.form['kw']  # 获取搜索关键字info = request.form['info']  # 获取用户选择的搜索选项if info == '地区搜索':# 根据关键字进行模糊查询,将查询出来的记录按地址进行分组,按数量进行降序排序,取前9条记录sql="SELECT address,COUNT(*) FROM house_info WHERE address LIKE %s  GROUP BY address ORDER BY COUNT(*) DESC LIMIT 0,9;"cursor.execute(sql,("%"+kw+"%"))result =cursor.fetchall()if len(result):  # 有查询结果data = []for i in result:# 将查询的房源数据添加到data列表中data.append({'t_name': i[0], 'num': i[1]})return jsonify({'code': 1, 'info': data})else:  # 没有查询结果return jsonify({'code': 0, 'info': []})if info == '户型搜索':# 根据关键字进行模糊查询,将查询出来的记录按地址进行分组,按数量进行降序排序,取前9条记录sql = "SELECT rooms,COUNT(*) FROM house_info WHERE rooms LIKE %s  GROUP BY rooms ORDER BY COUNT(*) DESC LIMIT 0,9;"cursor.execute(sql, ("%"+kw+"%"))result = cursor.fetchall()if len(result):data = []for i in result:data.append({'t_name': i[0], 'num': i[1]})return jsonify({'code': 1, 'info': data})else:return jsonify({'code': 0, 'info': []})

本章小结

本章围绕智能租房项目首页模块的功能进行了介绍,包括房源总数展示、最新房源数据展示、热点房源数据展示和智能搜索。通过学习本章的内容,希望读者能够体会到前端与后端的交互过程,熟练地应用蓝图和视图函数。

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

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

相关文章

内网渗透靶场02----Weblogic反序列化+域渗透

网络拓扑&#xff1a; 攻击机&#xff1a; Kali: 192.168.111.129 Win10: 192.168.111.128 靶场基本配置&#xff1a;web服务器双网卡机器&#xff1a; 192.168.111.80&#xff08;模拟外网&#xff09;10.10.10.80&#xff08;模拟内网&#xff09;域成员机器 WIN7PC192.168.…

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 )

文章目录 Maven是什么&#xff1f;一、Maven安装和配置本地配置文件设置idea配置本地maven 二、基于IDEA的Maven工程创建2.1 Maven工程GAVP属性2.2 Idea构建Maven JavaEE工程 三、Maven工程项目结构说明四、Maven核心功能依赖和构建管理4.1 依赖管理和配置4.2 依赖传递和冲突4.…

使用2024年新版NPS自建内网穿透

博客文章&#xff1a;使用2024年新版NPS自建内网穿透-风屿岛 (biliwind.com) 上图为原版NPS&#xff0c;目前已经停止更新&#xff0c;并且有着较多的问题。但幸运的是&#xff0c;有大佬接手了它的开发工作 新版的NPS修复了大多的漏洞&#xff0c;并且与原版NPS兼容的同时添加…

【北邮鲁鹏老师计算机视觉课程笔记】03 edge 边缘检测

【北邮鲁鹏老师计算机视觉课程笔记】03 1 边缘检测 有几种边缘&#xff1f; ①实体上的边缘 ②深度上的边缘 ③符号的边缘 ④阴影产生的边缘 不同任务关注的边缘不一样 2 边缘的性质 边缘在信号突变的地方 在数学上如何寻找信号突变的地方&#xff1f;导数 用近似的方法 可以…

单片机——FLASH(2)

文章目录 flash &#xff08;stm32f40x 41x的内存映射中区域详解&#xff09;flash写数据时 flash &#xff08;stm32f40x 41x的内存映射中区域详解&#xff09; Main memory 主存储区 放置代码和常数 System memory 系统存储区 方式bootloader代码 OTP区 一次性可编程区 选项…

115.乐理基础-五线谱-五线谱的练习方式

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;114.乐理基础-五线谱-快速识别五线谱的谱号-CSDN博客 前置知识&#xff1a;视频地址 乐理基础视频版&#xff0c;文字版 乐理基础文字版 快速记忆五线谱的方式不要去学&#xff0c;就机械式练习&#xff0c;练习时…

《动手学深度学习(PyTorch版)》笔记8.3

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

【初中生讲机器学习】7. 交叉验证是什么?有哪些?怎么实现?来看!

创建时间&#xff1a;2024-02-10 最后编辑时间&#xff1a;2024-02-10 作者&#xff1a;Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏&#xff0c;很高兴遇见你~ 我是 Geeker_LStar&#xff0c;一名初三学生&#xff0c;热爱计算机和数学&#xff0c;我们一起加…

SpringOne2023峰会总结-02-SpringBoot与Micrometer如何在WebFlux环境下实现的链路日志

个人创作公约&#xff1a;本人声明创作的所有文章皆为自己原创&#xff0c;如果有参考任何文章的地方&#xff0c;会标注出来&#xff0c;如果有疏漏&#xff0c;欢迎大家批判。如果大家发现网上有抄袭本文章的&#xff0c;欢迎举报&#xff0c;并且积极向这个 github 仓库 提交…

Android 移动应用开发 创建第一个Android项目

文章目录 一、创建第一个Android项目1.1 准备好Android Studio1.2 运行程序1.3 程序结构是什么app下的结构res - 子目录&#xff08;所有图片、布局、字AndroidManifest.xml 有四大组件&#xff0c;程序添加权限声明 Project下的结构 二、开发android时&#xff0c;部分库下载异…

利用YOLOv8 pose estimation 进行 人的 头部等马赛克

文章大纲 马赛克几种OpenCV 实现马赛克的方法高斯模糊pose estimation 定位并模糊:三角形的外接圆与膨胀系数实现实现代码实现效果参考文献与学习路径之前写过一个文章记录,怎么对人进行目标检测后打码,但是人脸识别有个问题是,很多人的背影,或者侧面无法识别出来人脸,那…

【Python 千题 —— 基础篇】查找年龄

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目描述 题目描述 班级中有 Tom、Alan、Bob、Candy、Sandy 五个人,他们组成字典 {Tom: 23, Alan: 24, Bob: 21, Candy: 22, Sandy: 21},字典的键是姓名,字典的…

C++模版(初阶)

&#x1f308;函数复用的两种不恰当方式 ☀️1.函数重载 以Swap函数为例&#xff0c;有多少种参数类型组合&#xff0c;就要重载多少个函数&#xff1a; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left,…

[word] word如何打印背景和图片? #微信#其他#经验分享

word如何打印背景和图片&#xff1f; 日常办公中会经常要打印文件的&#xff0c;其实在文档的打印中也是有很多技巧的&#xff0c;可以按照自己的需求设定&#xff0c;下面给大家分享word如何打印背景和图片&#xff0c;一起来看看吧&#xff01; 1、打印背景和图片 在默认的…

Springboot拦截器中跨域失效的问题、同一个接口传入参数不同,一个成功,一个有跨域问题、拦截器和@CrossOrigin和@Controller

Springboot拦截器中跨域失效的问题 一、概述 1、具体场景 起因&#xff1a; 同一个接口&#xff0c;传入不同参数进行值的修改时&#xff0c;一个成功&#xff0c;另一个竟然失败&#xff0c;而且是跨域问题拦截器内的request参数调用getHeader方法时&#xff0c;获取不到前端…

【Spring源码分析】Spring的启动流程源码解析

阅读此需阅读下面这些博客先【Spring源码分析】Bean的元数据和一些Spring的工具【Spring源码分析】BeanFactory系列接口解读【Spring源码分析】执行流程之非懒加载单例Bean的实例化逻辑【Spring源码分析】从源码角度去熟悉依赖注入&#xff08;一&#xff09;【Spring源码分析】…

应用层 HTTP协议(1)

回顾 前面我们说到了数据链路层,网络层IP协议,传输层的TCP/UDP协议一些知识点,现在让我们谈谈 应用层的HTTP协议的知识点. 这篇我们先从大局入手,仍然是对总体报文进行全局分析,再对细节报文进行拆解分析 版本 首先我们谈谈HTTP协议的版本 HTTP 0.9 (1991) HTTP 1.0 (1992 - 1…

二、OpenAI开发者快速入门

启动并运行OpenAI API OpenAI API 为开发者提供一个简单的接口&#xff0c;使其能够在他们的应用中创建一个智能层&#xff0c;由OpenAI最先进的模型提供支持。聊天补全端点为ChatGPT提示支持&#xff0c;一种简单的方法是&#xff1a;输入文本&#xff0c;使用GPT-4模型输出。…

Spring Boot3统一结果封装

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 封装目的 常用格式 定义返回结果枚举类 定义返回结果封装类 对返回结果封装 测试封装 前置条件 已…

【Linux】Linux下的基本指令

Linux下的基本指令 Linux 的操作特点&#xff1a;纯命令行ls 指令文件 pwd命令Linux的目录结构绝对路径 / 相对路径&#xff0c;我该怎么选择&#xff1f; cd指令touch指令mkdir指令&#xff08;重要&#xff09;rmdir指令rm 指令&#xff08;重要&#xff09;man指令&#xff…