Katika somo hili utakwenda kujifunza jinsi ya kushughulika na faili, kama ku upload faili kwenye django.
Katika mifumo mingi mitandaoni tunahitaji kupokea picha kutoka kwa watumiaji: iwe profile picture, product, receipt, au document. Django ni moja ya frameworks zinazoruhusu kushughulikia hii kwa urahisi sana kwa kutumia ImageField, MEDIA_URL, na MEDIA_ROOT.
Leo tutajifunza mfumo mzima kuanzia configuration hadi uonyeshaji wa picha.
Kwa default Django haitumii media (files zinazopakiwa), hivyo tunahitaji kuongeza settings mbili muhimu:
Hii ndiyo URL itakayotumika kuifikia picha kupitia browser.
Mfano:
MEDIA_URL = '/media/'
Hiki ni kipath cha folder halisi kwenye computer ambako picha zitahifadhiwa.
Mfano:
import os
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Zinawekwa ndani ya settings.py sehemu ya chini mara nyingi baada ya STATIC settings, mfano:
# Static files
STATIC_URL = '/static/'
# Media files
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
Kazi yake:
MEDIA_URL → Prefix ya kutembelea picha kupitia browser
MEDIA_ROOT → Folder ambapo picha zinawekwa kimwili
Hii ni muhimu kwenye development environment; bila hii Django haitoweza kuserve picha.
Fungua project_name/urls.py na ongeza:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... your URLs
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Kazi ya code hii:
Inaruhusu Django kuserve picha ukiwa kwenye development mode
Production haitumii hii (unakabidhi Nginx au cloud)
Fungua app/models.py:
from django.db import models
class ProfilePicture(models.Model):
title = models.CharField(max_length=100)
image = models.ImageField(upload_to='uploads/')
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
upload_to="uploads/" inasababisha picha kuwekwa ndani ya:
media/uploads/filename.jpg
ImageField inahitaji Pillow
Install Pillow:
pip install Pillow
Baada ya kuongeza model:
python manage.py makemigrations
python manage.py migrate
Django haitatengeneza jedwali
Huwezi kusave picha kwenye database
ImageField itatoa error
Fungua app/forms.py:
from django import forms
from .models import ProfilePicture
class PictureForm(forms.ModelForm):
class Meta:
model = ProfilePicture
fields = ['title', 'image']
from django.shortcuts import render, redirect
from .forms import PictureForm
def upload_picture(request):
if request.method == 'POST':
form = PictureForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('picture_list')
else:
form = PictureForm()
return render(request, 'upload_picture.html', {'form': form})
request.FILES MUST → bila hili Django haisomi picha
form.save() → inaandika data DB, na kuhifadhi picha MEDIA_ROOT
templates/upload_picture.html
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload Picture</button>
</form>
enctype="multipart/form-data" ni lazima?Bila hii browser haitatuma file
Hata kama form inaonekana sahihi, Django haitapokea picha
from django.shortcuts import render
from .models import ProfilePicture
def picture_list(request):
pictures = ProfilePicture.objects.all()
return render(request, 'picture_list.html', {'pictures': pictures})
templates/picture_list.html
<h2>Uploaded Pictures</h2>
{% for pic in pictures %}
<div style="margin-bottom:20px;">
<h4>{{ pic.title }}</h4>
<img src="{{ pic.image.url }}" width="200px">
</div>
{% empty %}
<p>No pictures uploaded.</p>
{% endfor %}
{{ pic.image.url }} → Django automatically hutengeneza URL ya picha
Ikiwa MEDIA_URL = "/media/", basi picha itapatikana kama:
127.0.0.1:8000/media/uploads/pic.jpg
Kwa utaratibu huu huu unaweza ku-upload PDF, documents, audio, videos au file lolote — ila badala ya ImageField utatumia FileField, na badala ya kuonyesha kwa <img> utaita file.url.
MEDIA_URL lazima iwe na slash mwisho (/media/ sio /media)
Production haitumii static() function; hutumia Nginx, Apache, au cloud storage
Unaweza kuongeza thumbnail generation kwa Pillow
Django admin inaweza ku-upload picha moja kwa moja
Katika somo hili umejifunza hatua zote muhimu za kushughulika na picha ndani ya Django:
Kuweka MEDIA_URL na MEDIA_ROOT kwenye settings.py
Kuandaa URL configuration ya media files
Kutengeneza model yenye ImageField
Kufanya migrations
Kutengeneza form ya kupokea picha
Kutengeneza view ya kusave picha
Kutengeneza template ya upload
Kuonyesha picha kwenye template
Maelezo ya msingi ya image handling kwenye Django
Jiunge nasi WhatsApp kupata update zetu
Umeionaje Makala hii.. ?
Katika somo hili tutaangalia jinsi ya kutengeneza fomu ya HTML kwa ajili ya kuingiza data kwenye jedwali la MenuItem, pamoja na kutengeneza view itakayopokea data hiyo na kuihifadhi kwenye database. Pia tutaunganisha form na URL route.
Soma Zaidi...Katika maeneo ya development, tunahitaji kutuma email mara nyingi kwa madhumuni ya: Kujaribu mfumo wa OTP Password reset System notifications Activation codes Lakini mara nyingi hatutaki emails ziondoke kwenda kwa watu halisi wakati bado tupo kwenye majaribio.
Soma Zaidi...Katika somo hili utakwenda kujifunz amaana ya inheritance na sheria za kuiandika inheritance.
Soma Zaidi...Katika somo hili tunakwenda kujifunza aina nyingine za data ambazo hutumika kwenye python.
Soma Zaidi...Katika somo hili tutajifunza njia mbili muhimu za kuongeza data kwenye database katika project yetu ya pybongo (app: menu). Njia hizi ni: Kutumia Django Admin Kutumia Django Shell Utafahamu pia jinsi ya kusajili models kwenye admin, jinsi ya kuingia admin panel, na namna ya kutengeneza entries mpya za MenuItem.
Soma Zaidi...Katika somo hili tutakwend akujifunza kuhusi Jinsi ya Kutumia JavaScript kwenye Fomu za Django
Soma Zaidi...Katika somo hili utakwend akujifunza jinsi ya kupokea na kuchakata fomu
Soma Zaidi...Katika somo hili utajifunz akutumia database kwenye python
Soma Zaidi...Katika somo hili utakwenda kujifunza kuhusu operator. Hasa hapa tutakwend akujifunz akuhusu comparison operaor.
Soma Zaidi...Katika somo hili utakwenda kujifunza jinsi ya ku host website ya Django. Hapa tutakwenda kutuma plaform ya pythonanywhere.com.
Soma Zaidi...