Selle Pythoni õpetuse abil saate luua lihtsa, kuid tõhusa pildi üleslaadija.

Kaasaegse rakenduse üks ahvatlevamaid omadusi on selle võime mahutada pilte. Pildid, nagu pildid, illustratsioonid ja animatsioonid, toovad rakendusele visuaalse atraktiivsuse.

Kuigi pildid on olulised, võivad need rakendust aeglustada ja suurendada andmebaasi turvaohte.

Djangole ehitatud rakenduste puhul on piltide üleslaadimine lihtne ja turvaline. Djangol on spetsiaalne funktsioon, mis võimaldab piltide üleslaadimist.

Õpime üles laadima pilte Django rakendusse ilma turvalisust kahjustamata.

Mida sa vajad

Enne piltide üleslaadimise alustamist veenduge, et teil on järgmised nõuded.

  • Installige Python
  • Installige Pip
  • Installige Pipenv (soovi korral võid kasutada ka venv)
  • Installige Django
  • Teil on olemasolev Django rakendus, mis vajab pilte

Nüüd, kui teil on vajalikud sõltuvused, alustame.

1. Paigaldage padi

Djangol on Pildiväli oma mudelites. Väljale salvestatakse kujutiste üleslaadimised failisüsteemis määratud kohas, mitte andmebaasis. Padi on Pythoni teek, mis kontrollib ImageFieldis olevaid pilte.

Paigaldama padi kasutage allolevat käsku:

pipenv install pillow

Kui kasutate venv, kasutage selle asemel seda käsku

pip install pillow

2. Loo mudel

Loo an Pildiväli viide andmebaasis. Seejärel lisage Laadi üles argument mudelis. Argument määrab failisüsteemis salvestuskoha.

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'

Lõpus olev meetod aitab andmed teisendada stringideks.

Järgmisena migreerige ja tehke uued muudatused andmebaasi. Seejärel peate projekti sätteid muutma.

Liikuge projekti seadistusse. Pealkirja all # Staatilised failid (CSS, JavaScript, pildid), lisage meediumi 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')

Meedia URL-ide lisamine seadetesse määrab konkreetse marsruudi üleslaaditud piltide kuvamiseks. Meediumifail salvestab rakenduse pildid. Tee näeb välja selline: 127.0.0.1:8000/media/profile/image.jpg

Värskendage MALLID massiivi projekti seadetes. Lisama django.template.context_processors.media mallide massiivi juurde.

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'
],
},
},
]

Protsessorite meediumiseade aitab laadida üleslaaditud pilte rakenduse mallidesse.

Järgmisena peate lisama MEDIA_ROOT marsruut rakenduse URL-idele. See aitab laadida üleslaaditud pildid arendusserverisse.

Esiteks importige projekti seaded saidilt django.conf moodul ja a staatiline funktsioon. Seejärel lisage url-mustrid staatiline marsruut, mis näitab üleslaaditud failide asukohta.

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. Piltide üleslaadimise testimine

Järgmisena käivitage server:

python manage.py runserver

Kui vigu pole, navigeerige Django administraatoripaneelile, lisades baas-URL-ile administraatori marsruudi, http://127.0.0.1:8000/admin.

Kui klõpsate administraatori paneelil profiilimudelil, näete allossa lisatud pildivälja.

Kui laadite pildi üles, näete rakenduste kaustas uut kausta nimega meedia. Kui avate kausta, näete pilti, mille olete administraatori paneeli kaudu üles laadinud.

6. Kuvage üleslaaditud pilt

Profiilipildi kuvamiseks peaksite profiili malli värskendama.

Lisate an img sildi ja sisestage see profiili pilti atribuut. The Pildiväli sisaldab URL-i atribuuti, mis annab faili absoluutse URL-i. CSS-klasside abil saate määrata pildi kuju ja välimuse.

{% 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 %}

Pildi laadimiseks saate serveri käivitada. Seejärel kontrollige kuvatava pildi nägemiseks brauseris olevat malli.

Kuidas Django rakenduses pilte üles laadida

Django teeb piltide rakendustesse üleslaadimise lihtsaks. Django mudelitel on spetsiaalne väli, mis enne üleslaadimist lisab ja kontrollib failitüüpe.

ImageField pakub piltide salvestamiseks absoluutset teed failisüsteemi. Piltide salvestamine failisüsteemi suurendab rakenduse kiirust ja tagab, et andmebaasi ei tungiks kahjulikud failid.