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

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

در این مقاله، به آموزش گام به گام ساخت یک سیستم مدیریت ویدیوها (Video Management System – VMS) با استفاده از پایتون و فریم‌ورک Flask خواهیم پرداخت. این سیستم به کاربران امکان آپلود، ذخیره، مدیریت و پخش ویدیوها را می‌دهد. این آموزش برای توسعه‌دهندگان وب با دانش پایه پایتون و Flask مناسب است.

پیش‌نیازها

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

  • پایتون (نسخه 3.6 یا بالاتر)
  • Flask
  • یک پایگاه داده (مانند SQLite، PostgreSQL یا MySQL)
  • پیکربندی محیط توسعه (IDE)

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

pip install Flask

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

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

  • videos: جدول اصلی برای ذخیره اطلاعات ویدیوها.
    • id (INTEGER PRIMARY KEY AUTOINCREMENT): شناسه یکتا برای هر ویدیو
    • title (TEXT): عنوان ویدیو
    • description (TEXT): توضیحات ویدیو
    • filename (TEXT): نام فایل ویدیو
    • upload_date (TEXT): تاریخ آپلود ویدیو

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

import sqlite3

conn = sqlite3.connect('videos.db')
cursor = conn.cursor()

cursor.execute('''
    CREATE TABLE IF NOT EXISTS videos (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT,
        description TEXT,
        filename TEXT,
        upload_date TEXT
    )
''')

conn.commit()
conn.close()

ساختار پروژه

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

  • app.py: فایل اصلی برنامه Flask
  • templates: پوشه‌ای برای ذخیره فایل‌های HTML
  • static: پوشه‌ای برای ذخیره فایل‌های استاتیک (مانند CSS، JavaScript و تصاویر)
  • uploads: پوشه‌ای برای ذخیره فایل‌های ویدیو آپلود شده

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

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

from flask import Flask, render_template, request, redirect, url_for, send_from_directory
import os
import sqlite3
from datetime import datetime

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'
app.config['ALLOWED_EXTENSIONS'] = {'mp4', 'avi', 'mov'}

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']

def get_db_connection():
    conn = sqlite3.connect('videos.db')
    conn.row_factory = sqlite3.Row
    return conn

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

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST':
        if 'file' not in request.files:
            return redirect(url_for('upload'))

        file = request.files['file']

        if file.filename == '':
            return redirect(url_for('upload'))

        if not allowed_file(file.filename):
            return "فایل انتخاب شده مجاز نیست."

        filename = file.filename
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

        title = request.form['title']
        description = request.form['description']
        upload_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

        conn = get_db_connection()
        conn.execute('INSERT INTO videos (title, description, filename, upload_date) VALUES (?, ?, ?, ?)',
                     (title, description, filename, upload_date))
        conn.commit()
        conn.close()

        return redirect(url_for('index'))

    return render_template('upload.html')

@app.route('/video/')
def video(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

if __name__ == '__main__':
    os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
    app.run(debug=True)

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

فایل‌های HTML زیر برای رابط کاربری سیستم مدیریت ویدیوها استفاده می‌شوند:

index.html

<!DOCTYPE html>
<html>
<head>
    <title>لیست ویدیوها</title>
</head>
<body>
    <h1>لیست ویدیوها</h1>
    <a href="{{ url_for('upload') }}">آپلود ویدیو</a>
    <ul>
        {% for video in videos %}
            <li>
                <a href="{{ url_for('video', filename=video['filename']) }}">{{ video['title'] }}</a>
                <p>{{ video['description'] }}</p>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

upload.html

<!DOCTYPE html>
<html>
<head>
    <title>آپلود ویدیو</title>
</head>
<body>
    <h1>آپلود ویدیو</h1>
    <form method="POST" enctype="multipart/form-data">
        <label for="title">عنوان:</label><br>
        <input type="text" id="title" name="title" required><br><br>

        <label for="description">توضیحات:</label><br>
        <textarea id="description" name="description"></textarea><br><br>

        <label for="file">انتخاب فایل:</label><br>
        <input type="file" id="file" name="file" required><br><br>

        <input type="submit" value="آپلود">
    </form>
</body>
</html>

اجرای برنامه

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

python app.py

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

نکات تکمیلی

  • امنیت: در یک سیستم واقعی، باید اقدامات امنیتی بیشتری را برای محافظت از فایل‌های ویدیو و جلوگیری از حملات احتمالی انجام دهید.
  • مقیاس‌پذیری: برای سیستم‌های با حجم بالای ویدیو، استفاده از یک پایگاه داده قوی‌تر و یک سیستم ذخیره‌سازی ابری توصیه می‌شود.
  • رابط کاربری: می‌توانید با استفاده از CSS و JavaScript، رابط کاربری سیستم را بهبود بخشید.
  • مدیریت کاربران: برای سیستم‌های چندکاربره، باید سیستم مدیریت کاربران را پیاده‌سازی کنید.

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

بدون دیدگاه

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

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