ساخت سیستم مدیریت تصاویر با پایتون و Flask
در این مقاله، به آموزش گام به گام ساخت یک سیستم مدیریت تصاویر (Image Management System) ساده با استفاده از پایتون و فریمورک Flask خواهیم پرداخت. این سیستم به کاربران امکان آپلود، نمایش، حذف و سازماندهی تصاویر را میدهد. این پروژه یک مثال عملی عالی برای توسعه وب با پایتون است و مفاهیم کلیدی مانند مدیریت فایلها، کار با فرمها، و استفاده از کتابخانههای پایتون را پوشش میدهد.
پیشنیازها
قبل از شروع، اطمینان حاصل کنید که موارد زیر را نصب کردهاید:
- پایتون (نسخه 3.6 یا بالاتر)
- Flask:
pip install Flask - Werkzeug:
pip install Werkzeug(معمولاً همراه Flask نصب میشود، اما در صورت نیاز جداگانه نصب کنید) - Pillow (PIL):
pip install Pillow(برای پردازش تصویر)
ساختار پروژه
ساختار پروژه ما به شکل زیر خواهد بود:
app.py: فایل اصلی برنامه Flasktemplates/: پوشهای برای فایلهای HTMLstatic/images/: پوشهای برای ذخیره تصاویر آپلود شده
مرحله اول: ایجاد فایل اصلی برنامه (app.py)
فایل app.py را با محتوای زیر ایجاد کنید:
from flask import Flask, render_template, request, redirect, url_for
from werkzeug.utils import secure_filename
from PIL import Image
import os
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'static/images'
app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg', 'gif'}
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route('/')
def index():
images = os.listdir(app.config['UPLOAD_FOLDER'])
return render_template('index.html', images=images)
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return redirect(url_for('index'))
file = request.files['file']
if file.filename == '':
return redirect(url_for('index'))
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
try:
img = Image.open(file)
img.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
except Exception as e:
return "مشکل در پردازش تصویر: " + str(e)
return redirect(url_for('index'))
else:
return "فرمت فایل مجاز نیست."
@app.route('/delete/')
def delete_file(filename):
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
try:
os.remove(file_path)
except OSError as e:
return "خطا در حذف فایل: " + str(e)
return redirect(url_for('index'))
if __name__ == '__main__':
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
app.run(debug=True)
در این کد:
UPLOAD_FOLDER: مسیری که تصاویر در آن ذخیره میشوند.ALLOWED_EXTENSIONS: لیست فرمتهای مجاز برای آپلود.allowed_file: تابعی برای بررسی اینکه آیا فایل آپلود شده فرمت مجاز دارد یا خیر.index: مسیری که لیست تصاویر را نمایش میدهد.upload_file: مسیری که فایل آپلود شده را پردازش و ذخیره میکند.delete_file: مسیری که فایل را حذف میکند.
مرحله دوم: ایجاد فایل HTML (index.html)
فایل templates/index.html را با محتوای زیر ایجاد کنید:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>سیستم مدیریت تصاویر</title>
</head>
<body>
<h1>سیستم مدیریت تصاویر</h1>
<form action="{{ url_for('upload_file') }}" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">آپلود تصویر</button>
</form>
<h2>لیست تصاویر</h2>
<ul>
{% for image in images %}
<li>
<img src="{{ url_for('static', filename='images/' + image) }}" alt="{{ image }}" width="200">
<a href="{{ url_for('delete_file', filename=image) }}">حذف</a>
</li>
{% endfor %}
</ul>
</body>
</html>
در این کد HTML:
- یک فرم برای آپلود فایل وجود دارد.
- یک لیست از تصاویر آپلود شده نمایش داده میشود.
- برای هر تصویر، یک لینک برای حذف آن وجود دارد.
مرحله سوم: اجرای برنامه
در ترمینال، به دایرکتوری پروژه بروید و دستور زیر را اجرا کنید:
python app.py
سپس، مرورگر خود را به آدرس http://127.0.0.1:5000/ باز کنید. اکنون میتوانید تصاویر را آپلود، نمایش و حذف کنید.
توضیحات تکمیلی و بهبودها
- امنیت: این سیستم یک مثال ساده است و فاقد ویژگیهای امنیتی پیشرفته است. در یک برنامه واقعی، باید اقدامات امنیتی مانند اعتبارسنجی ورودی، محافظت در برابر حملات CSRF و محدود کردن اندازه فایل را در نظر بگیرید.
- مدیریت خطا: مدیریت خطا در این سیستم بسیار ساده است. در یک برنامه واقعی، باید خطاها را به طور مناسب مدیریت کنید و پیامهای خطای مناسبی را به کاربر نمایش دهید.
- صفحهبندی: اگر تعداد تصاویر زیاد باشد، لیست تصاویر میتواند بسیار طولانی شود. برای بهبود تجربه کاربری، میتوانید از صفحهبندی استفاده کنید.
- پردازش تصویر: میتوانید از کتابخانه Pillow برای پردازش تصاویر، مانند تغییر اندازه، برش و اعمال فیلترها، استفاده کنید.
- پایگاه داده: برای ذخیره اطلاعات مربوط به تصاویر، مانند نام فایل، تاریخ آپلود و توضیحات، میتوانید از یک پایگاه داده استفاده کنید.
- رابط کاربری: میتوانید از CSS و JavaScript برای بهبود رابط کاربری سیستم استفاده کنید.
نتیجهگیری
در این مقاله، یک سیستم مدیریت تصاویر ساده با استفاده از پایتون و Flask ساختیم. این پروژه یک نقطه شروع عالی برای یادگیری توسعه وب با پایتون است و میتواند به عنوان پایهای برای ساخت سیستمهای پیچیدهتر مورد استفاده قرار گیرد. با افزودن ویژگیهای امنیتی، مدیریت خطا و رابط کاربری بهتر، میتوانید یک سیستم مدیریت تصاویر قدرتمند و کاربردی ایجاد کنید.

بدون دیدگاه