ساخت سیستم مدیریت ویدیوها با پایتون و 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 است. با استفاده از این آموزش و با کمی خلاقیت، میتوانید یک سیستم مدیریت ویدیوهای قدرتمند و سفارشیسازی شده ایجاد کنید.

بدون دیدگاه