Python實現簡易博客系統

下面我將介紹如何使用Python實現一個簡易的博客系統,包含前后端完整功能。這個系統將使用Flask作為Web框架,SQLite作為數據庫,并包含用戶認證、文章發布、評論等基本功能。

1. 系統架構設計

技術棧選擇

  • ??后端??:Flask (Python Web框架)
  • ??數據庫??:SQLite (輕量級數據庫)
  • ??前端??:HTML/CSS/JavaScript + Bootstrap (響應式設計)
  • ??認證??:Flask-Login (用戶會話管理)

系統功能模塊

  1. 用戶認證系統(注冊、登錄、登出)
  2. 文章管理(創建、編輯、刪除、查看)
  3. 評論系統
  4. 分類與標簽
  5. 簡單的搜索功能

2. 項目結構

blog_system/
├── app.py                # 主應用入口
├── models.py             # 數據庫模型
├── forms.py              # 表單定義
├── static/               # 靜態文件(CSS/JS)
│   ├── css/
│   └── js/
├── templates/            # HTML模板
│   ├── base.html         # 基礎模板
│   ├── auth/             # 認證相關頁面
│   │   ├── login.html
│   │   └── register.html
│   ├── blog/             # 博客相關頁面
│   │   ├── create.html
│   │   ├── edit.html
│   │   ├── index.html
│   │   └── post.html
│   └── layout.html       # 布局模板
└── requirements.txt      # 依賴包列表

3. 核心代碼實現

3.1 安裝依賴

首先創建requirements.txt文件:

Flask==2.0.1
Flask-SQLAlchemy==2.5.1
Flask-Login==0.5.0
Flask-WTF==0.15.1
email-validator==1.1.3
Werkzeug==2.0.1

安裝依賴:

 
pip install -r requirements.txt

3.2 數據庫模型(models.py)

 
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
from datetime import datetimedb = SQLAlchemy()class User(UserMixin, db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(64), unique=True, nullable=False)email = db.Column(db.String(120), unique=True, nullable=False)password_hash = db.Column(db.String(128))posts = db.relationship('Post', backref='author', lazy='dynamic')comments = db.relationship('Comment', backref='author', lazy='dynamic')def set_password(self, password):self.password_hash = generate_password_hash(password)def check_password(self, password):return check_password_hash(self.password_hash, password)class Post(db.Model):id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String(100), nullable=False)content = db.Column(db.Text, nullable=False)created_at = db.Column(db.DateTime, default=datetime.utcnow)updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)comments = db.relationship('Comment', backref='post', lazy='dynamic')category_id = db.Column(db.Integer, db.ForeignKey('category.id'))category = db.relationship('Category', backref=db.backref('posts', lazy=True))def to_dict(self):return {'id': self.id,'title': self.title,'content': self.content,'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),'author': self.author.username,'comments_count': self.comments.count()}class Comment(db.Model):id = db.Column(db.Integer, primary_key=True)content = db.Column(db.Text, nullable=False)created_at = db.Column(db.DateTime, default=datetime.utcnow)user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)post_id = db.Column(db.Integer, db.ForeignKey('post.id'), nullable=False)class Category(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50), unique=True, nullable=False)

3.3 表單定義(forms.py)

 
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, TextAreaField, SelectField
from wtforms.validators import DataRequired, Email, EqualTo, ValidationError, Length
from models import Userclass RegistrationForm(FlaskForm):username = StringField('用戶名', validators=[DataRequired(), Length(min=2, max=20)])email = StringField('郵箱', validators=[DataRequired(), Email()])

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

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

相關文章

藍橋杯比賽

藍橋杯全國軟件和信息技術專業人才大賽是由工業和信息化部人才交流中心主辦,國信藍橋教育科技(北京)股份有限公司承辦的計算機類學科競賽。以下是其相關信息: 參賽對象 具有正式全日制學籍且符合相關科目報名要求的研究生、本科生…

高性能、云原生的對象存儲服務MinIO 詳細介紹與案例應用

什么是MinIO? MinIO是一個高性能、云原生的對象存儲服務,采用Apache License v2.0開源協議發布。它與Amazon S3云存儲服務API兼容,適合構建高性能、可擴展的存儲基礎設施。支持大規模非結構化數據的存儲,適合圖片、視頻、日志、備…

Transformer架構的解耦重組現象

技術演進圖譜與技術成熟度曲線 (一)架構創新范式迭代 1.1 Transformer架構的解耦重組現象 以2025年Opt模型為例,其通過引入強化學習微調模塊實現了傳統單層堆疊架構向"感知-推理分離"模式的轉型。實驗數據顯示,該架構…

Linux——線程(3)線程同步

一、線程同步的引入 通過上面的搶票系統我們發現,有的線程,進行工作(掛鎖),當其馬上結束工作(解鎖),發現外面有很多線程在排隊等著加鎖執行任務,這個線程解鎖后就立馬給…

基于go的簡單管理系統(增刪改查)

package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" )var db *sql.DBtype user struct {id intname stringage int }// 建立連接 func initDB() (err error) {dsn : "root:123456tcp(127.0.0.1:3306)/mysqltes…

HTN77A0原理圖提供聚能芯半導體禾潤一級代理技術支持免費送樣

在電源管理需求日益嚴苛的當下,禾潤 HTN77A0 以卓越性能脫穎而出。它不僅適配多種應用場景,還兼具高效節能與穩定輸出,為設備供能帶來革新體驗。 禾潤 HTN77A0 同步降壓變換器,憑借5V~130V 超寬輸入電壓范圍,打破傳統供…

小程序中的頁面跳轉

小程序中的頁面跳轉 在之前網頁的學習中,我們往往采用超鏈接,或者定義方法、函數等方式來實現頁面的跳轉,但是微信小程序中沒有超鏈接,那我們該如何實現呢?微信小程序的頁面跳轉包括兩個,一個是tabBar頁面…

在K8S遷移節點kubelet數據存儲目錄

默認k8s節點kubelet數據目錄在 /var/lib/kubelet,如果在部署前沒有做好規劃,其實默認就存儲在系統盤/分區下了,這樣會導致一個問題,如果數據量過大會導致kubelet服務異常,其次,系統盤下有一些系統服務引用&…

MySQL基礎關鍵_002_DQL(一)

目 錄 一、初始化 二、簡單查詢 1.部分語法規則 2.查詢一個字段 (1)查詢員工編號 (2)查詢員工姓名 3.查詢多個字段 (1)查詢員工編號、姓名 (2)查詢部門編號、名稱、位置 …

阿里云服務遷移實戰: 04-IP 遷移

普通過戶 如資料過戶按量付費EIP所述,如果原賬號是個人賬號,則目標賬號無限制,如果原賬號是企業賬號,則目標賬號必須為相同認證主體的企業賬號。 其主要操作就是,在原賬號發起過戶,在新賬號接收過戶。具體…

安恒安全培訓實習生,CTF方向面試題!

目均模擬真實CTF賽題,需結合動態調試與工具鏈(pwntools/ROPgadget/one_gadget)完成利用。 覆蓋棧、堆、格式化字符串、高級堆利用、沙箱逃逸五大方向,從基礎ROP到House of Apple,逐步提升對抗防護的能力。 題目1&…

【C++QT】Combo Box 組合框控件詳解

文章目錄 一、QComboBox(Combo Box)1. 基本用法2. 特性3. 信號與槽函數 二、QFontComboBox(Font Combo Box)1. 基本用法2. 特性3. 信號與槽函數 三、總結如果這篇文章對你有所幫助,渴望獲得你的一個點贊! 在…

Best Video下載器——全能高清無水印視頻下載工具

在當今短視頻和流媒體盛行的時代,用戶經常遇到想要下載視頻卻受限于平臺限制的情況。無論是收藏喜歡的影視片段、保存有價值的教程,還是進行二次創作,一款高效、免費且支持多平臺的視頻下載工具顯得尤為重要。Best Video下載器正是為此而生&a…

AI音頻核爆!Kimi開源“六邊形戰士”Kimi-Audio,ChatGPT語音版?

音頻處理領域的天花板被撕開了。 剛剛,kimi 發布全新通用音頻基礎模型 Kimi-Audio,這款由月之暗面(Moonshot AI)推出的開源模型,在 24 小時內收獲 3.2 萬星標,不僅以 1.28% 詞錯率刷新語音識別紀錄&#xf…

安裝VMware虛擬機時出現報錯:

如果已在 BIOS/固件設置中禁用 Intel VT-x,或主機自更改此設置后從未重新啟動,則 Intel VT-x 可能被禁用。 1.解決的方法: BIOS 設置要求 為了使 VMware Workstation 支持用戶級別的監控并允許模塊 MonitorMode 成功啟動,需確保…

基于ESP32 S3 + PVDF采集呼吸心率

壓電薄膜可以采集到微動特征,壓阻傳感器可以采集到是否有大重量壓力,利用這個特性實現類似于床帶采集呼吸心率,實現生命體征檢測功能 ESP32 S3 PVDF實現生命體征檢測帶 硬件: ESP32 S3PVDF壓敏壓阻涂鴉傳感器(可選支…

多模態大語言模型arxiv論文略讀(五十)

Pensieve: Retrospect-then-Compare Mitigates Visual Hallucination ?? 論文標題:Pensieve: Retrospect-then-Compare Mitigates Visual Hallucination ?? 論文作者:Dingchen Yang, Bowen Cao, Guang Chen, Changjun Jiang ?? 研究機構: 同濟大學…

智能駕駛新時代:NVIDIA高級輔助駕駛引領未來出行安全

智能駕駛新時代:NVIDIA高級輔助駕駛引領未來出行安全 在全球汽車產業數字化轉型的時代潮流中,高級輔助駕駛技術已逐漸成為推動產業革新的核心動力。作為這一領域的領導者之一,NVIDIA通過其先進的技術解決方案,正在積極塑造未來的…

總結小程序的坑

小程序中的wxss中 background不能使用本地圖片 解決方法: 使用 Base64 編碼(適合小圖片)使用網絡圖片, 網絡圖片需要用https用 image 標簽替代 分包的圖片主包不能使用,這是分包中的圖片資源默認不能被主包或其他分包直…

供應鏈管理-國際結算:本幣互換 / 數字貨幣橋 / 我國在沙特發行美債

一、本幣互換 本幣互換(Local Currency Swap)是指兩國(或地區)的央行(貨幣當局)簽訂協議,約定在一定條件下,任何一方可以一定數量的本幣交換等值的對方貨幣,用于雙邊貿易…