当前位置: 首页 > news >正文

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()])

相关文章:

  • Linux 第六讲 --- 工具篇(一)yum/apt与vim
  • 一个linux系统电脑,一个windows电脑,怎么实现某一个文件夹共享
  • 部署企业网站内部导航 Team-Nav 2.0
  • MCAL学习(1)——AutoSAR
  • OpenGL-ES 学习(12) ---- GPU 系统结构
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(上)
  • 类和对象(拷贝构造和运算符重载)下
  • 脑机接口技术:开启人类与机器的全新交互时代
  • jupyter notebook汉化教程
  • 【RocketMQ 生产者消费者】- 同步、异步、单向发送消费消息
  • SIEMENS PLC程序代码 赋值 + 判断
  • 操作系统(1)多线程
  • CMake管理外部依赖的模块
  • 极大电视 0.0.5.2| 基于Web的电视直播应用,提供高清、流畅的央视频道和各大卫视直播,完全免费无广告
  • C# 方法的结构与执行详解
  • GD32F407单片机开发入门(二十五)HC-SR04超声波模块测距实战含源码
  • [计算机科学#7]:CPU的三阶段,取指令、解码、执行
  • 2025五一杯数学建模B题:矿山数据处理问题,详细问题分析,思路模型
  • 实习入职的总结
  • RPG_5.角色动画
  • “五一”假期国铁集团计划日均开行旅客列车超1.2万列
  • 泽连斯基:美乌矿产协议将提交乌拉达批准
  • 视频丨英伟达总裁黄仁勋:美勿幻想AI领域速胜中国
  • 从“长绳系日”特展看韩天衡求艺之路
  • 白玉兰奖征片综述丨国产剧集创作的此消彼长
  • 国台办:“台独”是绝路,外人靠不住