ساخت سیستم نوتیفیکیشن با پایتون و Flask

ساخت سیستم نوتیفیکیشن با پایتون و Flask

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

پیش‌نیازها

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

  • پایتون (نسخه 3.6 یا بالاتر)
  • Flask
  • یک محیط توسعه (IDE) مناسب

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

pip install Flask

طراحی سیستم نوتیفیکیشن

سیستم نوتیفیکیشن ما شامل اجزای زیر خواهد بود:

  • سرور Flask: مسئول دریافت درخواست‌ها و مدیریت نوتیفیکیشن‌ها.
  • پایگاه داده: برای ذخیره اطلاعات نوتیفیکیشن‌ها (مانند عنوان، متن، زمان ایجاد و وضعیت خوانده‌شدن). در این آموزش از یک پایگاه داده ساده مبتنی بر لیست پایتون استفاده می‌کنیم، اما در پروژه‌های واقعی، استفاده از پایگاه داده‌های رابطه‌ای مانند PostgreSQL یا MySQL توصیه می‌شود.
  • صف پیام (Message Queue): برای مدیریت ارسال نوتیفیکیشن‌ها به صورت ناهمزمان. این کار از مسدود شدن سرور اصلی جلوگیری می‌کند. در این آموزش از یک پیاده‌سازی ساده مبتنی بر لیست پایتون استفاده می‌کنیم، اما در پروژه‌های واقعی، استفاده از RabbitMQ یا Redis توصیه می‌شود.
  • کاربران: افرادی که نوتیفیکیشن‌ها را دریافت می‌کنند.

پیاده‌سازی سرور Flask

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

from flask import Flask, request, jsonify
import datetime

app = Flask(__name__)

# پایگاه داده نوتیفیکیشن‌ها (در یک پروژه واقعی از پایگاه داده رابطه‌ای استفاده کنید)
notifications = []

# صف پیام نوتیفیکیشن‌ها (در یک پروژه واقعی از RabbitMQ یا Redis استفاده کنید)
notification_queue = []

@app.route('/notifications', methods=['POST'])
def create_notification():
    data = request.get_json()
    user_id = data.get('user_id')
    title = data.get('title')
    message = data.get('message')

    if not user_id or not title or not message:
        return jsonify({'error': 'اطلاعات نامعتبر'}), 400

    notification_id = len(notifications) + 1
    notification = {
        'id': notification_id,
        'user_id': user_id,
        'title': title,
        'message': message,
        'created_at': datetime.datetime.now().isoformat(),
        'is_read': False
    }

    notifications.append(notification)
    notification_queue.append(notification) # اضافه کردن به صف پیام

    return jsonify({'message': 'نوتیفیکیشن ایجاد شد', 'id': notification_id}), 201

@app.route('/notifications/', methods=['GET'])
def get_notifications(user_id):
    user_notifications = [n for n in notifications if n['user_id'] == user_id]
    return jsonify(user_notifications)

@app.route('/notifications/', methods=['PUT'])
def mark_as_read(notification_id):
    for notification in notifications:
        if notification['id'] == notification_id:
            notification['is_read'] = True
            return jsonify({'message': 'نوتیفیکیشن به عنوان خوانده شده علامت‌گذاری شد'})
    return jsonify({'error': 'نوتیفیکیشن یافت نشد'}), 404

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

این کد یک سرور Flask ساده ایجاد می‌کند که دارای سه مسیر (endpoint) است:

  • /notifications (POST): برای ایجاد یک نوتیفیکیشن جدید.
  • /notifications/ (GET): برای دریافت لیست نوتیفیکیشن‌های یک کاربر خاص.
  • /notifications/ (PUT): برای علامت‌گذاری یک نوتیفیکیشن به عنوان خوانده شده.

پیاده‌سازی صف پیام

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

def process_notifications():
    while True:
        if notification_queue:
            notification = notification_queue.pop(0)
            # در اینجا می‌توانید منطق ارسال نوتیفیکیشن را پیاده‌سازی کنید
            # به عنوان مثال، ارسال ایمیل، پیامک یا push notification
            print(f"ارسال نوتیفیکیشن به کاربر {notification['user_id']}: {notification['title']} - {notification['message']}")
        else:
            # اگر صف پیام خالی بود، کمی صبر کنید
            import time
            time.sleep(1)

برای اجرای این تابع در یک thread جداگانه، می‌توانید از ماژول threading استفاده کنید:

import threading

# ایجاد و شروع thread برای پردازش نوتیفیکیشن‌ها
notification_thread = threading.Thread(target=process_notifications)
notification_thread.daemon = True # اجازه می‌دهد برنامه اصلی پس از اتمام threadها بسته شود
notification_thread.start()

این کد یک thread جدید ایجاد می‌کند که تابع process_notifications را اجرا می‌کند. notification_thread.daemon = True به این معنی است که thread به عنوان یک daemon اجرا می‌شود و پس از اتمام برنامه اصلی، به طور خودکار بسته می‌شود.

تست سیستم نوتیفیکیشن

برای تست سیستم نوتیفیکیشن، می‌توانید از ابزارهایی مانند curl یا Postman استفاده کنید. در اینجا چند مثال آورده شده است:

  • ایجاد نوتیفیکیشن:
  • curl -X POST -H "Content-Type: application/json" -d '{"user_id": 1, "title": "پیام جدید", "message": "شما یک پیام جدید دارید!"}' http://localhost:5000/notifications
  • دریافت نوتیفیکیشن‌های کاربر 1:
  • curl http://localhost:5000/notifications/1
  • علامت‌گذاری نوتیفیکیشن با ID 1 به عنوان خوانده شده:
  • curl -X PUT http://localhost:5000/notifications/1

بهبود سیستم نوتیفیکیشن

سیستم نوتیفیکیشن ما در حال حاضر بسیار ساده است. برای بهبود آن، می‌توانید اقدامات زیر را انجام دهید:

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

نتیجه‌گیری

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

بدون دیدگاه

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

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