ساخت سیستم کامنت‌گذاری با پایتون و فریم‌ورک Flask

ساخت سیستم کامنت‌گذاری با پایتون و فریم‌ورک Flask

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

پیش‌نیازها

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

  • پایتون (نسخه 3.6 یا بالاتر)
  • فریم‌ورک Flask
  • یک ویرایشگر کد (مانند VS Code، PyCharm یا Sublime Text)
  • آشنایی با مفاهیم پایه‌ای HTML، CSS و JavaScript
  • آشنایی با مفاهیم پایه‌ای پایتون (متغیرها، توابع، کلاس‌ها، لیست‌ها، دیکشنری‌ها)

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

pip install Flask

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

برای ذخیره کامنت‌ها، به یک پایگاه داده نیاز داریم. در این آموزش، از یک پایگاه داده ساده مبتنی بر فایل استفاده می‌کنیم. در پروژه‌های بزرگتر، استفاده از پایگاه داده‌های رابطه‌ای مانند PostgreSQL یا MySQL توصیه می‌شود. ساختار پایگاه داده ما به صورت زیر خواهد بود:

  • id: شناسه یکتای کامنت (عدد صحیح)
  • post_id: شناسه پست مرتبط با کامنت (عدد صحیح)
  • author: نام نویسنده کامنت (رشته)
  • comment: متن کامنت (رشته)
  • date: تاریخ و زمان ایجاد کامنت (رشته)

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

ساختار پروژه

ساختار پروژه ما به صورت زیر خواهد بود:

  • app.py: فایل اصلی برنامه Flask
  • templates: پوشه‌ای که فایل‌های HTML را در خود جای می‌دهد.
    • post.html: فایل HTML برای نمایش پست و کامنت‌ها

کدنویسی

فایل app.py

در این فایل، برنامه Flask را ایجاد می‌کنیم و مسیرهای (routes) مورد نیاز را تعریف می‌کنیم.

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

app = Flask(__name__)

# شبیه‌سازی پایگاه داده
comments = []

@app.route('/')
def index():
    return "سیستم کامنت‌گذاری در حال ساخت است."

@app.route('/post/')
def post(post_id):
    return render_template('post.html', post_id=post_id, comments=comments)

@app.route('/comment/', methods=['POST'])
def add_comment(post_id):
    author = request.form['author']
    comment = request.form['comment']
    date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    new_comment = {
        'id': len(comments) + 1,
        'post_id': post_id,
        'author': author,
        'comment': comment,
        'date': date
    }

    comments.append(new_comment)

    return redirect(url_for('post', post_id=post_id))

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

فایل templates/post.html

در این فایل، فرم کامنت‌گذاری و لیست کامنت‌ها را نمایش می‌دهیم.

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>پست <{{ post_id }}</title>
</head>
<body>

    <h1>پست <{{ post_id }}</h1>

    <h2>کامنت‌ها:</h2>

    <ul>
        <% for comment in comments if comment['post_id'] == post_id %>
            <li>
                <p>نویسنده: <{{ comment['author'] }}</p>
                <p>تاریخ: <{{ comment['date'] }}</p>
                <p>کامنت: <{{ comment['comment'] }}</p>
            </li>
        <% endfor %>
    </ul>

    <h2>ارسال کامنت جدید:</h2>

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

        <label for="comment">متن کامنت:</label>
        <textarea id="comment" name="comment" rows="4" cols="50" required></textarea><br><br>

        <input type="submit" value="ارسال کامنت">
    </form>

</body>
</html>

اجرای برنامه

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

python app.py

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

توضیحات کد

  • Flask: فریم‌ورک وب پایتون که برای ساخت برنامه‌های وب استفاده می‌شود.
  • render_template: تابعی که فایل‌های HTML را رندر می‌کند و داده‌ها را به آن‌ها ارسال می‌کند.
  • request: شیئی که اطلاعات درخواست HTTP را در خود نگه می‌دارد.
  • redirect: تابعی که کاربر را به یک URL دیگر هدایت می‌کند.
  • url_for: تابعی که URL مربوط به یک تابع (route) را بر اساس نام آن تولید می‌کند.
  • datetime: ماژولی که برای کار با تاریخ و زمان استفاده می‌شود.
  • comments: لیستی که کامنت‌ها را در خود ذخیره می‌کند.
  • @app.route: دکوراتوری که یک تابع را به یک URL خاص متصل می‌کند.
  • methods=[‘POST’]: مشخص می‌کند که تابع فقط درخواست‌های POST را قبول می‌کند.
  • request.form: دیکشنری‌ای که داده‌های ارسال شده از طریق فرم را در خود نگه می‌دارد.

بهبود سیستم

سیستم کامنت‌گذاری که در این آموزش ساختیم، بسیار ساده است و قابلیت‌های محدودی دارد. برای بهبود آن، می‌توانید موارد زیر را در نظر بگیرید:

  • استفاده از پایگاه داده واقعی: به جای استفاده از یک لیست پایتون، از یک پایگاه داده رابطه‌ای مانند PostgreSQL یا MySQL استفاده کنید.
  • اعتبارسنجی داده‌ها: داده‌های ارسالی از طریق فرم را اعتبارسنجی کنید تا از ورود داده‌های نامعتبر جلوگیری کنید.
  • پیاده‌سازی سیستم احراز هویت: به کاربران اجازه دهید با حساب کاربری خود کامنت ارسال کنند.
  • اضافه کردن قابلیت ویرایش و حذف کامنت‌ها: به کاربران اجازه دهید کامنت‌های خود را ویرایش یا حذف کنند.
  • پیاده‌سازی سیستم پاسخ به کامنت‌ها: به کاربران اجازه دهید به کامنت‌های دیگر پاسخ دهند.
  • استفاده از AJAX: برای ارسال کامنت‌ها بدون نیاز به بارگذاری مجدد صفحه، از AJAX استفاده کنید.
  • استفاده از یک کتابخانه قالب‌بندی HTML: برای جلوگیری از آسیب‌پذیری‌های امنیتی مانند XSS، از یک کتابخانه قالب‌بندی HTML استفاده کنید.

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

بدون دیدگاه

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

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