」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 FastAPI、HTML、CSS 和 JSON 建立簡單的部落格應用程式

使用 FastAPI、HTML、CSS 和 JSON 建立簡單的部落格應用程式

發佈於2024-11-03
瀏覽:911

在本教程中,我們將使用FastAPI 作為後端,HTMLCSS 作為前端,以及 創建一個基本的部落格應用程式JSON 文件,用於執行基本的CRUD(建立、讀取、更新、刪除)操作。
FastAPI 是一個使用 Python 建立 API 的現代 Web 框架,以其簡單、速度和內建的非同步操作支援而聞名。

下面的實作如下:

Building a Simple Blog App Using FastAPI, HTML, CSS, and JSON

Building a Simple Blog App Using FastAPI, HTML, CSS, and JSON

Building a Simple Blog App Using FastAPI, HTML, CSS, and JSON

先決條件

開始前,請確保您已安裝以下軟體:

  • Python 3.7
  • FastAPI
  • Uvicorn(用於運行 FastAPI 應用程式)

要安裝FastAPI和Uvicorn,可以使用pip:

pip install fastapi uvicorn python-multipart

專案架構

本計畫的架構如下:

/blog_app
    ├── static
    │   └── style.css
    ├── templates
    │   ├── index.html
    │   ├── post.html
    │   ├── create_post.html
    ├── blog.json
    ├── main.py

第 1 步:設定 FastAPI

建立一個 main.py 文件,其中將包含 FastAPI 應用程式。

from fastapi import FastAPI, Request, Form
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
import json
import os

app = FastAPI()

app.mount("/static", StaticFiles(directory="static"), name="static")

templates = Jinja2Templates(directory="templates")

# Load or initialize blog data
BLOG_FILE = "blog.json"

if not os.path.exists(BLOG_FILE):
    with open(BLOG_FILE, "w") as f:
        json.dump([], f)


def read_blog_data():
    with open(BLOG_FILE, "r") as f:
        return json.load(f)


def write_blog_data(data):
    with open(BLOG_FILE, "w") as f:
        json.dump(data, f)


@app.get("/", response_class=HTMLResponse)
async def home(request: Request):
    blogs = read_blog_data()
    return templates.TemplateResponse("index.html", {"request": request, "blogs": blogs})


@app.get("/post/{post_id}", response_class=HTMLResponse)
async def read_post(request: Request, post_id: int):
    blogs = read_blog_data()
    post = blogs[post_id] if 0 



第 2 步:設定 HTML 和 CSS

在範本資料夾中,建立以下 HTML 檔案:

index.html
該文件將列出所有部落格文章。



    Blog App

Blog Posts

Create New Post
{% for post in blogs %}

{{ post.title }}

{{ post.content[:100] }}...

Read more
{% endfor %}

post.html
該文件將顯示部落格文章的完整內容。



    {{ post.title }}

{{ post.title }}

{{ post.content }}

Back to Home

create_post.html
該文件將包含用於建立新帖子的表單。



    Create a New Post

Create a New Post

Back to Home

步驟 3:使用 CSS 設計樣式

在static資料夾中,建立style.css檔案以添加一些基本樣式。

body {
    font-family: Arial, sans-serif;
    padding: 20px;
    background-color: #f0f0f0;
}

h1 {
    color: #333;
}

a {
    text-decoration: none;
    color: #0066cc;
}

.post {
    background-color: #fff;
    padding: 10px;
    margin-bottom: 15px;
    border-radius: 5px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

button {
    background-color: #ff4d4d;
    border: none;
    padding: 5px 10px;
    color: white;
    border-radius: 3px;
    cursor: pointer;
}

button:hover {
    background-color: #ff1a1a;
}

input, textarea {
    width: 100%;
    padding: 8px;
    margin-bottom: 10px;
}

第 4 步:運行應用程式

現在一切都已設定完畢,使用 Uvicorn 運行 FastAPI 應用程式。

uvicorn main:app --reload

在瀏覽器中造訪http://127.0.0.1:8000,您應該會看到部落格首頁。

作為作業,您可以使用資料庫 ?️ 而不僅僅是 JSON 來建立全端 Web 應用程式。
使用資料庫,您可以添加更多功能、提高效能並增強整體 UI/UX。以獲得更豐富的使用者體驗。

這就是本部落格的全部內容!請繼續關注更多更新並繼續建立令人驚嘆的應用程式! ? ✨

版本聲明 本文轉載於:https://dev.to/jagroop2001/building-a-simple-blog-app-using-fastapi-html-css-and-json-1dc?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 建立一個 React Hook 以任意角度旋轉影像
    建立一個 React Hook 以任意角度旋轉影像
    在Web開發中,您可能需要旋轉影像,這在CSS中很容易做到。像這樣的簡單程式碼變換:rotate(90deg);。但是如果我們想用 JS 來做呢? TLDR 將圖像繪製到瀏覽器環境中的畫布上並旋轉它。但在此之前,我們需要做一些數學運算來保持原始影像的長寬比。 核 ...
    程式設計 發佈於2024-11-08
  • Lithe 中間件:它是如何運作的以及如何創建自己的中間件
    Lithe 中間件:它是如何運作的以及如何創建自己的中間件
    中间件提供了一种方便的机制来检查和过滤进入应用程序的 HTTP 请求。 例如,Lithe 包含检查用户是否经过身份验证的中间件。如果没有,中间件会将用户重定向到登录屏幕。如果用户通过身份验证,中间件将允许请求继续。 中间件如何在 Lithe 中工作 在 Lithe 中,中间件是能够访...
    程式設計 發佈於2024-11-08
  • 如何在 JavaScript 中建立具有重複元素的陣列?
    如何在 JavaScript 中建立具有重複元素的陣列?
    JavaScript 中重複元素的數組創建具有多次重複的相同元素的數組在各種編程場景中至關重要。在 Python 中,這可以透過列表乘法來實現,如 [2] * 5 所示。但是,此功能在 JavaScript 陣列中不能直接使用。 自訂函數方法為了滿足這種需求,一種方法是建立自訂函數,例如問題中提供的...
    程式設計 發佈於2024-11-08
  • ## MySQL 中的 LIKE 與 LOCATE:哪個運算子是效能之王?
    ## MySQL 中的 LIKE 與 LOCATE:哪個運算子是效能之王?
    MySQL LIKE 與LOCATE 效能比較在MySQL 中查找資料時,你可能會想知道LIKE 和LOCATE 哪個運算子效率更高?本文探討了這兩個運算子之間的效能差異。 在典型的使用場景中,LIKE 比 LOCATE 稍快。這主要是因為 LIKE 不像 LOCATE 那樣執行與 0 的額外比較。...
    程式設計 發佈於2024-11-08
  • 如何使用 PHP 更新多個 MySQL 行的表單資料?
    如何使用 PHP 更新多個 MySQL 行的表單資料?
    使用表單資料更新多個MySQL 行在Web 開發中,通常有一個表單,使用者可以在其中編輯資料庫中的記錄。常見的情況是使用修改後的資料更新同一個表中的多行。這可以使用 PHP 和 MySQL 來實作。 表單結構與資料擷取初始表單負責呈現要編輯的資料。在此範例中,表單從資料庫中擷取具有特定 GALLER...
    程式設計 發佈於2024-11-08
  • 為什麼我不能在 Go 中將 []byte 分配給字串?
    為什麼我不能在 Go 中將 []byte 分配給字串?
    了解位元組分配錯誤:無法將[]byte 指派給字串在嘗試讀取資料夾中的檔案時,遇到了錯誤嘗試讀取檔案內容時,「無法在多重賦值中將[]byte 指派給z(字串類型)」。讓我們深入研究這個錯誤背後的原因。 理解多重賦值當在一行中為多個變數賦值時,如程式碼所示:z, err := ioutil.ReadF...
    程式設計 發佈於2024-11-08
  • 如何使用 React 和 Typescript 建立自訂表格元件(第 2 部分)
    如何使用 React 和 Typescript 建立自訂表格元件(第 2 部分)
    介绍 耶! ?您已经完成了这个由两部分组成的系列的最后一部分!如果您还没有查看第 1 部分,请先停在此处并完成第 1 部分。别担心,我们会等你回来! ? 在第 1 部分中,我们构建了 CustomTable 组件。您可以在这里看到它的实际效果。 在第二部分中,我们将扩展该组件以添加...
    程式設計 發佈於2024-11-08
  • 使用 TypeScript 和 ioredis 在 Node.js 中建立高效能快取管理器
    使用 TypeScript 和 ioredis 在 Node.js 中建立高效能快取管理器
    使用基於 ioredis 建構的多功能、易於使用的快取管理器來提升 Node.js 應用程式的效能。簡化快取、優化效率並簡化操作。 我根據自己的需求開發了一個基於 ioredis 的類,重點關注易用性和性能。它包括 TypeScript 支持,旨在實現簡單使用和高效操作。它仍然可以進一步改進和優化...
    程式設計 發佈於2024-11-08
  • 超類別引用和子類別對象
    超類別引用和子類別對象
    Java 是一種強型別語言。 標準轉換和自動升級適用於原始型別。 嚴格執行型別相容性。 通常,一個類別的引用變數不能引用另一個類別的物件。 即使類別 X 和 Y 在結構上相同,也不可能將 X 的引用分配給 Y 的對象,因為類型不同。 一般來說,物件引用變數只能引用其類型的物件。 型別強...
    程式設計 發佈於2024-11-08
  • Flexbox 中的 flex-grow 和 width 有何不同?
    Flexbox 中的 flex-grow 和 width 有何不同?
    Flexbox中flex-grow和width的區別Flexbox提供了兩種在元素之間分配空間的主要方法:flex- grow和width。了解這些屬性之間的差異對於有效使用 Flexbox 至關重要。 Flex-grow 與 widthFlex-grow 是一個無量綱屬性,定義元素的大小擴展以填充...
    程式設計 發佈於2024-11-08
  • 如何將表單標籤和輸入水平對齊在同一行?
    如何將表單標籤和輸入水平對齊在同一行?
    實現表單標籤與輸入在同一行水平放置在網頁開發中,表單的美觀對於使用者體驗至關重要。將標籤和輸入欄位排列在同一行可以增強表單的可讀性和可用性。本文探討如何將輸入元素與其標籤無縫對齊,無論其長度為何。 初始嘗試在單一元素上對齊標籤和輸入的常見方法行涉及將輸入的寬度設為自動。然而,這通常會導致輸入寬度固定...
    程式設計 發佈於2024-11-08
  • 遞迴-1
    遞迴-1
    簡介1 函數呼叫自身的過程稱為遞歸, 對應的函數稱為遞歸函數. 由於電腦程式設計是數學的基本應用,因此讓 我們首先嘗試理解遞歸背後的數學推理。 一般來說,我們都知道函數的概念。簡而言之,函數是 提供輸入時產生輸出的數學方程式。例如: 假設函數 F(x) 是由下式定義的函數: F(...
    程式設計 發佈於2024-11-08
  • 將日誌記錄和錯誤處理中間件新增至您的 Go API
    將日誌記錄和錯誤處理中間件新增至您的 Go API
    快速注意:如果您查看了我之前關於 JWT 身份驗證的帖子並註意到一些渲染問題,那麼這些問題現已修復!請務必再看一遍,因為這些範例建立在該教程的基礎上。 :) 好吧,夥計們,我們已經運行了 Go API,添加了 JWT 身份驗證,甚至將其連接到 PostgreSQL 資料庫。但我們還沒完成!本週,我...
    程式設計 發佈於2024-11-08
  • Tensorflow 音樂預測
    Tensorflow 音樂預測
    在本文中,我將展示如何使用張量流來預測音樂風格。 在我的範例中,我比較了電子音樂和古典音樂。 您可以在我的github上找到代碼: https://github.com/victordalet/sound_to_partition I - 資料集 第一步,您需要建立一個資料集資料...
    程式設計 發佈於2024-11-08
  • useEffect 鉤子解釋
    useEffect 鉤子解釋
    useEffect 鉤子是 React 的基本組成部分,可讓您在功能元件中執行副作用。詳細分析如下: 什麼是useEffect? useEffect 掛鉤可讓您在元件中執行副作用,例如資料擷取、訂閱或手動變更 DOM。 可以認為是生命週期方法 componentDidMount、c...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3