Laravel+API 接口
Laravel+API 接口
网课连接:BIlibili.
中文文档.
1.RestFul Api编码风格
一、API设计
-
修改hosts,
C:\Windows\System32\drivers\etc\hosts
,增加127.0.0.1 api.lv8.com # Laravel 框架
用这个域名来测试(推荐规范) -
在命令行中使用
php artisan serve --host api.lv8.com
-
在
.env
和config/database.php
中配置mysql数据库等服务用的wamp;注意这里的
database.php
需要配置 prefix属性'mysql' => ['driver' => 'mysql','url' => env('DATABASE_URL'),'host' => env('DB_HOST', '127.0.0.1'),'port' => env('DB_PORT', '3306'),'database' => env('DB_DATABASE', 'forge'),'username' => env('DB_USERNAME', 'forge'),'password' => env('DB_PASSWORD', ''),'unix_socket' => env('DB_SOCKET', ''),'charset' => 'utf8mb4','collation' => 'utf8mb4_unicode_ci','prefix' => 'laravel_', # 重点'prefix_indexes' => true,'strict' => true,'engine' => null,'options' => extension_loaded('pdo_mysql') ? array_filter([PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),]) : [],],
-
安装Postman,测试接口,
https://cdn.liyanhui.com/data.json
二、RestFul
-
RestFul Api
是一种设计风格,推荐的一种规范,有助于统一协同和管理; -
这里提供两个网址
RESTful API
RESTful API 设计指南
状态码使用规范
2.资源控制器和路由
一、资源控制器
- 创建一个API-Controller
php artisan make:controller UserController --api
二、资源路由
-
创建好 API 资源控制器之后,在
route/web.php
配置相关api资源路由;Route::apiResourcce('users', 'UserController');
HTTP类型 | 路由URI | 控制器方法 | 路由命名 | 描述 |
---|---|---|---|---|
GET | users | index() | users.index | 获取数据列表 |
POST | users | store() | users.store | 创建页的接受处理 |
GET | users/{user} | show() | users.show | 获得一条数据 |
PUT/PATCH | users/{user} | update() | users.update | 从编辑页中接受处理 |
DELETE | users/{user} | destroy() | users.destroy | 删除一条数据 |
PS:可以通过
php artisan route:list
来查看资源路由列表
3.安装Laravel8.x
-
使用
composer
创建composer create-project --prefer-dist laravel/laravel blog
-
提前配置好 hosts 文件,然后运行下面命令
php artisan serve --host www.lv8.com
-
创建一个API-Controller
php artisan make:controller UserController --api
在UserController 中的 index 写个
return 'index';
. -
然后再
routes/api.php
中引入API-Controlleruse App\Http\Controllers\UserController;Route::apiResourcce('users', UserController::class);
-
检查一下路由是否有效
php artisan route:list
现在是可以请求
www.lv8.com:8000/api/users
4.生成标准API
专门创建一个API抽象类,并继承调用它。
生成标准API
-
创建一个抽象类
BaseController
实现一个生成API的方法,让控制器继承;php artisan make:controller BaseController
/*** Class BaseController* @package App\Http\Controllers* api 基类*/ abstract class BaseController extends Controller {// 生成api方法protected function create($data, $msg = '', $code = 200){// 返回api结果$result = [// 状态码'code' => $code,//自定义信息'msg' => $msg,// 数据返回'data' => $data];return response($result, $code);} }
-
在
UserController
中继承上面的抽象类class UserController extends BaseController {public function index(){return $this->create([1,2,3], '数据获取成功',200); // 当前类是 BaseController 的子类,create是继承后的方法 }
继承后直接使用
$this
来调用抽象类的方法
5.数据列表和分页
数据列表返回
-
创建一个
Model/User
,用于数据库模型处理,用命令生成;php artisan make:model api/User
// 空模型即可 class User extends Model {use HasFactory; }
-
注意配置数据库连接,账号、密码、数据库名、前缀等
-
使用模型方式调用数据库链接,并返回数据
// 在 UserController 中 use App\Models\api\User;public function index() {$reslut = User::select('id', 'username', 'email')->get(); // 这里只要了三个字段return $this->create($reslut, '数据获取成功',200);// 使用 paginate 来进行分页 // return $this->create(User::select('id', 'username', 'email')->paginate(5), '数据获取成功',200); // 这里是前五条数据 // return $this->create(User::select('id', 'username', 'email')->simplePaginate(5), '数据获取成功',200); // 简洁版 }
注意:这里就已经连接数据库了。
分页操作:没有太多需求的话,一般使用简单形式
simplePaginate
.测试接口:
http://www.lv8.com:8000/api/users?page=2
6.配置404错误
首先规范一下错误状态的状态码,具体说明如下:
- 200(OK)-表示已在响应中发出
- 204(无内容) - 资源有空表示,请求成功,但无数据
- 301(Moved Permanently) - 资源的URI已被更新
- 303 (See Other) -其他(如,负载均衡)
- 304 (not modified) -资源未更改(缓存)
- 400 (bad request)- 指代坏请求(如,参数错误)
- 404 (not found)- 资源不存在(找不到页面)
- 406 (not acceptable)- 服务端不支持所需表示
- 500 (internal server error)- 通用错误响应
- 503 (Service Unavailable)- 服务端当前无法处理请求
框架已经非常智能的提供了404的处理,只要固定路径配置 404 错误页即可;
覆盖掉系统自带的404:resources/views/errors/404.blade.php
<?php
/** API格式* path:resources/views/errors/404.blade.php* */
// 设置 HTTP 状态码为 404
http_response_code(404);// 设置响应头为 JSON 格式
header('Content-Type: application/json');$result = [// 状态码'code' => 404,// 自定义信息'msg' => '资源不存在~',// 数据返回, 返回一个空'data' => []
];echo json_encode($result); // 必须要加 json_encode 格式转换
7.单数据处理及错误
-
资源控制器中 show,表示获取单一数据,传递id参数即可
-
那么,我们在show 方法里构造获取方式,具体如下:
位置:
UserController.php
public function show($id) {// 判断id 合法if(!is_numeric($id)){return $this->create([], 'id参数错误!!!', 400);}// 获取数据$result = User::select('id', 'username', 'email')->find($id); // 通过id查找// 判断是否为空if(empty($result)){return $this->create([], '请求成功,但无数据~', 204);} else {return $this->create($result, '数据获取成功~', 200);} }
PS:路由地址为:
http://www.lv8.com:8000/api/users/20
注意,需要把 BaseController
中的 return
修改一下
class BaseController extends Controller
{// 生成api方法protected function create($data, $msg = '', $code = 200){// 返回api结果$result = [// 状态码'code' => $code,// 自定义信息'msg' => $msg,// 数据返回'data' => $data];return response($result);}
}
8.新增数据API处理
- 新增一条数据,首先要进行验证,这里找事服务器端的,用验证器即可
- 使用Postman来模拟新增时,选择Body中的form-data(表单),并用POST;
添加数据函数
public function store(Request $request) // post 进入
{// 获取提交数据$data = $request->all();// 数据验证,required 不可为空, unique 唯一,$validator = Validator::make($data, ['username' => 'required|unique:users|min:2|max:10', // 2 < length < 10'password' => 'required|min:6', // x > 6]);// 验证并提示if ($validator->fails()) { // fails 如果发生错误
// return $this->create([], "提交的数据有误~", 400);return $this->create([], $validator->errors(), 400); // $validator->errors() 是框架自带的错误提示英文} else {// 写入数据$addData = User::create($data);// 存在,说明成功了if ($addData) {return $this->create($data, '数据添加成功~', 200);}}return $data;// 数据验证
// $validator
}
数据验证
规则 | 说明 | 示例 |
---|---|---|
required | 字段必填(非空) | 'email' => 'required' |
nullable | 允许字段为 null | 'phone' => 'nullable' |
string | 必须是字符串类型 | 'name' => 'string' |
min:value | 最小长度/值(字符串、数组、数值) | 'password' => 'min:6' |
max:value | 最大长度/值 | 'username' => 'max:20' |
email | 验证邮箱格式 | 'email' => 'email' |
unique:table | 数据库唯一性校验 | 'username' => 'unique:users' |
exists:table | 值必须存在于数据库 | 'role' => 'exists:roles,name' |
confirmed | 与 字段名_confirmation 匹配 | 'password' => 'confirmed' |
in:value1,value2 | 值必须在指定列表内 | 'status' => 'in:active,pending' |
numeric | 必须是数字 | 'age' => 'numeric' |
date | 验证日期格式(如 Y-m-d ) | 'birthday' => 'date' |
// 用户名(必填+唯一+长度限制)
'username' => 'required|unique:users|min:2|max:10',// 密码(必填+最小长度+确认)
'password' => 'required|min:6|confirmed'// 邮箱(必填+格式验证)
'email' => 'required|email'
⚡ 快捷记忆口诀
-
必填非空:
required
-
数据类型:
string
、numeric
、integer
-
长度控制:
min
/max
/size
-
唯一性:
unique
(数据库校验) -
格式验证:
email
、url
、date
-
二次确认:
confirmed
(如密码确认)
许可赋值 App\Models\api;
<?phpnamespace App\Models\api;use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;class User extends Model
{use HasFactory;// 许可赋值protected $fillable = ['username', 'password','email', 'details'];
}
9.删除数据API处理
删除API DELETE
- API删除,使用DELETE动词既可
public function destroy($id)
{// 判断id 合法if(!is_numeric($id)){return $this->create([], 'id参数错误!!!', 400);}// 查找数据,并删除 find$users = User::find($id);// 删除的数据不存在if(empty($users)){return $this->create([], '数据不存在~', 400);}// 执行删除返回if($users->delete()){return $this->create([], '数据删除成功~', 200);}return $this->create([], '请求成功,删除失败~', 200);
}
使用DELETE
方式,请求地址:http://www.lv8.com:8000/api/users/20
Controller
.
<?phpnamespace App\Http\Controllers;use App\Models\api\client;
use Illuminate\Http\Request;class ClientController extends BaseController
{/*** Display a listing of the resource.** @return \Illuminate\Http\Response*/public function index(){// 获取全部数据$data = client::select('id', 'email', 'password_hash', 'phone_number', 'first_name', 'last_name')->get();return $this->create($data, 'success', 200);}/*** Store a newly created resource in storage.** @param \Illuminate\Http\Request $request* @return \Illuminate\Http\Response*/public function store(Request $request){// 验证请求数据$validatedData = $request->validate(['email' => 'required|email|unique:clients','password_hash' => 'required','phone_number' => 'required','first_name' => 'required','last_name' => 'required']);// 创建新的客户端记录$client = client::create($validatedData);return $this->create($client, 'Client created successfully', 201);}/*** Display the specified resource.** @param int $id* @return \Illuminate\Http\Response*/public function show($id){// 单数据处理// 判断id是否合法if(!is_numeric($id)){return $this->create([], 'id参数错误~', 400);}// 获取数据$reslut = client::select('id', 'email', 'password_hash', 'phone_number', 'first_name', 'last_name')->find($id);// 判断是否为空if(empty($reslut)){return $this->create([], '请求成功但无数据~', 200);}return $this->create($reslut, 'success', 200);}/*** Update the specified resource in storage.** @param \Illuminate\Http\Request $request* @param int $id* @return \Illuminate\Http\Response*/public function update(Request $request, $id){// 判断id是否合法if(!is_numeric($id)){return $this->create([], 'id参数错误~', 400);}// 查找要更新的客户端记录$client = client::find($id);if (!$client) {return $this->create([], 'Client not found', 404);}// 验证请求数据$validatedData = $request->validate(['email' => 'email|unique:clients,email,'.$id,'password_hash' => 'sometimes','phone_number' => 'sometimes','first_name' => 'sometimes','last_name' => 'sometimes']);// 更新客户端记录$client->update($validatedData);return $this->create($client, 'Client updated successfully', 200);}/*** Remove the specified resource from storage.** @param int $id* @return \Illuminate\Http\Response*/public function destroy($id){// 判断id是否合法if(!is_numeric($id)){return $this->create([], 'id参数错误~', 400);}// 查找要删除的客户端记录$client = client::find($id);if (!$client) {return $this->create([], 'Client not found', 404);}// 删除客户端记录$client->delete();return $this->create([], 'Client deleted successfully', 200);}
}
axios
,用例
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Title</title><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><style type="text/css">* {padding: 0;margin: 0;}table {font-size: 18px;border-collapse: collapse;width: 700px;height: 80px;margin: 0 auto;text-align: center;}th {width: 100px;height: 68px;padding: 8px 12px;background: yellowgreen;}table,th,td {border: 1px solid yellowgreen;}</style>
</head>
<body><h1>表格</h1><table class="table"><tr><th>id</th><th>username</th><th>gender</th><th>email</th><th>price</th></tr></table><script type="text/javascript">const table = document.querySelector(".table>tbody");let data_str = table.innerHTML;axios({method: 'get',url: 'https://cdn.liyanhui.com/data.json',// data: {}}).then((res) => {// data = res.data;res.data.forEach((value) =>{data_str += `<tr><td>${value.id}</td><td>${value.username}</td><td>${value.gender}</td><td>${value.email}</td><td>${value.price}</td></tr>`;})table.innerHTML = data_str;});</script>
</body>
</html>
相关文章:
Laravel+API 接口
LaravelAPI 接口 网课连接:BIlibili. 中文文档. 1.RestFul Api编码风格 一、API设计 修改hosts,C:\Windows\System32\drivers\etc\hosts,增加127.0.0.1 api.lv8.com # Laravel 框架 用这个域名来测试(推荐规范) 在…...
在 Ubuntu 上离线安装 ClickHouse
在 Ubuntu 上离线安装 ClickHouse 的步骤如下: 一.安装验证 # 检查服务状态 sudo systemctl status clickhouse-server #删除默认文件 sudo rm /etc/clickhouse-server/users.d/default-password.xml # 使用客户端连接 clickhouse-client --password...
【AI微信小程序开发】掷骰子小程序项目代码:自设骰子数量和动画(含完整前端代码)
系列文章目录 【AI微信小程序开发】AI减脂菜谱小程序项目代码:根据用户身高/体重等信息定制菜谱(含完整前端+后端代码)【AI微信小程序开发】AI菜谱推荐小程序项目代码:根据剩余食材智能生成菜谱(含完整前端+后端代码)【AI微信小程序开发】图片工具小程序项目代码:图片压…...
Linux-02-VIM和VI编辑器
第一节:什么是VI和VIM编辑器: VI是Unix和类Unix操作系统中出现的通用的文本编辑器。VIM是从VI发展出来的一个性能更强大的文本编辑器可以主动的以字体颜色辨别语法的正确性,方便程序设计,VIM和VI编辑器完全兼容。使用:vi xxx文件 或者vim xxx文件,简单来说就是用来编辑文件的一…...
同为科技 智能PDU产品选型介绍-EN10/G801FR
随着各行业对数据中心机房重视程度的不断提高, 加强机柜微环境及电源计量、监控和管理则十分必要。在新型微模块化数据中心供配电系统建设中,UPS电源、智能PDU、监控管理系统、资产管理等产品早已成为IDC机房不可或缺的部分。其中,智能PDU通过…...
NS-SWIFT微调Qwen3
目录 一、NS-SWIFT简介 二、Qwen3简介 三、微调Qwen3 1、安装NS-SWIFT环境 2、准备训练数据 3、Lora微调 4、GROP训练 5、Megatron并行训练 一、NS-SWIFT简介 SWIFT(Scalable lightWeight Infrastructure for Fine-Tuning)是魔搭ModelScope开源社…...
借 AI 热潮,深挖 [风车 AI ] 为跨境电商打造的图片翻译黑科技
家人们,这几年 AI 技术简直像坐了火箭一样飞速发展,生活里、工作中到处都能看到它的身影。对咱们跨境行业来说,语言翻译一直是个让人头疼的大问题。今天咱就借着这股 AI 热潮,好好深挖一下风车 AI 为跨境打造的那些超厉害的翻译黑…...
uni-app 中封装全局音频播放器
在开发移动应用时,音频播放功能是一个常见的需求。无论是背景音乐、音效还是语音消息,音频播放都需要一个稳定且易于管理的解决方案。在 uni-app 中,虽然原生提供了 uni.createInnerAudioContext 方法用于音频播放,但直接使用它可…...
Uniapp:设置TabBar
目录 一、setTabBarBadge:增加文本二、removeTabBarBadge:移除文本三、showTabBarRedDot:显示红点四、hideTabBarRedDot:隐藏红点一、setTabBarBadge:增加文本 为 tabBar 某一项的右上角添加文本。 uni.setTabBarBadge({index: 0,text: 1 })参数类型必填说明indexNumber…...
如何查看k8s获取系统是否清理过docker镜像
k8s集群某个节点down掉后,pod就会漂移到其他节点,但是在该节点却又执行了拉取镜像操作,明明该节点之前部署过该容器的,不知为什么又拉取了一次镜像(镜像拉取配置的优先使用本地),所以怀疑是触发…...
【Linux网络】深入解析I/O多路转接 - Select
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
如何解决 Xcode 签名证书和 Provisioning Profile 过期问题
在 iOS 应用开发过程中,签名证书和 Provisioning Profile 是确保应用安全性和合法性的关键组件。然而,当这些证书或配置文件过期时,开发者可能会遇到编译或归档失败的问题。本文将详细介绍如何解决 Xcode 中“iOS Distribution”证书未找到和…...
[C++]C++20协程的原理
文章目录 协程的状态机Promise 对象挂起和恢复机制协程的执行流程示例代码分析 C 协程是 C20 引入的一项重要特性,它提供了一种更简洁、高效的异步编程方式。下面从协程的状态机、Promise 对象、挂起和恢复机制等方面介绍其底层实现原理。 协程的状态机 从底层角度…...
Oracle OCP证书有效期是三年?
这一段时间,网上经常传出消息Oracle OCM认证证书有效期为三年,其实这个假消息,通过博睿谷与Oracle官方人员确认,OCP认证证书有效期是永久的。 OCP证书本身永久有效,但老版本的OCP证书代表着更多的项目经验,…...
2025.4.29_STM32_看门狗WDG
1.WDG简介 大概意思就是给看门狗设置一个时间范围,在这个范围内必须喂狗(重置定时器),这个操作必须一直执行,比如看门狗的的时间范围是1-2秒,我们就必须间隔1-2秒就喂一次狗,否则它自减到0时就会重置电路,相…...
基于Java,SpringBoot,HTML水文水质监测预警系统设计
摘要 随着水资源管理需求的日益增长,构建高效、精准的水文监测预警系统至关重要。本文设计并实现了一套基于 Java、SpringBoot 和 HTML 技术的水文监测预警系统。系统采用 Java 语言与 SpringBoot 框架搭建后端服务,利用其强大的业务逻辑处理能力与高效…...
Qt开发:JSON字符串的序列化和反序列化
文章目录 一、构建和解析单个JSON对象二、JSON对象中嵌套多个JSON对象三、JSON对象中组建多个数组对象四、构建和解析数组对象 一、构建和解析单个JSON对象 1.1 JSON对象的构建 使用key-value形式生成JSON对象 #include <QJsonObject> #include <QJsonDocument> …...
第10次:电商项目配置开发环境
本次内容主要为给整个电商项目配置好开发环境,包括如下环节: 创建电商项目xiaoyu_mall,Django版本默认是最新的大版本5.2配置应用目录,因项目会涉及到多个应用,为保证项目结构清晰,将在项目下建立apps目录…...
【强化学习系列】Q-learning——从贝尔曼最优方程谈起
引言 上一篇贝尔曼最优方程中我们已经推导出动作价值形式的贝尔曼最优方程: q π ∗ ( s , a ) ∑ s ′ ∈ S ∑ r ∈ R p ( s ′ , r ∣ s , a ) [ r γ max a ′ q π ∗ ( s ′ , a ′ ) ] \begin{equation}q_{\pi^*}(s,a)\sum_{s\in S}\sum_{r\in R}p(s,…...
Java 基础--运算符全解析
【Java 基础】Java 运算符全解析:程序世界的“加减乘除”与“是非对错” 作者:IvanCodes 发布时间:2025年4月29日🐣 专栏:Java教程 嗨,各位 Java 探险家们!👋 掌握了变量、数据类…...
【神经网络与深度学习】改变随机种子可以提升模型性能?
引言 随机种子在机器学习和数据处理领域中至关重要,它决定了模型训练、数据划分以及参数初始化的随机性。虽然固定随机种子能确保实验的可重复性,但改变随机种子有时会意外提升模型性能。本文将探讨这一现象的潜在原因,并揭示随机性如何影响…...
一页概览:统一数据保护方案
2010年左右手绘,用的是公司的信纸,签字笔,马克笔。方案为统一数据保护。其实解释备份软件加备份硬件(支持重复数据删除)的联合解决方案。...
Python中的itertools模块常见函数用法示例
itertools ,迭代工具模块,提供了用于高效处理迭代器和组合问题的工具。 1. itertools.permutations(iterable, rNone) 功能:生成输入迭代器的所有可能排列。 参数: iterable:输入的可迭代对象。r:可选参数…...
微服务学习笔记
1 微服务 微服务:基于业务领域建模的、可独立发布的服务,把业务内聚的功能封装起来,并通过网络供其他服务访问。 好处: 技术异构性,不同服务可以使用不同的技术弹性,可以更好的处理服务不可用的问题扩展…...
实验七:基于89C51和DS18B20的温度采集与显示
一、实验目的 学习使用DS18B20数字温度传感器采集温度数据。使用4位共阳极数码管显示温度数据,显示精度到小数点后两位。熟悉89C51单片机的I/O口操作和位选控制。二、实验器材 89C51单片机开发板DS18B20数字温度传感器4位共阳极数码管三极管8550(用于位选驱动)电阻、电容等辅…...
cmake:基础
本文主要探讨cmake语法相关知识。 cmake(GUI)安装 apt install cmake-curses-gui cmake -y cmake语法 cmake_minimum_required(VERSION 版本号) 设置cmake最低版本 project(工程名) <> PROGECT_NAME/CMAKE_PROJECT_NAME 设置工程名字 add_library(库名 SHARED/STAT…...
1.8 点云数据获取方式——小结
点云,作为三维空间信息的直观载体,在各行各业都得到了广泛应用。而能够获得三维点云数据手段,也是极为丰富。本章节主要介绍了主动式手段(包括激光雷达、ToF相机、结构光相机)和被动式手段(双目立体相机、单…...
超越单体:进入微服务世界与Spring Cloud概述
大家好!欢迎来到我的新系列文章——《微服务架构:Spring Cloud实战指南》。在之前的《Java服务端核心技术》系列中,我们一起深入学习了如何使用Spring Boot构建功能强大、安全可靠的单体应用程序。我们掌握了Spring的核心原理、Web开发、数据…...
深度学习篇---模型权重变化与维度分析
文章目录 前言1. 权重的作用2. 权重的维度全连接层卷积层3. 权重的变化4.实例代码(PyTorch 框架)场景代码解释模型定义数据生成优化设置初始权重设置训练循环前向传播反向传播更新权重结果输出维度与变化总结维度匹配梯度跟新5. 增加网络深度:多层感知机(MLP)代码解释6. 权…...
AtCoder Beginner Contest 403(题解ABCDEF)
A - Odd Position Sum #1.奇数数位和 #include<iostream> #include<vector> #include<stdio.h> #include<map> #include<string> #include<algorithm> #include<queue> #include<cstring> #include<stack> #include&l…...
计算机视觉与深度学习 | 双目立体匹配算法理论+Opencv实践+matlab实践
双目立体匹配 一、双目立体匹配算法理论与OpenCV、matlab实践一、双目立体匹配理论二、OpenCV实践三、优化建议四、算法对比与适用场景二、双目立体匹配算法理论及Matlab实践指南一、双目立体匹配理论二、Matlab实践步骤三、算法对比与优化建议四、完整流程示例五、常见问题与解…...
深挖Java基础之:认识Java(创立空间/先导:Java认识)
今天我要介绍的是在Java中对Java的一些基本语法的认识与他们的运用,以及拟举例子说明和运用场景,优势和劣势, 注:本篇文章是对Java的一些基本的,简单的代码块的一些内容,后续会讲解在Java中的变量类型&…...
springmvc从请求到响应的流程分析
一、创建springmvc项目 通过网盘分享的文件:hello-springmvc.zip 链接: https://pan.baidu.com/s/1VmUHurgph661ND9LWqKhaw 提取码: b36a 二、从请求到响应流程 我们先画一下流程图,如下图所示。 三、源码解析 3.1 HttpServlet接收请求 用户发送htt…...
RabbitMQ 启动报错 “crypto.app“ 的解决方法
RabbitMQ 启动报错 “crypto.app” 的解决方法 在使用 RabbitMQ 时,有时会遇到启动报错的问题,其中一种常见的报错是: {"init terminating in do_boot",{error,{crypto,{"no such file or directory","crypto.app…...
idm 禁止自动更新提示(修改注册表)
目前版本:v 6.42 Bulid 35 运行-regedit- 计算机\HKEY_CURRENT_USER\SOFTWARE\DownloadManager 计算机\HKEY_CURRENT_USER\SOFTWARE\DownloadManagerLstCheck -> 0 重启...
LeetCode - 02.02.返回倒数第 k 个节点
目录 题目 解法一 双指针算法 原理 详细过程 为什么它有效? 时间复杂度与空间复杂度 代码 解法二 递归算法 核心思想 执行流程详解 具体例子 代码 题目 面试题 02.02. 返回倒数第 k 个节点 - 力扣(LeetCode) 解法一 双指针算…...
<c++>使用detectMultiScale的时候出现opencv.dll冲突
最近在试着弄一下opencv,看网上很多人都是的用的python,但是python跑起来没有c快,生成的qt工程也大一些,想着试试c看能不能生成opencv。然后就用到这个函数,detectMultiScale。 出现一个问题,就是我的程序在…...
从实列中学习linux shell脚本2: shell 的变量 方法 命名和使用规则之类 比如拿:获取cpu 负载,以及负载超过2.0 以后就发生邮件为例子
以下是对 Linux Shell 中变量、方法(函数)、命名规则的详细说明,并结合 获取CPU负载并在负载超过2.0时发送邮件 的示例进行演示: 1. Shell 变量 命名规则 命名格式:变量名由字母、数字、下划线组成,不能以…...
Centos Ubuntu RedOS系统类型下查看系统信息
文章目录 一、项目背景二、页面三、说明四、代码1.SysInfo2.EmsSysConfig3.HostInformationController4.HostInfo 一、项目背景 公司项目想展示当前部署系统的:操作系统,软件版本、IP、主机名。 二、页面 三、说明 说明点1:查询系统类型及…...
【Hive入门】Hive高级特性:视图与物化视图
在大数据分析中,Hive作为Hadoop生态系统中的重要组件,提供了强大的数据查询和管理能力。除了基本表的操作,Hive还支持 视图和 物化视图,这两种特性在数据管理和查询优化中扮演着重要角色。本文将深入探讨视图的创建与性能影响&…...
特征工程四-2:使用GridSearchCV 进行超参数网格搜索(Hyperparameter Tuning)的用途
1. GridSearchCV 的作用 GridSearchCV(网格搜索交叉验证)用于: 自动搜索 给定参数范围内的最佳超参数组合。交叉验证评估 每个参数组合的性能,避免过拟合。返回最佳模型,可直接用于预测或分析。 2. 代码逐行解析 (1…...
【Hive入门】Hive函数:内置函数与UDF开发
Apache Hive作为Hadoop生态系统中的重要组件,为大数据分析提供了强大的SQL-like查询能力。Hive不仅支持丰富的内置函数,还允许用户开发自定义函数(UDF)以满足特定需求。本文将深入探讨Hive的内置函数(包括数学函数、字…...
HTML Picture标签详细教程
HTML Picture标签详细教程 简介 <picture>标签是HTML5中引入的一个强大元素,它为开发者提供了更灵活的图像资源管理方式。该标签主要用于让浏览器根据不同条件(如设备屏幕大小、分辨率或支持的图像格式)选择最适合当前显示环境的图像…...
Html1
一,HTML概述 网页开发需要学习的知识: html css javaScript 两个框架 VUE.js ElementUI UI user interface 用户界面 HTML xml 可扩展标记语言-->存储数据 Markup Language标签语言都会提供各种标…...
runpod team 怎么设置自己的ssh key呢?
生成 ed25519 公钥密钥 ssh-keygen -t ed25519 -C "yourqq.com"然后在pod容器配置key以及启动方式 选择edit pod 添加启动代码 启动代码可以参考官方给的内容: https://docs.runpod.io/pods/configuration/use-ssh bash -c apt update;DEBIAN_FRONT…...
Flutter:组件10、倒计时
import dart:async; import package:flutter/material.dart;class CountdownTimer extends StatefulWidget {final int seconds;final double? fontSize;final Color? textColor;final bool showDays;final bool showHours;final bool showMinutes;final bool showSeconds;fi…...
存储器分类
按宏观分类 内部存储:用于临时存储当前程序运行所需要的数据外部存储:指硬盘,用于存储需要保存下的数据 按存储功能分 磁盘存储器(Disk),如机械硬盘非易失性存储器(Flash memory),分为固态硬…...
案例解析:基于量子计算的分子对接-QDOCK(Quantum Docking)
分子对接(Moleculardocking)在药物发现中具有重要意义,但对接的计算速度和准确率始终难以平衡,其巨大解搜索空间对传统计算机来说异常艰巨。 本文通过引入网格点匹配(GPM, Grind point matching)和特征原子…...
人工智能和机器学习在包装仿真中的应用与价值
引言 随着包装成为消费品关键的差异化因素,对智能设计、可持续性和高性能的要求比以往任何时候都更高 。为了满足这些复杂的期望,公司越来越多地采用先进的仿真方法,而现在人工智能 (AI) 和机器学习 (ML) 又极大地增强了这些方法 。本文探讨…...
系统的环境变量
目录 基本概念 用途之一 环境变量表 命令行参数表 理解 更多的环境变量 基本概念 环境变量(environmentvariables)⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数。环境变量通常具有某些特殊⽤途,还有在系统当中通常具有全局特性 用途之一 我们看…...