当前位置: 首页 > 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()])
http://www.xdnf.cn/news/250003.html

相关文章:

  • Linux——线程(3)线程同步
  • ✨从噪声到奇迹:扩散模型如何“想象“出世界
  • 本地服务器备份网站数据,本地服务器备份网站的操作步骤
  • 产品手册小程序开发制作方案
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 17)
  • python自动化测试
  • 【业务领域】计算机网络基础知识
  • 基于预计技术研究加速因子:原理、应用场景及模型验证
  • socket-IO复用技术
  • 米酒的功能和优缺点
  • 范围for 和 万能引用
  • 【业务领域】电脑网卡是主板还是cpu(主板的网卡是什么意思)
  • 神经网络入门
  • 题解:CF1133E K Balanced Teams
  • 专题二十一:无线局域网——WLAN
  • VAO与VBO的相关操作
  • 【软件技能】Verdi使用技巧总结
  • TactileNet 利用 AI 生成触觉图形填补视障人士无障碍鸿沟
  • 文章记单词 | 第56篇(六级)
  • 【信息系统项目管理师-论文真题】2024上半年(第二批)论文详解(包括解题思路和写作要点)
  • 交我算使用保姆教程:在计算中心利用singularity容器训练深度学习模型
  • VLM-R1 训练:max_anyres_num 参数与多图处理机制解析
  • Origin绘图操作:图中迷你图绘制
  • 【c语言】字符函数和字符串函数
  • PB的框架advgui反编译后控件无法绘制的处理(即导入pbx的操作步骤)
  • 编程题python常用技巧-持续
  • 【java WEB】恢复补充说明
  • 基于hr2管理系统的学习
  • BG开发者日志501:故事模式的思路2
  • 2025五一杯数学建模B题:矿山数据处理问题,详细问题分析,思路模型