You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将树莓派Python生成的字典发送到Laravel框架并在视图中展示

解决方案

1 修正树莓派端Python代码

你当前的代码调用requests.post时传入了已序列化的JSON字符串,会导致Laravel收到的是字符串而非结构化JSON数据,直接传原始字典即可:

def readFile():
    mac_dict = {} # 注意提前初始化字典,原代码缺这行
    with open("/home/pi/Desktop/Progetti SIoTD/Bluetooth/device.txt", "r") as file:
        for i in file:
            line, *lines = i.split()
            if line in mac_dict:
                mac_dict[line] += lines
            else:
                mac_dict[line] = lines
    print(mac_dict)
    print("\n")

    # 去掉json.dumps,直接把字典传给requests的json参数
    r = requests.post(ip, json=mac_dict)
    print(r.text)

2 修正Laravel路由配置

两个路由不要共用同一个方法,分开处理POST收数据、GET展示数据的逻辑:

web.php 路由(负责展示页面)

Route::get('dict', [DictionaryController::class, 'showDict'])->name('dict');

api.php 路由(负责接收树莓派上报的数据)

Route::post('dictionary', [DictionaryController::class, 'saveDict'])->name('dictionary');

3 修正控制器逻辑

HTTP是无状态协议,POST上报的数据需要先持久化存储,才能在后续GET请求访问页面时读取到,这里先以Laravel缓存做快速实现,你也可以换成存数据库:

use Illuminate\Support\Facades\Cache;

class DictionaryController extends Controller
{
    // 原有方法保留不影响
    public function index()
    {
       return view('backend.auth.user.dictionary');
    }

    public function store(Request $request)
    {
       
    }

    public function show($id)
    {
        
    }

    public function update(Request $request, $id)
    {
        //
    }

    public function destroy($id)
    {
        //
    }

    // 新增:接收树莓派POST的数据并存缓存
    public function saveDict(Request $request)
    {
        // 拿到树莓派上报的所有JSON数据
        $dictData = $request->all();
        // 存到缓存,永久有效,你也可以设置过期时间
        Cache::forever('raspberry_dict', $dictData);
        // 返回响应给树莓派
        return response()->json(['code' => 0, 'msg' => '接收成功']);
    }

    // 新增:读取缓存数据传到视图展示
    public function showDict()
    {
        // 从缓存拿数据,没有的话返回空数组
        $dict = Cache::get('raspberry_dict', []);
        // 传到视图
        return view('backend.auth.user.dictionary', compact('dict'));
    }
}

4 视图层渲染展示

修改dictionary.blade.php文件,在content区块输出数据:

@extends('backend.layouts.app')

@section('content')
<div class="container">
    <h3>树莓派上报的字典数据</h3>
    <!-- 格式化输出JSON,方便查看 -->
    <pre>{{ json_encode($dict, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre>
</div>
@endsection

验证流程

  1. 先运行树莓派的代码上报一次数据
  2. 访问你的站点/dict路由,即可看到上报的字典内容

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:54:04