FastAPI 和 MongoDB 實現請求頭參數處理的示例,并在 React 中進行渲染

FastAPI 和 MongoDB 后端

  1. 安裝必要的庫
    安裝 FastAPI、Uvicorn、Motor(用于 MongoDB 的異步驅動)和 Pydantic(用于數據驗證)。

    pip install fastapi uvicorn motor pydantic
    
  2. 創建 FastAPI 應用

    創建一個文件 main.py,并在其中定義一個接口,該接口通過請求頭參數獲取博客文章的詳細信息。

    # main.py
    from fastapi import FastAPI, Request, HTTPException
    from motor.motor_asyncio import AsyncIOMotorClient
    from pydantic import BaseModel
    from bson import ObjectId
    from typing import Optional, Listapp = FastAPI()# MongoDB 連接
    client = AsyncIOMotorClient("mongodb://localhost:27017")
    db = client["blogdb"]
    collection = db["blogs"]# 定義博客模型
    class Blog(BaseModel):title: strcontent: strauthor: strcreated_at: str# 寫入100條測試數據
    async def create_test_data():for i in range(100):blog = Blog(title=f"測試博客 {i+1}",content=f"這是第 {i+1} 篇博客的內容",author=f"作者 {i+1}",created_at="2025-05-10 12:33:33")await collection.insert_one(blog.dict())# 初始化時創建測試數據
    @app.on_event("startup")
    async def startup_event():await create_test_data()# 通過請求頭參數獲取博客
    @app.get("/blogs/")
    async def get_blogs(request: Request):# 從請求頭中獲取參數api_key = request.headers.get("X-API-Key")if not api_key or api_key != "your_api_key":raise HTTPException(status_code=401, detail="Invalid API Key")blogs = await collection.find().to_list(length=100)return [{"_id": str(blog["_id"]), **blog} for blog in blogs]
    

React 前端

  1. 創建 React 應用
    如果你還沒有創建一個 React 應用,可以使用 Create React App 來快速創建一個。

    npx create-react-app my-react-app
    cd my-react-app
    npm start
    
  2. 修改 App.js 文件
    App.js 文件中,我們將實現通過請求頭參數獲取博客數據,并動態渲染博客列表。

    import React, { useState, useEffect } from 'react';
    import './App.css';function App() {const [blogs, setBlogs] = useState([]);const [apiKey, setApiKey] = useState('your_api_key');useEffect(() => {fetchBlogs();}, [apiKey]);const fetchBlogs = () => {fetch('http://127.0.0.1:8000/blogs/', {headers: {'X-API-Key': apiKey}}).then(response => {if (!response.ok) {throw new Error('Request failed');}return response.json();}).then(data => setBlogs(data)).catch(error => console.error('Error fetching blogs:', error));};return (<div className="App"><header className="App-header"><h1>博客列表</h1><div><inputtype="text"value={apiKey}onChange={(e) => setApiKey(e.target.value)}placeholder="API Key"/><button onClick={fetchBlogs}>獲取博客</button></div><div>{blogs.map(blog => (<div key={blog._id} className="blog-card"><h2>{blog.title}</h2><p>{blog.content}</p><p>作者: {blog.author}</p><p>創建時間: {blog.created_at}</p></div>))}</div></header></div>);
    }export default App;
    
  3. 添加樣式
    為了使博客卡片看起來更好,可以在 App.css 文件中添加一些樣式。

    .App {text-align: center;
    }.App-header {background-color: #282c34;min-height: 100vh;display: flex;flex-direction: column;align-items: center;justify-content: center;font-size: calc(10px + 2vmin);color: white;
    }.blog-card {background-color: #333;padding: 20px;margin: 10px 0;border-radius: 8px;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    }.blog-card h2 {margin-top: 0;
    }.blog-card p {margin: 10px 0;
    }input {margin: 10px 0;padding: 8px;border-radius: 4px;border: 1px solid #ccc;
    }button {padding: 8px 16px;background-color: #61dafb;border: none;border-radius: 4px;cursor: pointer;
    }button:hover {background-color: #007bff;
    }
    

運行 React 應用

確保你的 React 應用正在運行。如果你之前已經啟動了 npm start,那么它應該已經在運行了。

打開瀏覽器訪問 http://localhost:3000,你應該能看到通過請求頭參數獲取的博客列表。

注意事項

  1. 跨域問題
    如果你在開發環境中遇到跨域問題(CORS),可以在 FastAPI 應用中添加 CORS 中間件來解決。修改 main.py 文件:

    from fastapi.middleware.cors import CORSMiddlewareapp = FastAPI()app.add_middleware(CORSMiddleware,allow_origins=["*"],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
    )
    
  2. 生產環境
    在生產環境中,你需要將 React 應用構建為靜態文件,并將其部署到一個 Web 服務器上。同時,FastAPI 應用也需要部署到一個生產級的服務器上,如 Gunicorn 或 Uvicorn。

通過以上步驟,你可以在 React 中實現通過請求頭參數獲取 FastAPI 和 MongoDB 提供的數據,并動態渲染博客列表。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82952.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82952.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82952.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

技術倫理雙軌認證如何重構AI工程師能力評估體系——基于AAIA框架的技術解析與行業實證研究

引言&#xff1a;AI工程師能力評估的范式轉型 2025年全球人工智能產業呈現出兩大特征&#xff1a;技術迭代加速與監管框架完善。據Gartner數據顯示&#xff0c;全球75%的企業在AI項目部署中遭遇技術倫理混合型難題&#xff0c;傳統單維度技術認證體系已無法滿足產業需求。本文…

03.Golang 切片(slice)源碼分析(二、append實現)

Golang 切片&#xff08;slice&#xff09;源碼分析&#xff08;二、append實現&#xff09; 前言&#xff1a; Golang 切片&#xff08;slice&#xff09;源碼分析&#xff08;一、定義與基礎操作實現&#xff09; 在前面的文章我們介紹了&#xff0c;切片的結構體與創建\擴容…

mysql常用方法

mysql常用方法 一、基本用法 -- MySQL創建唯一索引 CREATE UNIQUE INDEX 索引名 ON 表名(列名1,列名2,...); --也可以使用ALTER TABLE語句給現有表添加唯一索引&#xff08;UNIQUE&#xff09; ALTER TABLE 表名 ADD CONSTRAINT 索引名 UNIQUE KEY(列名1,列名2,...); alter t…

STM32F103C8T6板子使用說明

第一章 計算機體系結構(了解) 后續在板子上開發的時候&#xff0c;需要考慮是否有操作系統 方式一&#xff1a;有操作系統&#xff0c;通過c庫通過os api操作硬件方式二&#xff1a;無操作系統&#xff0c; 通過c庫通過固件庫操作硬件 第二章 STM32開發板概述 板子/開發板&…

PBR材質-Unity/Blender/UE

目錄 前言&#xff1a; 一、Unity&#xff1a; 二、Blender&#xff1a; 三、UE&#xff1a; 四、全家福&#xff1a; 五、后記&#xff1a; 前言&#xff1a; PBR流程作為表達物理效果的經典方式&#xff0c;很值得一學。紋理貼圖使用的是上一期的Textures | cgbookcas…

【生產實踐】Linux中/usr/bin、/usr/sbin與/usr/local的關系解析(2025年技術規范)

一、核心定位與功能劃分 /usr/bin&#xff1a;用戶級通用命令庫 ? 定位&#xff1a;存儲系統預裝的用戶級可執行文件&#xff0c;這些命令通常由Linux發行版官方軟件包管理器&#xff08;如APT、YUM&#xff09;安裝&#xff0c;屬于系統默認功能的一部分。 ? 示例命令&#…

智能網聯汽車 “中央計算” 博弈:RTOS 與跨域融合的算力分配挑戰

一、引言 隨著智能駕駛技術的飛速發展&#xff0c;汽車逐漸從傳統的交通工具演變為移動的智能終端。智能網聯汽車的核心競爭力日益體現在其強大的計算能力和高效的算力管理上。汽車電子電氣架構&#xff08;EEA&#xff09;正經歷從分布式架構向 “中央計算 區域控制” 架構的…

【PDF】使用Adobe Acrobat dc添加水印和加密

【PDF】使用Adobe Acrobat dc添加水印和加密 文章目錄 [TOC](文章目錄) 前言一、添加保護加密口令二、添加水印三、實驗四、參考文章總結 實驗工具&#xff1a; 1.Adobe Acrobat dc 前言 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 一、添加保護加…

python面試實戰經驗分享

2025/3/28第一面 杭州實在智能 見習python開發工程師 1、Python方法中參數默認值可以是列表或者字典嗎? 在Python中,函數參數的默認值可以是列表或字典,列表或者字典在初始化應在函數體內,如果不正確處理,可能會導致所有調用都共享同一個列表。 2、協程、線性和進程 進程…

MIST:一鍵解鎖 macOS 歷史版本,舊系統安裝不再難!

在 Mac 電腦的使用過程中&#xff0c;你是否遇到過這些困擾&#xff1f;為了運行一款經典設計軟件&#xff0c;新系統卻無法兼容&#xff1b;或是想給老舊 Mac 設備升級&#xff0c;卻找不到適配的系統版本。而 App Store 里&#xff0c;舊版 macOS 安裝包就像 “隱藏副本”&am…

win10 局域網內聊天

在 Windows 10 的局域網 中&#xff0c;如果你想實現 多個用戶之間的聊天功能&#xff0c;可以選擇以下幾種方案&#xff0c;取決于你需要的是&#xff1a; ? ? 命令行純文字聊天&#xff08;如 Linux talk&#xff09; ? ? 圖形界面聊天室 ? ? 局域網廣播消息 ? ? 多人…

Android CountDownTimer重寫

Android 倒計時器重寫&#xff0c;實現可重復使用&#xff0c;動態修改計時時間 CountDownTimerRew 是一個可重寫、動態修改計時時間的 Android 倒計時器類。它允許開發者設置倒計時總時長、間隔時間&#xff0c;并通過 onTick 和 onFinish 方法實現定時回調。該類支持動態修改…

dp自動化登陸之hCaptcha 驗證碼

hCaptcha 是一種常見的驗證碼服務&#xff0c;用于區分人類用戶和自動化程序。由于其基于圖像識別和行為分析&#xff0c;下面介紹如何使用自動化點擊驗證碼完成登陸。 思路&#xff1a;登陸目標網站觸發驗證碼&#xff0c;截圖并發給打碼平臺返回坐標&#xff0c;模擬人工點擊…

【工作記錄】crmeb后端項目打開、運行

1、下載代碼 1&#xff09;安裝git 不再詳述 2&#xff09;git拉代碼 項目地址如下&#xff0c;在vscode-分支中拉代碼 # 克隆項目 git clone https://gitee.com/ZhongBangKeJi/crmeb_java/ 截圖如下是已經成功拉下來 注意安裝對應版本 2、maven配置 安裝配置見&#x…

敏捷軟件開發與Scrum

目錄 一、敏捷軟件開發 敏捷開發原則 敏捷開發特點 二、Scrum (一)Scrum 基礎知識

Three.js模型材質調整與性能優化實戰

一、材質基礎調整 1.1 顏色與透明度控制 通過Material.color屬性可直接修改材質顏色&#xff1a; material.color new THREE.Color(0xff0000); // 紅色結合opacity屬性實現透明效果&#xff1a; material.opacity 0.5; // 50%透明度如需動態調整&#xff0c;可通過Color.…

Flutter速成指南:不懂編程也能10天開發專業級App

Flutter速成指南&#xff1a;不懂編程也能10天開發專業級App &#x1f680; 輕松構建漂亮的跨平臺應用 &#x1f4d1; 目錄 一、Flutter是什么&#xff1f; 為什么選擇Flutter&#xff1f;Flutter工作原理 二、環境搭建與命令行 安裝Flutter SDK常用Flutter命令創建第一個項目…

【面試真題】王者榮耀億級排行榜,如何設計?

目錄 一、數據庫 order by 二、Redis 的zset 三、抗億級數據存在的問題 3.1 熱點 key 問題 3.1.1 多級緩存&#xff08;RedisJVM本地緩存&#xff09; 3.1.2 讀寫分離 從庫負載均衡 3.1.3 分片Key設計 3.2 內存爆炸 3.2.1 縮短鍵名 3.2.2 分片存儲 3.3 數據持久化風…

Java 語法基礎(筆記)

java 的數據類型 基本類型 Java 有八種基本類型&#xff1a; byte&#xff1a;1 字節&#xff0c;-128~127short&#xff1a;2 字節&#xff0c;-32768~32767int&#xff1a;4 字節&#xff0c;-2147483648~2147483647long&#xff1a;8 字節&#xff0c;-92233720368547758…

C# 方法(棧幀)

本章內容: 方法的結構 方法體內部的代碼執行 局部變量 局部常量 控制流 方法調用 返回值 返回語句和void方法 局部函數 參數 值參數 引用參數 引用類型作為值參數和引用參數 輸出參數 參數數組 參數類型總結 方法重載 命名參數 可選參數 棧幀 遞歸 棧幀 至此&#xff0c;我們已…