ساخت سیستم مدیریت صفحات (CMS) با پایتون

ساخت سیستم مدیریت صفحات (CMS) با پایتون

سیستم‌های مدیریت محتوا (CMS) ابزارهای قدرتمندی هستند که به کاربران امکان می‌دهند محتوای وب‌سایت خود را بدون نیاز به دانش برنامه‌نویسی مدیریت کنند. در این مقاله، به بررسی فرایند ساخت یک CMS ساده با استفاده از پایتون و فریم‌ورک‌های مرتبط خواهیم پرداخت. این آموزش در دسته ‘توسعه وب با پایتون’ قرار می‌گیرد و هدف آن، ارائه یک درک عملی از نحوه پیاده‌سازی چنین سیستمی است.

پیش‌نیازها

برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:

  • دانش پایه پایتون
  • آشنایی با مفاهیم توسعه وب (HTML، CSS، JavaScript)
  • نصب پایتون و یک محیط توسعه (IDE)
  • آشنایی با فریم‌ورک‌های وب پایتون (Flask یا Django) – در این آموزش از Flask استفاده خواهیم کرد.
  • آشنایی با پایگاه داده (SQLite، PostgreSQL، MySQL) – در این آموزش از SQLite استفاده خواهیم کرد.

انتخاب فریم‌ورک و پایگاه داده

همانطور که اشاره شد، در این آموزش از Flask به عنوان فریم‌ورک وب و SQLite به عنوان پایگاه داده استفاده می‌کنیم. Flask یک فریم‌ورک سبک و انعطاف‌پذیر است که برای پروژه‌های کوچک و متوسط مناسب است. SQLite یک پایگاه داده رابطه‌ای است که داده‌ها را در یک فایل ذخیره می‌کند و نیازی به سرور جداگانه ندارد.

طراحی پایگاه داده

برای یک CMS ساده، به جداول زیر نیاز داریم:

  • users: اطلاعات کاربران (id, username, password, email)
  • pages: اطلاعات صفحات (id, title, content, author_id, created_at, updated_at)

می‌توانید این جداول را با استفاده از SQL ایجاد کنید. به عنوان مثال:

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT NOT NULL UNIQUE,
    password TEXT NOT NULL,
    email TEXT
);

CREATE TABLE pages (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    content TEXT NOT NULL,
    author_id INTEGER NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (author_id) REFERENCES users(id)
);

پیاده‌سازی Backend با Flask

اکنون می‌توانیم شروع به پیاده‌سازی Backend سیستم CMS خود کنیم. ابتدا، یک فایل پایتون (مثلاً app.py) ایجاد کنید و کد زیر را در آن قرار دهید:

from flask import Flask, render_template, request, redirect, url_for
import sqlite3

app = Flask(__name__)

DATABASE = 'cms.db'

def get_db_connection():
    conn = sqlite3.connect(DATABASE)
    conn.row_factory = sqlite3.Row
    return conn

@app.route('/')
def index():
    conn = get_db_connection()
    pages = conn.execute('SELECT * FROM pages').fetchall()
    conn.close()
    return render_template('index.html', pages=pages)

@app.route('/create', methods=['GET', 'POST'])
def create():
    if request.method == 'POST':
        title = request.form['title']
        content = request.form['content']
        author_id = 1  # فرض می‌کنیم کاربر فعلی id برابر 1 دارد
        conn = get_db_connection()
        conn.execute('INSERT INTO pages (title, content, author_id) VALUES (?, ?, ?)', (title, content, author_id))
        conn.commit()
        conn.close()
        return redirect(url_for('index'))
    return render_template('create.html')

@app.route('/edit/', methods=['GET', 'POST'])
def edit(id):
    conn = get_db_connection()
    page = conn.execute('SELECT * FROM pages WHERE id = ?', (id,)).fetchone()
    conn.close()
    if page is None:
        return 'Page not found', 404
    if request.method == 'POST':
        title = request.form['title']
        content = request.form['content']
        conn = get_db_connection()
        conn.execute('UPDATE pages SET title = ?, content = ? WHERE id = ?', (title, content, id))
        conn.commit()
        conn.close()
        return redirect(url_for('index'))
    return render_template('edit.html', page=page)

@app.route('/delete/')
def delete(id):
    conn = get_db_connection()
    conn.execute('DELETE FROM pages WHERE id = ?', (id,))
    conn.commit()
    conn.close()
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

این کد شامل مسیرهای زیر است:

  • /: نمایش لیست صفحات
  • /create: ایجاد یک صفحه جدید
  • /edit/: ویرایش یک صفحه
  • /delete/: حذف یک صفحه

پیاده‌سازی Frontend با HTML

اکنون باید فایل‌های HTML مورد نیاز برای Frontend را ایجاد کنیم. فایل‌های index.html، create.html و edit.html را در یک پوشه به نام templates ایجاد کنید.

index.html:

<!DOCTYPE html>
<html>
<head>
    <title>CMS</title>
</head>
<body>
    <h1>لیست صفحات</h1>
    <a href="{{ url_for('create') }}">ایجاد صفحه جدید</a>
    <ul>
        {% for page in pages %}
            <li>
                <a href="{{ url_for('edit', id=page['id']) }}">{{ page['title'] }}</a>
                <a href="{{ url_for('delete', id=page['id']) }}">حذف</a>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

create.html:

<!DOCTYPE html>
<html>
<head>
    <title>ایجاد صفحه جدید</title>
</head>
<body>
    <h1>ایجاد صفحه جدید</h1>
    <form method="post">
        <label for="title">عنوان:</label>
        <input type="text" id="title" name="title"><br>
        <label for="content">محتوا:</label>
        <textarea id="content" name="content"></textarea><br>
        <input type="submit" value="ذخیره">
    </form>
</body>
</html>

edit.html:

<!DOCTYPE html>
<html>
<head>
    <title>ویرایش صفحه</title>
</head>
<body>
    <h1>ویرایش صفحه</h1>
    <form method="post">
        <label for="title">عنوان:</label>
        <input type="text" id="title" name="title" value="{{ page['title'] }}"><br>
        <label for="content">محتوا:</label>
        <textarea id="content" name="content">{{ page['content'] }}</textarea><br>
        <input type="submit" value="ذخیره">
    </form>
</body>
</html>

اجرا و تست

اکنون می‌توانید برنامه را اجرا کنید. در ترمینال، به دایرکتوری حاوی فایل app.py بروید و دستور python app.py را اجرا کنید. سپس، مرورگر خود را به آدرس http://127.0.0.1:5000/ باز کنید. باید لیست صفحات را مشاهده کنید و بتوانید صفحات جدید ایجاد، ویرایش و حذف کنید.

گام‌های بعدی

این یک CMS بسیار ساده است. برای بهبود آن، می‌توانید موارد زیر را اضافه کنید:

  • احراز هویت و مدیریت کاربران
  • ویرایشگر متن غنی (WYSIWYG)
  • مدیریت رسانه
  • بهینه‌سازی SEO
  • پشتیبانی از قالب‌ها

با استفاده از پایتون و Flask، می‌توانید یک CMS قدرتمند و انعطاف‌پذیر ایجاد کنید که نیازهای خاص شما را برآورده کند.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *