ساخت سیستم مدیریت نظرات با پایتون و Flask

ساخت سیستم مدیریت نظرات با پایتون و Flask

در این مقاله، به آموزش گام به گام ساخت یک سیستم مدیریت نظرات با استفاده از پایتون و فریم‌ورک Flask خواهیم پرداخت. این سیستم به کاربران اجازه می‌دهد تا نظرات خود را در مورد مقالات یا پست‌های وبلاگ ثبت کنند، و مدیران سایت می‌توانند این نظرات را مدیریت کنند (تایید، حذف، ویرایش). این آموزش در دسته ‘توسعه وب با پایتون’ قرار می‌گیرد و برای افرادی که با مفاهیم پایه پایتون و Flask آشنایی دارند، مناسب است.

پیش‌نیازها

قبل از شروع، اطمینان حاصل کنید که موارد زیر را دارید:

  • پایتون (نسخه 3.6 یا بالاتر)
  • Flask
  • یک پایگاه داده (مانند SQLite، PostgreSQL، MySQL)
  • یک ویرایشگر کد (مانند VS Code، PyCharm)

برای نصب Flask، می‌توانید از دستور زیر استفاده کنید:

pip install Flask

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

برای ذخیره نظرات، به یک پایگاه داده نیاز داریم. در اینجا، از یک جدول ساده با ساختار زیر استفاده می‌کنیم:

نام ستون نوع داده توضیحات
id INTEGER PRIMARY KEY AUTOINCREMENT شناسه یکتای نظر
post_id INTEGER شناسه پست مرتبط با نظر
author VARCHAR(255) نام نویسنده نظر
email VARCHAR(255) ایمیل نویسنده نظر
comment TEXT متن نظر
approved BOOLEAN وضعیت تایید نظر (True: تایید شده، False: تایید نشده)
created_at TIMESTAMP زمان ایجاد نظر

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

CREATE TABLE comments (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    post_id INTEGER,
    author VARCHAR(255),
    email VARCHAR(255),
    comment TEXT,
    approved BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ساختار پروژه

ساختار پروژه ما به شکل زیر خواهد بود:

  • app.py: فایل اصلی برنامه Flask
  • templates/: پوشه‌ای برای فایل‌های HTML
  • static/: پوشه‌ای برای فایل‌های CSS و JavaScript (اختیاری)
  • database.db: فایل پایگاه داده SQLite (یا فایل‌های پیکربندی برای پایگاه داده‌های دیگر)

کد برنامه (app.py)

در اینجا، کد اصلی برنامه Flask را ارائه می‌دهیم:

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

app = Flask(__name__)
DATABASE = 'database.db'

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

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

@app.route('/add_comment', methods=['POST'])
def add_comment():
    if request.method == 'POST':
        author = request.form['author']
        email = request.form['email']
        comment = request.form['comment']
        post_id = 1 # فرض می‌کنیم فقط یک پست داریم

        conn = get_db_connection()
        conn.execute('INSERT INTO comments (post_id, author, email, comment) VALUES (?, ?, ?, ?)',
                     (post_id, author, email, comment))
        conn.commit()
        conn.close()
        return redirect(url_for('index'))

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

@app.route('/approve_comment/')
def approve_comment(id):
    conn = get_db_connection()
    conn.execute('UPDATE comments SET approved = TRUE WHERE id = ?', (id,))
    conn.commit()
    conn.close()
    return redirect(url_for('admin'))

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

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

فایل‌های HTML (templates/)

در اینجا، فایل‌های HTML مورد نیاز را ارائه می‌دهیم:

index.html

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>نظرات</title>
</head>
<body>
    <h1>نظرات</h1>

    <form action="{{ url_for('add_comment') }}" method="post">
        <label for="author">نام نویسنده:</label>
        <input type="text" id="author" name="author" required><br>

        <label for="email">ایمیل:</label>
        <input type="email" id="email" name="email" required><br>

        <label for="comment">نظر:</label>
        <textarea id="comment" name="comment" rows="4" required></textarea><br>

        <input type="submit" value="ارسال نظر">
    </form>

    <h2>نظرات تایید شده:</h2>
    <ul>
        {% for comment in comments %}
            <li>
                <p>{{ comment['author'] }} - {{ comment['created_at'] }}</p>
                <p>{{ comment['comment'] }}</p>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

admin.html

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>مدیریت نظرات</title>
</head>
<body>
    <h1>مدیریت نظرات</h1>

    <ul>
        {% for comment in comments %}
            <li>
                <p>{{ comment['author'] }} - {{ comment['created_at'] }}</p>
                <p>{{ comment['comment'] }}</p>
                <a href="{{ url_for('approve_comment', id=comment['id']) }}">تایید</a> |
                <a href="{{ url_for('delete_comment', id=comment['id']) }}">حذف</a>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

اجرای برنامه

برای اجرای برنامه، فایل app.py را با استفاده از پایتون اجرا کنید:

python app.py

سپس، به آدرس http://127.0.0.1:5000/ در مرورگر خود بروید تا صفحه اصلی را مشاهده کنید. برای دسترسی به پنل مدیریت، به آدرس http://127.0.0.1:5000/admin بروید.

نکات تکمیلی

این یک سیستم مدیریت نظرات ساده است. می‌توانید آن را با افزودن ویژگی‌های زیر بهبود دهید:

  • اعتبارسنجی ورودی‌ها
  • پیاده‌سازی سیستم احراز هویت برای مدیران
  • استفاده از یک پایگاه داده قوی‌تر (مانند PostgreSQL یا MySQL)
  • افزودن قابلیت ویرایش نظرات
  • پیاده‌سازی pagination برای نمایش نظرات زیاد
  • استفاده از یک کتابخانه CSS (مانند Bootstrap) برای بهبود ظاهر

این آموزش به شما یک پایه قوی برای ساخت سیستم‌های مدیریت نظرات با پایتون و Flask ارائه می‌دهد. با تمرین و افزودن ویژگی‌های بیشتر، می‌توانید یک سیستم کامل و کاربردی ایجاد کنید.

بدون دیدگاه

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

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