آموزش آپلود عکس در جنگو
June 2020
در این ویدیو با نحوه آپلود عکس در جنگو آشنا میشوید. برای اینکار نیازه که چند تا کار انجام بدیم. اول باید مدلمون رو ایجاد کنیم. برای ذخیره عکسهای آپلود شده باید از فیلد ImageField استفاده کنید. مدلی که استفاده میکنیم به شکل زیر خواهد بود:
class First(models.Model):
name = models.CharField(max_length=100)
image = models.ImageField(upload_to='home/%Y/%m/%d/')
نکتهای که باید از کد بالا بدونید این هست که در فیلد ImageField مقدار upload_to مشخص کننده مکانی هست که قراره عکس ذخیره بشه. این مسیر در انتهای MEDIA_ROOT قرار میگیره. پس در فایل settings.py مقادیر زیر رو مینویسیم:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
بعد از این موارد باید یک فرم ایجاد کنیم و به کاربر نشون بدیم:
from django import forms
class ImageForm(forms.Form):
name = forms.CharField()
image = forms.ImageField()
در مرحله بعد باید در فایل views.py این فرم رو کنترل کنیم:
from django.shortcuts import render, redirect
from .forms import ImageForm
from .models import First
def home(request):
infos = First.objects.all()
if request.method == 'POST':
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
First(name=form.cleaned_data['name'], image=request.FILES['image']).save()
return redirect('home:home')
else:
form = ImageForm()
return render(request, 'home/home.html', {'form':form, 'infos':infos})
اطلاعاتی که کاربر به عنوان فایل در یک فرم ذخیره میکنه در request.FILES ذخیره میشه.
حسین
September 2020پاسخ به نظر
سلام امیر جان فقط میتونم بگم کارت خیلی درسته
پاسخ به نظر
امیرحسین بیگدلو
September 2020سلام
چاکریم
شایان
July 2020پاسخ به نظر
سلام
ممنون از آموزش های خوبتون میشه آپلود ویدیو رو حالا چه به صورت تک قسمتی یا به صورت دوره جداگانه داخل سایت قرار بدید؟
پاسخ به نظر
امیرحسین بیگدلو
July 2020سلام
چشم، حتما
فرهاد
June 2020پاسخ به نظر
سلام
media_url در واقع url ای مجازی برای فایل های موجود در مسیر media_root را تنظیم می کند. وقتی شما media_url را بصورت amir وارد کردید مثل این هست که url ای که بصورت media/ بود را به amir/ تغییر نام میدهید بطوری که به فولدر فیزیکی media/ لینک خواهد شد.
پاسخ به نظر
امیرحسین بیگدلو
June 2020سلام
میدونم این موضوع رو اما حقیقتا انتظار نداشتم کار کنه