# CMS系统基础实现 以下是一个简单的基于Python和Flask的CMS系统实现。这个系统包含基本的文章发布、分类管理和用户认证功能。 ## 1. 项目结构 ``` cms/ ├── app.py # 主应用文件 ├── models.py # 数据库模型 ├── templates/ # 模板文件 │ ├── base.html # 基础模板 │ ├── index.html # 首页 │ ├── article.html # 文章详情 │ ├── login.html # 登录页面 │ ├── admin/ # 管理后台模板 │ │ ├── dashboard.html │ │ ├── articles.html │ │ └── categories.html ├── static/ # 静态文件 │ ├── css/ │ ├── js/ │ └── images/ └── requirements.txt # 依赖文件 ``` ## 2. 核心代码实现 app.py ```python from flask import Flask, render_template, request, redirect, url_for, flash, session from models import db, User, Article, Category from werkzeug.security import generate_password_hash, check_password_hash app = Flask(__name__) app.config['SECRET_KEY'] = 'your-secret-key' app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///cms.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db.init_app(app) # 初始化数据库 @app.before_first_request def create_tables(): db.create_all() # 创建默认管理员账户 if not User.query.filter_by(username='admin').first(): admin = User( username='admin', password=generate_password_hash('admin123'), is_admin=True ) db.session.add(admin) db.session.commit() # 首页 @app.route('/') def index(): articles = Article.query.order_by(Article.created_at.desc()).all() categories = Category.query.all() return render_template('index.html', articles=articles, categories=categories) # 文章详情 @app.route('/article/<int:article_id>') def article_detail(article_id): article = Article.query.get_or_404(article_id) return render_template('article.html', article=article) # 登录 @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] user = User.query.filter_by(username=username).first() if user and check_password_hash(user.password, password): session['user_id'] = user.id session['is_admin'] = user.is_admin flash('登录成功', 'success') return redirect(url_for('admin_dashboard')) flash('用户名或密码错误', 'danger') return render_template('login.html') # 登出 @app.route('/logout') def logout(): session.clear() flash('您已登出', 'info') return redirect(url_for('index')) # 管理后台 @app.route('/admin') def admin_dashboard(): if not session.get('is_admin'): flash('请先登录管理员账户', 'warning') return redirect(url_for('login')) return render_template('admin/dashboard.html') # 文章管理 @app.route('/admin/articles') def admin_articles(): if not session.get('is_admin'): return redirect(url_for('login')) articles = Article.query.all() return render_template('admin/articles.html', articles=articles) # 添加文章 @app.route('/admin/article/add', methods=['GET', 'POST']) def add_article(): if not session.get('is_admin'): return redirect(url_for('login')) if request.method == 'POST': title = request.form['title'] content = request.form['content'] category_id = request.form['category_id'] article = Article( title=title, content=content, category_id=category_id, author_id=session['user_id'] ) db.session.add(article) db.session.commit() flash('文章添加成功', 'success') return redirect(url_for('admin_articles')) categories = Category.query.all() return render_template('admin/add_article.html', categories=categories) # 分类管理 @app.route('/admin/categories') def admin_categories(): if not session.get('is_admin'): return redirect(url_for('login')) categories = Category.query.all() return render_template('admin/categories.html', categories=categories) if __name__ == '__main__': app.run(debug=True) ``` models.py ```python from flask_sqlalchemy import SQLAlchemy from datetime import datetime db = SQLAlchemy() class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) password = db.Column(db.String(120), nullable=False) is_admin = db.Column(db.Boolean, default=False) articles = db.relationship('Article', backref='author', lazy=True) class Category(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), unique=True, nullable=False) articles = db.relationship('Article', backref='category', lazy=True) class Article(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(120), 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) author_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) category_id = db.Column(db.Integer, db.ForeignKey('category.id'), nullable=False) ``` ## 3. 安装依赖 创建requirements.txt文件: ``` Flask==2.0.1 Flask-SQLAlchemy==2.5.1 Werkzeug==2.0.1 ``` 安装依赖: ```bash pip install -r requirements.txt ``` ## 4. 运行系统 ```bash python app.py ``` ## 5. 功能扩展建议 1. 添加用户注册功能 2. 实现文章评论系统 3. 添加富文本编辑器支持 4. 实现文件上传功能 5. 添加文章标签系统 6. 实现搜索功能 7. 添加缓存机制提高性能 8. 实现多语言支持 这个基础CMS系统提供了核心功能,可以根据需要进一步扩展和完善。 [2025-04-05 07:01:05 | AI问答 | 1455点数解答]