Bygg en enkel men effektiv bilduppladdare med denna Python-handledning.
En av de mest tilltalande funktionerna i en modern applikation är dess förmåga att rymma bilder. Bilder som bilder, illustrationer och animationer tilltalar en applikation visuellt.
Även om bilder är viktiga kan de sakta ner appen och öka säkerhetshoten mot databasen.
För applikationer byggda på Django är det enkelt och säkert att ladda upp bilder. Django har en specialiserad funktion som gör det möjligt att ladda upp bilder.
Låt oss lära oss hur man laddar upp bilder till en Django-app utan att kompromissa med säkerheten.
Vad du behöver
Innan du börjar ladda upp bilder, se till att du har följande krav:
- Installera Python
- Installera Pip
- Installera Pipenv (du kan också använda venv om du vill)
- Installera Django
- Du har en befintlig Django-app som behöver bilder
Nu när du har de nödvändiga beroenden låt oss börja.
1. Installera kudde
Django har en Bildfält i sina modeller. Fältet lagrar bilduppladdningar på en angiven plats i filsystemet, inte databasen. Kudde är ett Python-bibliotek som letar efter bilder i bildfältet.
Att installera kudde använd kommandot nedan:
pipenv install pillow
Om du använder venv, använd detta kommando istället
pip install pillow
2. Skapa modell
Skapa en Bildfält referens i databasen. Lägg sedan till ladda upp till argument i modellen. Argumentet definierar en lagringsplats i filsystemet.
classProfile(models.Model):
name = models.CharField(max_length=80, blank=True)
bio = models.TextField(max_length=254, blank=True)
profile_picture = models.ImageField(upload_to='photos/')
def__str__(self):
returnf'{self.user.username} profile'
Metoden i slutet hjälper till att omvandla data till strängar.
Migrera sedan och överför de nya ändringarna till databasen. Sedan måste du redigera projektinställningarna.
Navigera till projektinställningen. Under rubriken # Statiska filer (CSS, JavaScript, bilder), lägg till media-URL.
# https://docs.djangoproject.com/en/4.0/howto/static-files/
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
# STATICFILES_STORAGE =
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Att lägga till media-URL: er till inställningar definierar en specifik väg för att visa uppladdade bilder. Mediafilen lagrar appbilderna. Vägen kommer att se ut så här: 127.0.0.1:8000/media/profile/image.jpg
Uppdatera MALLAR array i projektinställningarna. Lägg till django.template.context_processors.media till mallar array.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media'
],
},
},
]
Processorernas mediainställning hjälper till att ladda de uppladdade bilderna i appmallarna.
Därefter måste du lägga till MEDIA_ROOT väg till appens webbadresser. Detta hjälper till att ladda de uppladdade bilderna till framkallningsservern.
Importera först projektinställningarna från django.conf modul och en statisk funktion. Lägg sedan till urlmönster en statisk rutt som visar de uppladdade filernas plats.
from django.urls import path
from. import views
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = [
path('', views.index, name = 'index'),
path('profile', views.profile, name='profile'),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
urlpatterns += staticfiles_urlpatterns()
5. Testa bilduppladdningar
Kör sedan servern:
python manage.py runserver
Om det inte finns några fel, navigera till Djangos adminpanel genom att lägga till en administratörsrutt till bas-URL: http://127.0.0.1:8000/admin.
Inuti adminpanelen, när du klickar på profilmodellen, ser du ett bildfält lagt till längst ner.
När du laddar upp en bild kommer du att se en ny mapp skapad i appmappen som heter media. När du öppnar mappen ser du bilden du laddade upp via adminpanelen.
6. Visa den uppladdade bilden
Du bör uppdatera profilmallen för att visa profilbilden.
Du kommer att lägga till en img taggen och fyll den med profilbild attribut. De Bildfält har ett URL-attribut som tillhandahåller den absoluta URL: en till filen. Du kan ange bildens form och utseende med CSS-klasser.
{% extends "base.html" %}
{% load static %}
{% block content %}
<divclass="card mb-3 bg-whitesmoke"style="max-width: fit content;">
<divclass="row g-0">
<divclass="col-md-4">
<imgsrc="{{user.profile.profile_picture.url}}"width="100px"alt="profile pic"class="mx-auto d-block rounded-circle" />
div>
div>
div>
{% endblock %}
Du kan köra servern för att ladda bilden. Kontrollera sedan mallen i webbläsaren för att se bilden som visas.
Hur man laddar upp bilder i en Django-app
Django gör det enkelt att ladda upp bilder i dina applikationer. Django har ett specialiserat fält på sina modeller som lägger till och kontrollerar filtyp före uppladdning.
Bildfältet ger en absolut sökväg till ett filsystem för att lagra bilderna. Att lagra bilderna i ett filsystem ökar appens hastighet och säkerställer att databasen inte infiltreras med skadliga filer.