Django基础3——视图函数

文章目录

  • 一、基本了解
    • 1.1 Django内置函数
    • 1.2 http请求流程
  • 二、HttpRequest对象(接受客户端请求)
    • 2.1 常用属性
    • 2.2 常用方法
    • 2.3 服务端接收URL参数
    • 2.4 QueryDict对象
    • 2.5 案例
      • 2.5.1 表单GET提交
      • 2.5.2 表单POST提交
      • 2.5.3 上传文件
  • 三、HttpResponse对象(返回给客户端请求)
    • 3.1 HttpResponse函数
    • 3.2 render函数
    • 3.3 redirect函数
    • 3.4 StreamingHttpResponse函数
    • 3.5 FileResponse函数
    • 3.6 JsonResponse函数

一、基本了解

1.1 Django内置函数

模块类型函数释义
httpHttpResponse:给客户端返回结果信息。
FileResponse:下载文件。
JsonResponse:返回JSON。
StreamingHttpResponse:响应可迭代对象。
shortcutsrender:响应HttpResponse对象,一个快捷函数。
redirect:跳转函数
viewsgeneric view 类视图继承的类。
decorators csrf csrf_exempt,csrf_protect 取消某视图CSRF防护。
contribadmin:内建管理后台。
auth.login:登录
auth. logout:退出。
auth.authenticate:用户信息认证。
auth.decorators login_required 登录认证装饰器。
auth. models.User:获取登录用户信息.
auth. models.BaseUserManager,AbstractBaseUser:扩展auth user表字段
confsettings:导入配置文件
dbconnection:连按数据库

1.2 http请求流程

http工作流程:

  1. 浏览器访问网址时,浏览器会建立TCP连接进行三次握手。浏览器作为客户端,web服务器作为服务端。
  2. 客户端会给服务端发送http请求(Request),get请求数据,post请求会携带一些数据给服务端去数据库进行查询。发送的http请求中会夹带着封装好的有关自己的数据,比如资源地址、浏览器信息等等。
  3. 服务端接收到请求后开始处理,处理完后对客户都安发送响应http请求(Response),该请求中包含处理的正文信息、响应状态码等等。
  4. 客户端接收到响应正文,网站一般是html文件内容,并展示到浏览器上,最后关闭tcp连接。
    在这里插入图片描述

http请求在django中的流程:

  1. 客户端输入IP地址进行查询访问,该请求会直接到django中,接着读取urls.py文件的路由规则。若能匹配到其中的规则,则将接收到请求信息发送给视图函数中的第一个位置参数;若不能匹配规则,则返回404。
  2. views.py接收到请求信息后,由HttpResponse模块进行响应请求,并发送给客户端。
    在这里插入图片描述

二、HttpRequest对象(接受客户端请求)

2.1 常用属性

  • Django会建立一个包含请求源数据的HttpRequest对象,当Django加载对应的视图时,HttpRequest
    对象将作为函数视图的第一个参数(request),每个视图负责返回一个HttpResponse对象。
    在这里插入图片描述
常用属性描述
request.scheme表示请求协议的字符串(http或https)
request.body原始HTTP请求正文
request.path一个字符串,请求页面的完整路径,不包含域名
request.method一个字符串,请求的HTTP方法,比如GET/POST等
request.GET GET请求所有参数,返回QueryDict类型,类似于字典
request.POST POST请求所有参数,返回QueryDict类型
request.COOKIES以字典格式返回Cookie
request.session可读写的类似于字典的对象,表示当前的会话
request.FILES所有上传的文件
request.META返回字典,包含所有的HTTP请求头。比如客户端IP,Referer等

1.示例代码。

##############################################################
1、devops/urls.py路由规则。
urlpatterns = [re_path('^request_detail/$',views.request_detail,name="request_detail")
]##############################################################
2、devops/views.py视图,定义函数。
def request_detail(request):   ##request用于接受客户端发来的请求信息。print(request.scheme)print(request.body)print(request.path)print(request.method)print(request.GET)     ##此行查询信息为空,是因为客户端没有传参,下文专门示例说。print(request.POST)    ##此行查询信息为空,是因为客户端没有传参,下文专门示例说。print(request.COOKIES)print(request.session)print(request.FILES)print(request.META)print(request.META["HTTP_HOST"])print(request.META["HTTP_USER_AGENT"])return HttpResponse("测试")   ##HttpResponse用于“礼貌”给客户端响应一个字符串,不然网页会返回404。

2.浏览器搜索,查看返回信息。

在这里插入图片描述

2.2 常用方法

方法描述
request.get_host()服务器主机地址和端口
request.get_port()服务器端口
request.get_full_path()请求页面完整路径和查询参数
request.get_raw_uri()请求页面URL所有信息,包括主机名、路径和参数

1.浏览器不传参查询。

##############################################################
1、devops/urls.py路由规则。
urlpatterns = [re_path('^request_detail/$',views.request_detail,name="request_detail")
]##############################################################
2、devops/views.py视图,定义函数。
def request_detail(request):   ##request用于接受客户端发来的请求信息。print(request.get_host())print(request.get_port())print(request.get_full_path())print(request.get_raw_uri())return HttpResponse("测试")   ##HttpResponse用于“礼貌”给客户端响应一个字符串,不然网页会返回404。

在这里插入图片描述
2.客户端传参查询。
在这里插入图片描述

2.3 服务端接收URL参数

  • 上面的2.2中有用到客户端传参查询,这就是条件查询,服务端根据客户端传过来的参数对数据库进行查询并返回结果。
  • 客户端使用?进行传参,参数一般都是以类似字典形式请求服务端,使用&符号对传入的多参数进行拼接。

1.服务端接受url参数方式。

##############################################################
1、devops/urls.py路由规则。
urlpatterns = [re_path('^request_detail/$',views.request_detail,name="request_detail")
]##############################################################
2、devops/views.py视图,定义函数。
def request_detail(request):   ##request用于接受客户端发来的请求信息。print(request.GET)   ##以字典形式返回客户端传入参数,方式一。print(request.GET["name"])    ##对传入的参数进行取值,方式二。print(request.GET.get("age"))   ##对传入的参数进行取值,方式三,推荐使用。return HttpResponse("测试")   ##HttpResponse用于“礼貌”给客户端响应一个字符串,不然网页会返回404。

2.浏览器传参异常时,使用GET.get方法查询可以避免程序出错。
在这里插入图片描述

2.4 QueryDict对象

  • request.GET和request.POST返回的都是一个QueryDict对象,类似于字典。
方法描述
req.get(key,default)返回key的值,如果key不存在返回default
req.items()返回迭代器,键值
req.values()返回迭代器,所有键的值
req.keys()返回所有键
req.getlist(key,deafult)返回key的值作为列表,如果key不存在返回default
req.lists()返回迭代器,所有键的值作为列表
req.dict()返回字典

1.区分get请求和post请求返回的参数。

##############################################################
1、devops/urls.py路由规则。
urlpatterns = [re_path('^request_detail/$',views.request_detail,name="request_detail")
]##############################################################
2、devops/views.py视图,定义函数。
def request_detail(request):   ##request用于接受客户端发来的请求信息。qingjun = request.GET   ##使用get请求返回。baimu = request.POST     ##使用post请求返回。print(type(qingjun))print(type(baimu))print(qingjun.get("name"))return HttpResponse("测试")   ##HttpResponse用于“礼貌”给客户端响应一个字符串,不然网页会返回404。

2.查看返回参数。
在这里插入图片描述

2.5 案例

request对象应用场景:

  • 获取客户端信息、请求页面情况。
  • 接收客户端上传的数据,例如文件。
  • 根据客户端特定信息做相应的处理,例如根据请求方法。

2.5.1 表单GET提交

  • 在网页上搜索关键字,客户端会默认根据关键字提交对应的参数给服务端,服务端在数据库进行查找返回对应参数的值给客户端,如此网页就会展示搜索结果。
  • 类似在百度上搜索,当在搜索框中输入关键字时,浏览器会自动给服务端提交对应的参数,服务端在数据库查找这些参数值,最后返回给客户端,展示在网页上。
    在这里插入图片描述

1.定义路由规则,修改devops/urls.py文件。

from django.contrib import admin
from django.urls import path,include,re_path
from devops import viewsurlpatterns = [re_path('^search/$',views.search,name="search")
]

2.定义视图,修改devops/views.py文件。

from django.shortcuts import render  ##渲染html页面
from django.shortcuts import HttpResponsedef search(request):print(request.GET)args_1 = request.GET.get('name')args_2 = request.GET.get('age')args_3 = request.GET.get('section')baimu = "你要搜索的名字为:%s;年龄为:%s;所在部门是:%s" %(args_1,args_2,args_3)print(result)return render(request, 'search.html', {'baimu': result})

3.定义html模板,创建templates/search.html文件。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>员工搜索</title>
</head>
<body>
<h1>搜索结果如下</h1>
<h3>{{ baimu }}</h3>
</body>
</html>

4.浏览器传参搜索,模拟百度搜索框功能,验证效果。
在这里插入图片描述

2.5.2 表单POST提交

  • 登录页面一般都是两个请求,一个get请求用于登陆页面显示,一个post请求用于账户密码登录框显示。

1.定义路由规则,修改devops/urls.py文件。

from django.urls import re_path
from devops import viewsurlpatterns = [re_path('^$', views.index),re_path('^login/$',views.login,name="login"),
]

2.定义视图,修改devops/views.py文件。

from django.shortcuts import render,redirect   ##导入函数redirect,def index(request):# return HttpResponse("首页")return render(request,'index.html')def login(request):if request.method == 'GET':return render(request, 'login.html')elif request.method == "POST":print(request.POST)username = request.POST.get("username")password = request.POST.get("password")# 查询数据库是否用户名和密码正确if username == 'qingjun' and password == 'citms':#跳转首页return redirect("/")else:msg = "用户名或密码错误 !"return render(request, 'login.html', {'msg': msg})

3.定义html模板,创建templates/login.html文件。

#####################################################################
##网页显示登录页面模板。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>平台登陆</title>
</head>
<body>
<h1>欢迎访问DevOps系统</h1>
<form action="{% url 'login' %}" method="post">   ##跟上提交路径,一般登录和提交都是同一个页面,所以这里还是指定的登录页面,默认的请求方式为get,修改成post用户名:<input type="text" name="username"><br>密码:<input type="text" name="password"><br><button type="submit">登录</button><span style="color:red;">{{ msg }}</span>    ##专门搞一个标签,若登录用户密码错误,视图函数那里应该要打印一行字符串用于提示用户,这里是把视图那里的提示字符串传到这里来了,展示到网页界面。
</form>
</body>
</html>#####################################################################
##网页登录成功跳转到首页的模板。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>网站首页</title>
</head>
<body>
<h1>博客首页</h1>
</body>
</html>

4.禁用django内部功能,防止网页因为安全问题访问不到内容。
在这里插入图片描述
5.访问网页,验证效果。
在这里插入图片描述
在这里插入图片描述

2.5.3 上传文件

  • 修改头像功能。

1.定义路由规则,修改devops/urls.py文件。

from django.urls import re_pathurlpatterns = [re_path('^user_upload/$',views.user_upload,name="user_upload"),
]

2.定义视图,修改devops/views.py文件。

from django.shortcuts import renderdef user_upload(request):if request.method == "GET":return render(request, 'upload.html')elif request.method == "POST":print(request.FILES)    ##获取上传的文件。obj = request.FILES.get('touxiang')  ##获取上传过来的文件对象。print(type(obj),obj.name)import osfile_path = os.path.join('upload', obj.name)with open(file_path, 'wb') as f:for i in obj.chunks():    ##django内置函数,循环接收文件块。f.write(i)    ##写入到本地文件。msg = "上传成功!"return render(request, 'upload.html',{"msg": msg})

3.定义html模板,创建templates/upload.html文件。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上传文件</title>
</head>
<body>
<form action="{% url 'user_upload' %}" method="post", enctype="multipart/form-data"><input type="file", name="touxiang"><button type="submit">提交</button><br><span style="color:red;">{{ msg }}</span>
</form>
</body>
</html>

4.创建图片保存目录,一般与项目应用同级,我这里创建为devops/upload目录。
5.访问web,上传本地照片。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、HttpResponse对象(返回给客户端请求)

3.1 HttpResponse函数

函数作用:

  • 给浏览器返回数据

语法:

  • HTTPResponse(content=响应体,content_type=响应体数据类型,status=状态码)

1.返回html模板内容给客户端,不推荐使用,因为html模板内容较多,一般都是使用render函数返回。

###############################################################
1、devops/urls.py文件。
from django.urls import path,include,re_pathurlpatterns = [path('apm/', include('apm.urls')),
]###############################################################
2、devops/apm/urls.py文件。
from django.urls import path
from apm import viewsurlpatterns = [path('qingjun/', views.wuhan),
]###############################################################
3、devops/apm/views.py文件。
from django.shortcuts import HttpResponsedef wuhan(request):# return HttpResponse("这是第一个功能首页!!")    ##返回字符串回应客户端。# return HttpResponse("<h1>hello</h1>")   ##返回html模板内容给客户端,方式一。a = HttpResponse("<h1>hello1</h1>")    ##方式二,可以添加内容返回给客户端,比如状态码等等。return a

在这里插入图片描述
2.设置响应头,服务端给前端响应内容。

###############################################################
1、devops/urls.py文件。
from django.urls import path,include,re_pathurlpatterns = [path('apm/', include('apm.urls')),
]###############################################################
2、devops/apm/urls.py文件。
from django.urls import path
from apm import viewsurlpatterns = [path('qingjun/', views.wuhan),
]###############################################################
3、devops/apm/views.py文件。
from django.shortcuts import HttpResponsedef wuhan(request):# return HttpResponse("这是第一个功能首页!!")# return HttpResponse("<h1>hello</h1>")   ##返回html模板内容给客户端,方式一。a = HttpResponse("<h1>hello1</h1>")    ##方式二,可以添加内容返回给客户端,比如状态码等等。a["name"] = "zhangsan"    ##响应内容给客户端。a.status_code = 999     ##自定义响应状态码。return a

在这里插入图片描述

3.2 render函数

函数作用:

  • render指定模板,返回一个渲染后的HttpResponse对象。

语法:

  • render(request, template_name, context=None, content_type=None, status=None, using=None)
  • request:固定参数,django封装的请求
  • template_name:返回html模板
  • context:传入模板中的内容,用于渲染模板,默认空字典

1.返回渲染后的HttpResponse对象,再展示到前端网页。

###############################################################
1、devops/urls.py文件。
from django.urls import re_path
from devops import viewsurlpatterns = [re_path('^search/$',views.search,name="search"),
]
###############################################################
2、devops/views.py文件。
from django.shortcuts import renderdef search(request):print(request.GET)args_1 = request.GET.get('name')args_2 = request.GET.get('age')args_3 = request.GET.get('section')result = "你要搜索的名字为:%s;年龄为:%s;所在部门是:%s" %(args_1,args_2,args_3)print(result)return render(request, 'search.html', {'baimu': result})
###############################################################
3、templates/search.html模板。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>员工搜索</title>
</head>
<body>
<h1>搜索结果如下</h1>
<h3>{{ baimu }}</h3>
</body>
</html>

2.网页访问,查看效果。
在这里插入图片描述

3.3 redirect函数

函数作用:

  • 重定向,发起第二次请求。
  • 上文中的登录案例就用到该函数,登陆成功后跳转到其他页面。

语法:

  • redirect(to, *args, **kwargs)
  • 参数可以是:一个视图、一个绝对的或者相对的URL、一个模型,对象是重定向的URL。

1.转发给URL,可以写绝对路径,也可以写相对路径。
在这里插入图片描述

2.转发给视图。
在这里插入图片描述
在这里插入图片描述

3.4 StreamingHttpResponse函数

函数作用:

  • 流式响应可迭代对象,节省内存资源,适用大数据传输情景。
  • HttpResponse函数可以给客户端返回数据,Django是先把这个数据保存在内存中,客户端接收到数据后再释放内存,倘若返回数据很大,就很消耗内存资源,这时就可以使用StreamingHttpResponse函数进行流式响应数据。
  • 如下示例,下载图片到本地,当下载成功后用StreamingHttpResponse函数返回给客户端信息。

1.上传图片功能,使用render对html模板渲染,再以HttpResponse对象返回给客户端。

##############################################################
1、定义路由规则,修改devops/urls.py文件。
from django.urls import re_pathurlpatterns = [re_path('^user_upload/$',views.user_upload,name="user_upload"),
]
##############################################################
2.定义视图,修改devops/views.py文件。
from django.shortcuts import renderdef user_upload(request):if request.method == "GET":return render(request, 'upload.html')elif request.method == "POST":print(request.FILES)    ##获取上传的文件。obj = request.FILES.get('touxiang')  ##获取上传过来的文件对象。print(type(obj),obj.name)import osfile_path = os.path.join('upload', obj.name)with open(file_path, 'wb') as f:for i in obj.chunks():    ##django内置函数,循环接收文件块。f.write(i)    ##写入到本地文件。msg = "上传成功!"return render(request, 'upload.html',{"msg": msg})##############################################################
3.定义html模板,创建templates/upload.html文件。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上传文件</title>
</head>
<body>
<form action="{% url 'user_upload' %}" method="post", enctype="multipart/form-data"><input type="file", name="touxiang"><button type="submit">提交</button><br><span style="color:red;">{{ msg }}</span>
</form>
</body>
</html>
##############################################################
4.创建图片保存目录,一般与项目应用同级,我这里创建为devops/upload目录。
5.访问web,上传本地照片2.jpg。

在这里插入图片描述

2.下载图片到本地,以StreamingHttpResponse对象返回给客户端。

##############################################################
1、定义路由规则,修改devops/urls.py文件。
from django.shortcuts import render
from django.urls import re_path
from devops import viewsurlpatterns = [re_path('^user_upload/$',views.user_upload,name="user_upload"),re_path('^download/$', views.download),re_path(r'^down_file/(?P<filename>.*)$', views.down_file, name="down_file")
]##############################################################
2.定义视图,修改devops/views.py文件。
from django.http import StreamingHttpResponse
import osdef download(request):   ##第一个视图,获取文件下载列表,并使用render渲染到前端展示能下载的图片有哪些。file_list = os.listdir('upload')       ##获取devops/upload目录下的图片列表。return render(request, "download.html", {'file_list': file_list})     ##将图片列表渲染展示到前端。def down_file(request, filename):    ##网页打开路径download/2.jpgfile_path = os.path.join('upload', filename)      ##再转发到upload/2.jpg进行下载。response = StreamingHttpResponse(open(file_path, 'rb'))   ##函数打开文件读取,并以块的方式给客户端流式响应。response['Content-Type'] = 'application/octet-stream'   ##添加了一个流式类型。response['Content-Disposition'] = 'attachment; filename=%s' %(os.path.basename(file_path))   ##前端下载时,保留下载图片名称。return response##############################################################
3.定义html模板,创建templates/download.html文件。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>下载文件</title>
</head>
<body>{% for i in file_list %}<p><a href="{% url 'down_file' i %}">{{ i }}</a></p>{# url拼接结果 :/down_file/2.jgp #){% endfor %}
</body>
</html>

在这里插入图片描述

3.5 FileResponse函数

函数作用:

  • 与StreamingHttpResponse函数不同,该函数更适合下载小点的文件。
  • 适用方法和StreamingHttpResponse相同。

1.使用FileResponse函数下载图片写法。

############################################################
##修改devops/views.py文件,只需将StreamingHttpResponse函数改成FileResponse函数。
def download(request):file_list = os.listdir('upload')return render(request, "download.html", {'file_list': file_list})
def down_file(request, filename):file_path = os.path.join('upload', filename)response = FileResponse(open(file_path, 'rb'))     ##修改函数。response['Content-Type'] = 'application/octet-stream'response['Content-Disposition'] = 'attachment; filename=%s' %(os.path.basename(file_path))return response

2.查看下载结果。
在这里插入图片描述

3.6 JsonResponse函数

函数作用:

  • 将python对象响应成JSON对象,方便别人进行使用。
  • 与json.dumps()函数作用相同,只是更加快捷一点。

1.返回一个json对象。

##############################################################
1、定义路由规则,修改devops/urls.py文件。
from django.urls import re_path
from devops import viewsurlpatterns = [re_path('^json/$',views.json)
]##############################################################
2.定义视图,修改devops/views.py文件。
from django.http import JsonResponse
def json(request):a = {'name':'wangwu', 'age':22}return JsonResponse(a)

2.网页访问,查看结果。
在这里插入图片描述

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

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

相关文章

【VRTK4.0运动专题】轴移动AxisMove(真实身体的移动)

文章目录 1、概览2、释义3、属性设置 1、概览 2、释义 “竖直轴”控制的行为“水平轴”控制的行为1Vertical-Slide 滑动Horizontal-Slide 滑动2Vertical-Slide 滑动Horizontal-SmoothRotate 转动3Vertical-Slide 滑动Horizontal-SnapRotate 转动&#xff08;不连续&#xff09…

PHP8函数的引用和取消-PHP8知识详解

今天分享的是php8函数的引用和取消&#xff0c;不过在PHP官方的参考手册中&#xff0c;已经删除了此类教程。 1、函数的引用 在PHP8中不管是自定义函数还是内置函数&#xff0c;都可以直接简单的通过函数名调佣。函数的引用大致有下面3种&#xff1a; 1.1、如果是PHP的内置函…

W6100-EVB-PICO进行UDP组播数据回环测试(九)

前言 上一章我们用我们的开发板作为UDP客户端连接服务器进行数据回环测试&#xff0c;那么本章我们进行UDP组播数据回环测试。 什么是UDP组播&#xff1f; 组播是主机间一对多的通讯模式&#xff0c; 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将…

OpenEuler 安装mysql

下载安装包 建议直接使用在openEuler官方编译移植过的mysql-5.7.21系列软件包 参考&#xff1a;操作系统迁移实战之在openEuler上部署MySQL数据库 | 数据库迁移方案 | openEuler社区官网 MySQL 5.7.21 移植指南&#xff08;openEuler 20.03 LTS SP1&#xff09; | 数据库移植…

uniapp启动微信小程序开发者工具报错Enable IDE Service (y/N) 

下载安装好微信小程序开发者路径 配置好启动路径后 报错[微信小程序开发者工具] ? Enable IDE Service (y/N) [27D[27C 解决办法 因为微信开发者工具的服务端口号没有打开

HTML之VSCode简单配置与创建

目录 插件下载 然后输入源码&#xff1a; 使用 效果 插件下载 下载这个插件后可以直接运行&#xff1a; 然后创建一个文件&#xff1a; 然后输入源码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…

【HTML】基础语法讲解

基础语法 1. HTML 结构1.1 认识HTML标签1.2 HTML 文件基本结构1.3 标签层次结构1.4 快速生成代码框架 2. HTML 常见标签2.1 注释标签2.2 标题标签:h1-h62.3 段落标签:p2.4 <br>换行标签2.5 格式化标签2.6 图片标签&#xff1a;img2.7 超链接标签&#xff1a;a2.8 表格标签…

ARTS打卡第二周之链表环的检测、gdb中disassemble的使用、底层学习建议、学习分享

Algorithm 题目&#xff1a;链表中环的检测 自己的分析见博客《检测链表中是否存在环》 Review disassemble command是我读的一篇英语文章&#xff0c;这篇文章主要是介绍gdb反汇编命令的使用和参数。自己为了能够演示这篇文章里边的内容&#xff0c;特意自己使用汇编语言编…

浅析Linux 物理内存外碎片化

本文出现的内核代码来自Linux4.19&#xff0c;如果有兴趣&#xff0c;读者可以配合代码阅读本文。 一、Linux物理内存外碎片化概述 什么是Linux物理内存碎片化&#xff1f;Linux物理内存碎片化包括两种&#xff1a; 1.物理内存内碎片&#xff1a;指分配给用户的内存空间中未…

微服务中间件--MQ服务异步通信

MQ服务异步通信 MQ服务异步通信a.消息可靠性1) 生产者消息确认2) 消息持久化3) 消费者消息确认4) 消费者失败重试4.a) 本地重试4.b) 失败策略 b.死信交换机1) 初识死信交换机2) TTL3) 延迟队列a) 安装延迟队列插件b) SpringAMQP使用延迟队列插件 c.惰性队列1) 消息堆积问题2) 惰…

如何使用CSS实现一个自适应两栏布局,其中一栏固定宽度,另一栏自适应宽度?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用Float属性⭐ 使用Flexbox布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感…

leetcode875. 爱吃香蕉的珂珂(java)

二分查找 爱吃香蕉的珂珂二分查找 上期经典 爱吃香蕉的珂珂 难度 - 中等 LC - 875.爱吃香蕉的珂珂 珂珂喜欢吃香蕉。这里有 n 堆香蕉&#xff0c;第 i 堆中有 piles[i] 根香蕉。警卫已经离开了&#xff0c;将在 h 小时后回来。 珂珂可以决定她吃香蕉的速度 k &#xff08;单位&…

MATLAB软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 MATLAB是Matrix Laboratory的缩写&#xff0c;是一款由美国MathWorks公司开发的商业数学软件。它主要用于进行数值计算、数据分析、可视化、算法开发、模拟仿真等多个领域。MATLAB具有高度的灵活性和开放性&#xff0c;可以为用…

BMP图片读写实践:rgb转bgr

本实理论上支持24位图和32位图&#xff0c;实际上只测试了24位。原理很简单&#xff0c;就是RGB中的蓝色字节和红色字节交换。 测试代码1&#xff1a; #include <stdio.h> #include <unistd.h> #include <sys/stat.h> #include <stdlib.h> #include &l…

[QT]设置程序仅打开一个,再打开就唤醒已打开程序的窗口

需求&#xff1a;speedcrunch 这个软件是开源的计算器软件。配合launch类软件使用时&#xff0c;忘记关闭就经常很多窗口&#xff0c;强迫症&#xff0c;从网上搜索对版本进行了修改。 #include "gui/mainwindow.h"#include <QCoreApplication> #include <…

ubuntu22.04.1-live的vm虚拟机扩展磁盘

1、虚拟机分配硬盘100G&#xff0c;进系统df -h根目录只有50G 2、查看所有块设备 lsblk 3、 查看卷信息vgdisplay 4、在原有基础上增加49G lvextend -L 49G /dev/ubuntu-vg/ubuntu-lv 5、调整大小 resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

科大讯飞永久免费GPT入口来了!!!

讯飞GPT永久免费使用入口注册链接&#xff1a;讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞。 登录讯飞账号后&#xff0c;点击进入体验。 进入体验页面后&#xff0c;选择景点推荐。 笔者让其写一篇关于讯飞GPT介绍的文案。 讯飞GPT是一款由讯飞公司推出的人工智能语…

【C++多线程】C++11互斥锁和条件变量实现生产者消费者模型

先看几个问题&#xff0c;第三个问题可以先看代码然后再理解 Q1&#xff1a;临界区在哪 A1: 队列中元素在「生产者生产&#xff08;push&#xff09;」和「消费者消费&#xff08;pop&#xff09;」时就是临界区 Q2&#xff1a;同步操作在哪 A2: 很显然&#xff0c;队列只有…

保护隐私的第一步:从更新浏览器开始

当今社会已经进入了数字化和网络化的时代&#xff0c;而网络安全问题也日益突显。随着互联网在我们生活中的不断渗透&#xff0c;网络威胁变得愈发普遍和隐蔽。在这样的背景下&#xff0c;网络浏览器作为人们访问互联网的主要工具之一&#xff0c;不仅为我们提供了便捷的上网方…

【QT】ComboBox的使用(14)

ComboBox这个控件我常用于多文本的储存、调用&#xff0c;正如他的中文意思为&#xff1a;下拉列表框。 下拉列表框&#xff1a;字面意思就是一个多文本的列表框&#xff0c;今天来看下如何使用ComboBox这个控件。 一.环境配置 1.python 3.7.8 可直接进入官网下载安装&…