Xây dựng CMS với code Python và CSDL MySQL
Để xây dựng một hệ thống quản lý nội dung (CMS) cơ bản bằng Python và MySQL, bạn có thể sử dụng Flask và SQLAlchemy. SQLAlchemy là một thư viện ORM (Object-Relational Mapping) giúp quản lý cơ sở dữ liệu dễ dàng hơn. Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cách tạo CMS cơ bản với Flask và MySQL.
1. Cài Đặt Môi Trường#
Trước tiên, bạn cần cài đặt Python, pip, và các thư viện cần thiết:
Cài đặt Python và pip (nếu chưa có):
sudo apt update sudo apt install python3 python3-pipTạo và kích hoạt môi trường ảo:
python3 -m venv mycmsenv source mycmsenv/bin/activateCài đặt các thư viện cần thiết:
pip install Flask Flask-SQLAlchemy mysql-connector-python
2. Cài Đặt MySQL#
Cài đặt MySQL Server nếu chưa có:
sudo apt update sudo apt install mysql-server
Cấu hình MySQL: Đăng nhập vào MySQL và tạo cơ sở dữ liệu và người dùng:
sudo mysql -u root -p
Trong MySQL shell:
CREATE DATABASE mycmsdb; CREATE USER 'mycmsuser'@'localhost' IDENTIFIED BY 'mypassword'; GRANT ALL PRIVILEGES ON mycmsdb.* TO 'mycmsuser'@'localhost'; FLUSH PRIVILEGES; EXIT;
3. Tạo Cấu Trúc Dự Án#
Tạo cấu trúc thư mục cho dự án:
mycms/ │ ├── app.py ├── templates/ │ ├── index.html │ ├── add_post.html │ └── post.html └── static/ └── style.css
4. Viết Mã Nguồn#
app.py: Đây là file chính của ứng dụng Flask.
` from flask import Flask, render_template, request, redirect, url_for from flask_sqlalchemy import SQLAlchemy
app = Flask(name) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://mycmsuser:mypassword@localhost/mycmsdb' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app)
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)
@app.before_first_request def create_tables(): db.create_all()
@app.route('/') def index(): posts = Post.query.all() return render_template('index.html', posts=posts)
@app.route('/post/int:post_id') def post(post_id): post = Post.query.get_or_404(post_id) return render_template('post.html', post=post)
@app.route('/add_post', methods=['GET', 'POST']) def add_post(): if request.method == 'POST': title = request.form['title'] content = request.form['content'] new_post = Post(title=title, content=content) db.session.add(new_post) db.session.commit() return redirect(url_for('index')) return render_template('add_post.html')
if name == 'main': app.run(debug=True) `
templates/index.html: Trang chính hiển thị danh sách bài viết.
`
CMS Home
Add New Post-
{% for post in posts %}
- {{ post.title }} {% endfor %}
templates/post.html: Trang hiển thị nội dung của một bài viết.
`
{{ post.title }}
{{ post.content }}
Back to Home `templates/add_post.html: Trang để thêm bài viết mới.
`
Add New Post
Back to Home `static/style.css: Một file CSS đơn giản để làm đẹp trang web.
` body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; }
a { color: #0066cc; }
form { margin-bottom: 20px; } `
5. Chạy Ứng Dụng#
Chạy ứng dụng Flask bằng lệnh:
python app.py
6. Truy Cập Ứng Dụng#
Mở trình duyệt web và truy cập địa chỉ http://127.0.0.1:5000/. Bạn sẽ thấy trang chính của CMS, nơi bạn có thể thêm bài viết mới và xem các bài viết hiện có.
7. Mở Rộng CMS#
Đây là một CMS cơ bản. Để mở rộng, bạn có thể thêm các tính năng như:
Quản lý người dùng: Đăng nhập, phân quyền, và quản lý tài khoản người dùng.
Chỉnh sửa và xóa bài viết: Thêm tính năng để chỉnh sửa và xóa các bài viết hiện có.
Cải thiện giao diện người dùng: Sử dụng các thư viện CSS hoặc JavaScript để làm đẹp và cải thiện trải nghiệm người dùng.
Với những bước trên, bạn đã tạo ra một hệ thống quản lý nội dung cơ bản bằng Python và MySQL. Bạn có thể tiếp tục mở rộng và cải thiện hệ thống theo nhu cầu của mình.
Bài liên quan trong #Python
-
Code Python sử dụng FastAPI để tạo một API khởi chạy container Docker
minhdev -
Đánh Giá Hiệu Năng Code Python với Công Cụ Timeit
minhdev · 💬 2 -
Cách viết bot cho telegram bằng python
admin · 💬 5 -
Tự làm Blockchain đơn giản bằng Python
minhu -
Cách lấy dữ liệu bài đăng từ các nhóm facebook công khai
minhdev · 💬 1