ساخت سیستم امتیازدهی با پایتون و توسعه وب

ساخت سیستم امتیازدهی با پایتون و توسعه وب

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

مفاهیم کلیدی سیستم امتیازدهی

قبل از شروع کدنویسی، درک مفاهیم کلیدی یک سیستم امتیازدهی ضروری است:

  • موضوع امتیازدهی: چیزی که قرار است امتیاز داده شود (مثلاً یک محصول، یک مقاله، یک کاربر).
  • کاربر امتیازدهنده: کاربری که به موضوع امتیاز می‌دهد.
  • مقیاس امتیازدهی: محدوده مقادیری که می‌توان به عنوان امتیاز استفاده کرد (مثلاً 1 تا 5 ستاره، 1 تا 10، یا یک سیستم لایک/دیسلایک).
  • میانگین امتیاز: محاسبه میانگین امتیازات داده شده به یک موضوع.
  • تعداد امتیازات: تعداد کل امتیازاتی که یک موضوع دریافت کرده است.
  • جلوگیری از امتیازدهی تکراری: اطمینان از اینکه هر کاربر فقط یک بار به یک موضوع امتیاز دهد.

انتخاب چارچوب وب پایتون

برای ساخت سیستم امتیازدهی، می‌توان از چارچوب‌های مختلف وب پایتون استفاده کرد. دو گزینه محبوب عبارتند از:

  • Flask: یک چارچوب سبک و انعطاف‌پذیر که برای پروژه‌های کوچک و متوسط مناسب است.
  • Django: یک چارچوب قدرتمند و کامل که برای پروژه‌های بزرگ و پیچیده مناسب است.

در این مقاله، به دلیل سادگی و سهولت استفاده، از Flask استفاده خواهیم کرد.

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

برای ذخیره اطلاعات مربوط به امتیازات، به یک پایگاه داده نیاز داریم. می‌توان از پایگاه داده‌های رابطه‌ای مانند PostgreSQL یا MySQL، یا پایگاه داده‌های NoSQL مانند MongoDB استفاده کرد. در اینجا، از SQLite به عنوان یک پایگاه داده ساده و بدون نیاز به نصب سرور استفاده می‌کنیم.

طراحی پایگاه داده شامل جداول زیر است:

  • users: اطلاعات کاربران (id, username, password, …)
  • items: اطلاعات موضوعات امتیازدهی (id, name, description, …)
  • ratings: امتیازات داده شده (id, user_id, item_id, rating, timestamp)

پیاده‌سازی سیستم امتیازدهی با Flask

در این بخش، مراحل پیاده‌سازی سیستم امتیازدهی با Flask را بررسی می‌کنیم:

1. نصب Flask و SQLite

ابتدا Flask را با استفاده از pip نصب کنید:

pip install flask

SQLite به طور پیش‌فرض در پایتون وجود دارد و نیازی به نصب جداگانه ندارد.

2. ایجاد فایل برنامه Flask

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

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

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

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

def init_db():
    conn = get_db_connection()
    with open('schema.sql', mode='r') as f:
        conn.cursor().executescript(f.read())
    conn.commit()
    conn.close()

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

@app.route('/item/')
def item_detail(item_id):
    conn = get_db_connection()
    item = conn.execute('SELECT * FROM items WHERE id = ?', (item_id,)).fetchone()
    ratings = conn.execute('SELECT rating FROM ratings WHERE item_id = ?', (item_id,)).fetchall()
    if ratings:
        avg_rating = sum([r['rating'] for r in ratings]) / len(ratings)
    else:
        avg_rating = 0
    conn.close()
    return render_template('item_detail.html', item=item, avg_rating=avg_rating)

@app.route('/rate/', methods=['POST'])
def rate_item(item_id):
    user_id = 1  # فرض می‌کنیم کاربر لاگین شده با ID 1 است
    rating = int(request.form['rating'])
    conn = get_db_connection()
    conn.execute('INSERT INTO ratings (user_id, item_id, rating) VALUES (?, ?, ?)', (user_id, item_id, rating))
    conn.commit()
    conn.close()
    return redirect(url_for('item_detail', item_id=item_id))

if __name__ == '__main__':
    # init_db() # فقط یک بار برای ایجاد پایگاه داده اجرا کنید
    app.run(debug=True)

3. ایجاد فایل schema.sql

یک فایل به نام schema.sql ایجاد کنید و کد زیر را در آن قرار دهید (این کد جداول پایگاه داده را ایجاد می‌کند):

DROP TABLE IF EXISTS users;
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT NOT NULL,
    password TEXT NOT NULL
);

DROP TABLE IF EXISTS items;
CREATE TABLE items (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    description TEXT
);

DROP TABLE IF EXISTS ratings;
CREATE TABLE ratings (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    item_id INTEGER NOT NULL,
    rating INTEGER NOT NULL,
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (item_id) REFERENCES items(id)
);

4. ایجاد فایل‌های HTML (templates)

یک پوشه به نام templates ایجاد کنید و فایل‌های HTML زیر را در آن قرار دهید:

index.html

<!DOCTYPE html>
<html>
<head>
    <title>لیست آیتم‌ها</title>
</head>
<body>
    <h1>لیست آیتم‌ها</h1>
    <ul>
        {% for item in items %}
            <li><a href="{{ url_for('item_detail', item_id=item['id']) }}">{{ item['name'] }}</a></li>
        {% endfor %}
    </ul>
</body>
</html>

item_detail.html

<!DOCTYPE html>
<html>
<head>
    <title>{{ item['name'] }}</title>
</head>
<body>
    <h1>{{ item['name'] }}</h1>
    <p>{{ item['description'] }}</p>
    <p>میانگین امتیاز: {{ avg_rating }}</p>

    <form method="post" action="{{ url_for('rate_item', item_id=item['id']) }}">
        <label for="rating">امتیاز خود را وارد کنید (1-5):</label>
        <input type="number" id="rating" name="rating" min="1" max="5" required>
        <button type="submit">ارسال</button>
    </form>
</body>
</html>

5. اجرای برنامه

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

python app.py

برنامه Flask در آدرس http://127.0.0.1:5000/ اجرا خواهد شد.

بهبود سیستم امتیازدهی

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

  • احراز هویت کاربران: اضافه کردن سیستم احراز هویت برای اطمینان از اینکه فقط کاربران ثبت‌نام شده می‌توانند امتیاز دهند.
  • جلوگیری از امتیازدهی تکراری: بررسی اینکه آیا کاربر قبلاً به این موضوع امتیاز داده است یا خیر.
  • محاسبه وزن‌دار امتیازات: در نظر گرفتن عواملی مانند زمان امتیازدهی (امتیازات جدیدتر وزن بیشتری داشته باشند) یا اعتبار کاربر (کاربران معتبر وزن بیشتری داشته باشند).
  • نمایش بصری امتیازات: استفاده از نمودارها و گراف‌ها برای نمایش بصری امتیازات.
  • اضافه کردن نظرات: امکان دادن به کاربران برای نوشتن نظرات در مورد موضوعات.

نتیجه‌گیری

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

بدون دیدگاه

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

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