ساخت سیستم مدیریت نظرات با پایتون و 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) | نام نویسنده نظر |
| 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: فایل اصلی برنامه Flasktemplates/: پوشهای برای فایلهای HTMLstatic/: پوشهای برای فایلهای 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 ارائه میدهد. با تمرین و افزودن ویژگیهای بیشتر، میتوانید یک سیستم کامل و کاربردی ایجاد کنید.

بدون دیدگاه