মডিউল ৫-৭ঃ জ্যাংগো ফর্মে ফাইল আপলোড
এই মডিউলে আমরা জ্যাংগো ফর্মের মাধ্যমে ফাইল আপলোড করা শিখব। প্রথমেই contactForm ফর্ম-ক্লাসটিতে একটি FileField এ্যাড করে নিচের মত করে লিখে ফেলি
Code:: 5.7.1 first_app/forms.py
from django import forms
class contactForm(forms.Form):
name = forms.CharField(label="Enter your Name:")
# email = forms.EmailField(label = "User Email")
# age = forms.IntegerField()
# weight = forms.FloatField()
# balance = forms.DecimalField()
# age = forms.CharField()
# check = forms.BooleanField()
# birthday = forms.CharField()
# appointment = forms.CharField()
# CHOICES = [('S', 'Small'), ('M', 'Medium'), ('L', 'Large')]
# size = forms.ChoiceField(choices=CHOICES)
# MEAL = [('P', 'Pepperoni'), ('M', 'Mashroom'), ('B', 'Beef')]
# pizza = forms.MultipleChoiceField(choices=MEAL)
file=forms.FileField()
ফর্মটির টেমপ্লেট ফাইলের <fom> ট্যাগে নতুন একটি এ্যাট্রিবিউট এ্যাড করি

এখানে, enctype="multipart/form-data" এ্যাড করার উদ্দ্যেশ্য হলো ফর্মটিতে ডেটার ( ইন্টিজার, ফ্লোট, ডাবল, স্ট্রিং ইত্যাদি ) পাশাপাশি ফাইল ইনপুট নিতে এলাও করা।
এখন, ইনপুট নেওয়া ফাইলটি ম্যানেজ করার জন্য ফর্মটির view ফাংশন নিচের মত করে লেখি
Code:: 5.7.2 first_app/views.py
.......
.......
.......
def DjangoForm(request):
if request.method == 'POST':
form = contactForm(request.POST, request.FILES)
if form.is_valid():
file = form.cleaned_data['file']
with open('./first_app/uploads/' + file.name, 'wb+') as destination:
for chunk in file.chunks():
destination.write(chunk)
print(form.cleaned_data)
else:
form = contactForm()
return render(request, './first_app/django_form.html', {'form':form})
খেয়াল করলে দেখতে পাবেন, contactForm ক্লাস কল করার সময় এখন আমরা এক্সট্রা একটা প্যারামিটার request.FILES পাস করেছি, কেননা POST রিকুয়েস্ট-এ থাকা ডেটার পাশাপাশি এখন আমাদের ফাইলও প্রয়োজন।
এরপর file ভ্যারিয়েবলে cleaned_data থেকে 'file' ফিল্ডে প্রাপ্ত ফাইলটি নেয়া হয়েছে। তারপর './first_app/uploads/' ডিরেকটরিতে ফাইলটি ওপেন করা হয়েছে 'wb+' মোডে, file.chunks() মেথড কল করে ফাইলটির প্রতিটি ছোট অংশ বা chunk কে destination অর্থ্যাৎ './first_app/uploads/' ডিরেকটরিতে write করা হয়েছে। এখানে 'wb+' মোডে ফাইলটি ওপেন করার কারন হলো ফাইলটির জন্য Read,Write .. সব ধরনের এক্সেস এলাও করা হয়েছে।
এখন চেক করার পালা যে আমাদের ফাইল আপলোড মেকানিজম ফর্মে কাজ করে কি না, প্রজেক্টটি রান করে ফর্মে নিচের মত করে একটি ফাইল সিলেক্ট করি

এবার সাবমিট বাটনে ক্লিক করে প্রজেক্টের './first_app/uploads/ ' ডিরেক্টরি লক্ষ্য করলে দেখতে পাব সেখানে 'Ratin.png' নামে একটা ফাইল আপলোড হয়েছে

Last updated