Visning af brugerdata med JavaScript Fetch: Profiler og indlæg
Et populært eksempel på JavaScripts potente API-interaktionsegenskaber er realtidshentning og visning af data fra en backend. I dette tilfælde ønsker du at udtrække information fra to sammenkædede tabeller: en vedrørende en brugers opslag og den anden til deres profil. Dette er en fantastisk tilgang til at lære, hvordan du dynamisk viser flere datasæt på din webside og håndterer dem i et enkelt API-kald.
De Hent API skal bruges til at hente dataene fra backend, før du kan fortsætte. JavaScript vil analysere JSON-svar der returneres af en Python API, der indeholder profilen og indlæggene. Du kan vise profilen og sende oplysningerne korrekt, hvis du ved, hvordan du arbejder med DOM ved hjælp af JavaScript.
Selvom det kan virke svært, er det faktisk muligt at hente data fra flere tabeller, hvis du ved, hvordan svaret er struktureret. Du skal behandle JSON-data og konstruer HTML-elementer for at vise det efter indsendelse af hentningsanmodningen. Oprettelse af lister eller sektioner til brugerprofiler og de indlæg, der hører til dem, er en del af dette.
Jeg vil tage dig gennem et eksempel fra den virkelige verden i denne tutorial, der bruger JavaScript til at indlæse postdata og brugerprofiler fra en Python API. Du vil forstå, hvordan du gengiver de hentede data til sidst, og sørg for, at de vises korrekt på din HTML-side.
Kommando | Eksempel på brug |
---|---|
fetch() | Brug denne kommando for at starte en netværksanmodning om at hente ressourcer. Her bruges det til at få indlæg og brugerprofilen via et Python-backend API-slutpunkt. |
.then() | En procedure til håndtering af løftet, som fetch() returnerer. Når svaret er blevet korrekt hentet, udføres datahåndteringsprocessen ved at konvertere det til JSON ved hjælp af funktionen.then(). |
response.json() | Svarets JSON-legeme analyseres ved hjælp af denne teknik. Det er nødvendigt for at arbejde med API'er, der leverer JSON-formaterede data, såsom indlæg og brugerprofiler. |
createElement() | Denne JavaScript DOM-teknik bygger et HTML-element dynamisk. Opbygning og visning af komponenter som brugerprofiler og udsendelse af materiale lavet ud fra de indhentede data er to hovedanvendelser for det. |
append() | Oprettede elementer indsættes som det sidste underordnede af en valgt overordnet node ved hjælp af append()-metoden. Denne teknik bruges til at inkorporere elementer i HTML-rammerne, såsom følgeknapper, brugeroplysninger og opslag. |
JsonResponse() | Denne Django-kommando producerer et HTTP-svar med data kodet i JSON. Det er vigtigt for at sende post- og profildata fra Python-backend til JavaScript-frontend til behandling. |
values() | Djangos values()-metode opretter et objekt til forespørgselsresultaterne, der ligner en ordbog. Det bruges i dette tilfælde til at få indlæg, der er knyttet til en bestemt forfatter. |
Profile.DoesNotExist | Den anmodede profil kan ikke findes i databasen, hvilket resulterer i, at denne Django-specifikke undtagelse opstår. Det sikrer, at i tilfælde af, at profilen ikke findes, vil API'en give en 404-fejl sammen med en nyttig meddelelse. |
TestCase | Enhedstest i Django er skrevet ved hjælp af TestCase-klassen. Det er afgørende for at verificere nøjagtigheden af API'et og sikre, at indlæg og profildata returneres på den ønskede måde under forskellige forhold. |
Forståelse af JavaScript og Python-integration til dynamisk indhold
De inkluderede scripts viser, hvordan man kombinerer en JavaScript-frontend og en Python-backend på en brugervenlig, men effektiv måde. En webside kan dynamisk indlæse postdata og brugerprofiler takket være denne integration. De hente API er hoveddelen af JavaScript-koden; det sender en anmodning til backend og returnerer et JSON-svar. De så() teknik i forbindelse med løfter gør det muligt for scriptet at garantere asynkron indlæsning af dataene. Denne metode forbedrer brugeroplevelsen ved at forhindre browseren i at fryse, mens den venter på API-svaret.
Ved hjælp af brugerens ID laver JavaScript-koden en hentningsanmodning til Python API, som returnerer profil- og postdata. Scriptet konverterer først svaret til JSON, før det ændrer DOM for at vise profilen og indlæggene. Det gør den ved at producere HTML-elementer såsom afsnit og listeelementer. For eksempel nybygget div elementer til brugernavnet, følgere og følgende bruges til at vise profildata. Hvert stykke information tilføjes til sidens profilsektion efter at være placeret i den korrekte HTML-struktur.
Den Django-byggede backend er afgørende for at få post- og profildataene ud af databasen. De JsonResponse funktion i Python transformerer dataene til JSON, som er det anbefalede format til online API'er på grund af dets lette parsing og lette natur. De værdier() metode i Django garanterer effektiv hentning af indlæg i et ordbogsformat. På denne måde vil det være nemt for frontenden at gennemgå indlæggene og dynamisk gengive dem på hjemmesiden. De Profil.Eksisterer ikke undtagelse bruges af scriptet til at håndtere potentielle problemer og sikre, at der gives den rigtige feedback i tilfælde, hvor data er utilgængelige.
Generelt er hjemmesiden dynamisk og kan ændres uden at kræve en hel sidegenindlæsning takket være kombinationen af Python og JavaScript. Denne strategi fungerer især godt på blogs og sociale netværkssider, hvor brugergenereret information, herunder indlæg og profiler, opdateres ofte. Løsningen bliver modulær og let at vedligeholde ved at overholde bedste praksis og organisere koden i forskellige funktioner. Derudover garanterer inklusion af enhedstests, at profil- og indlægsdata returneres nøjagtigt, og at API'en fungerer efter hensigten. Dette gør det muligt for apps i realtid at optimere ydeevnen og håndtere fejl mere effektivt.
Python og JavaScript til dynamisk datahentning til brugerprofiler og indlæg
Hovedideen bag denne tilgang er at indlæse brugerprofiler og indlæg dynamisk ved at integrere en JavaScript-grænseflade med en Python API-backend. Metoden gør brug af Django frameworket til Python på backend og standard JavaScript.
// JavaScript Code to Fetch and Display Profile and Posts
function load_profile(author_id) {
// Fetch profile and posts from the backend
fetch(`/profile/${author_id}`)
.then(response => response.json())
.then(response => {
// Create a profile section
const content_profile = document.createElement('div');
content_profile.className = "content_profile";
const user = document.createElement('h3');
user.innerHTML = response.prof.user;
const followers = document.createElement('p');
followers.innerHTML = `Followers: ${response.prof.followers}`;
const following = document.createElement('p');
following.innerHTML = `Following: ${response.prof.following}`;
const followButton = document.createElement('button');
followButton.className = "btn btn-primary";
followButton.innerHTML = "Follow";
content_profile.append(user, followers, following, followButton);
document.querySelector('#profile').append(content_profile);
// Display posts
response.posts.forEach(post => {
const postList = document.createElement('ul');
const authorInfo = document.createElement('li');
authorInfo.innerHTML = `${post.author} at ${post.timestamp} says:`;
const content = document.createElement('li');
content.innerHTML = post.content;
const likes = document.createElement('li');
likes.innerHTML = `${post.like} Likes`;
postList.append(authorInfo, content, likes);
document.querySelector('#postbox').append(postList);
});
})
.catch(error => console.error('Error loading profile:', error));
}
Python Django API-visning til visning af profil- og udsendelsesdata
Tabellerne Profil og Posts er to relaterede tabeller, som denne Python Django-visning henter data fra og returnerer som JSON, som brugergrænsefladen kan bruge.
from django.http import JsonResponse
from .models import Profile, Post
def profile_view(request, author_id):
try:
# Fetch profile and posts data
profile = Profile.objects.get(user_id=author_id)
posts = Post.objects.filter(author_id=author_id).values()
# Prepare the JSON response
return JsonResponse({
'prof': {
'user': profile.user.username,
'followers': profile.followers.count(),
'following': profile.following.count()
},
'posts': list(posts)
})
except Profile.DoesNotExist:
return JsonResponse({'error': 'Profile not found'}, status=404)
Enhedstest for Python Django View
For at sikre, at data serveres korrekt, verificerer denne enhedstest, at Django API korrekt henter brugerprofilen og indlæggene.
from django.test import TestCase
from .models import Profile, Post
class ProfileViewTest(TestCase):
def setUp(self):
# Create test data
user = User.objects.create(username='testuser')
profile = Profile.objects.create(user=user)
Post.objects.create(author=user, content='Test post')
def test_profile_view(self):
# Make request to the API
response = self.client.get('/profile/testuser')
self.assertEqual(response.status_code, 200)
data = response.json()
# Check if profile data is correct
self.assertEqual(data['prof']['user'], 'testuser')
self.assertEqual(len(data['posts']), 1)
}
Håndtering af JSON-data effektivt til dynamiske webapplikationer
Effektiv håndtering af JSON-svaret er afgørende, når du arbejder med API'er, der returnerer data fra adskillige kilder, herunder brugerprofiler og opslag. I det foregående eksempel brugte vi JavaScript til dynamisk at opdatere websiden efter at have hentet data fra en Python-backend. Men det er også vigtigt at få mest muligt ud af, hvordan du håndterer og præsenterer JSON-data, når du arbejder med dem. Vi kan cykle gennem rækker af artikler ved hjælp af effektive loops som til hver, og konstruer HTML-elementer uden at skrive rå HTML inde i JavaScript-filen ved hjælp af teknikker som skabeElement. Denne metode bevarer kodens modularitet og lette vedligeholdelse.
Fejlhåndtering og datavalidering er afgørende yderligere faktorer, der skal tages i betragtning. Hvis den ikke håndteres korrekt, kan backend returnere unøjagtige eller manglende data, hvilket kan føre til problemer på frontend. Vi kan undgå ødelagte layouts eller JavaScript-problemer ved at implementere en fallback-strategi i JavaScript-koden, såsom at bestemme, om svar indeholder de nødvendige data, før du forsøger at vise dem. Pålidelighed er afgørende i store webapplikationer, derfor er dette særligt vigtigt. Desuden ved hjælp af Django's JsonResponse garanterer, at dataene er korrekt formateret til frontend-forbrug.
Og endelig, mens du arbejder med dynamisk indhold, er sikkerhed en konstant bekymring. At rense dataene, før de vises, er en metode til at afhjælpe dette og stoppe sikkerhedsfejl som cross-site scripting (XSS)-angreb. Undgå at introducere potentielt farlig kode ved at bruge JavaScripts indbyggede DOM-modifikationsfunktioner, som f.eks. tekstindhold, snarere end innerHTML. Ved at overholde disse retningslinjer kan du være sikker på, at oplysningerne på din webside er sikre og troværdige.
Almindelige spørgsmål om håndtering af JSON-data med JavaScript og Python
- Hvad gør fetch() bedre end andre AJAX-teknikker?
- fetch() tilbyder en moderne, ligetil API til indsendelse af HTTP-anmodninger; løfter bruges til at håndtere asynkrone opgaver, hvilket eliminerer behovet for indviklede tilbagekaldsmekanismer.
- Hvorfor er response.json() bruges, mens du henter oplysninger fra en API?
- For at transformere det ubehandlede HTTP-svar til et JSON-objekt, der let kan manipuleres og vises med JavaScript, kræves trin 2.
- Hvordan gør forEach hjælp til at vise data i JavaScript?
- forEach er en metode, der lader dig sløjfe på tværs af arrays, som postlisten, og tilføje HTML-elementer dynamisk til hvert element.
- Hvad er rollen JsonResponse i en Django API?
- Et Django-værktøj kaldet JsonResponse konverterer dataene som JSON, så frontend kan administrere og vise dem med lethed ved hjælp af JavaScript.
- Hvordan kan sikkerhedsfejl i JavaScript undgås ved brug innerHTML?
- For at beskytte sig mod XSS-angreb er det at foretrække at bruge JavaScript textContent eller 10 teknikker frem for at injicere potentielt skadelig kode.
Sidste tanker om hentning og visning af brugerdata
For dynamiske websteder, integration JavaScript med en Python-backend til at hente og vise data er en effektiv strategi. En komplet sidegenindlæsning er ikke nødvendig for at garantere, at brugergrænsefladen opdateres effektivt, når teknikker som f.eks hente og håndtering af JSON-svar bruges. Brugeroplevelsen forbedres generelt som et resultat.
Fejlhåndtering, sikkerhed og optimering bør alle tages i betragtning, når sådanne programmer udvikles. Applikationen vil være mere modstandsdygtig, hvis ufuldstændige svar håndteres, og datasanering er sikret. Denne tilgang giver et stærkt grundlag for at tilføje mere sofistikerede funktioner til dit projekt i fremtiden.
Referencer og videre læsning
- Dette indhold er baseret på Djangos officielle dokumentation for håndtering JsonResponse , som giver detaljeret indsigt i, hvordan JSON-svar fungerer i Django.
- For at forstå mere om JavaScript Hent API , MDN tilbyder omfattende dækning af, hvordan man bruger det til at lave HTTP-anmodninger.
- En anden nyttig ressource til DOM-manipulation med JavaScript er skabeElement dokumentation fra MDN, som viser, hvordan man dynamisk bygger HTML-elementer.
- For at forstå Python og Django integration til API udvikling, den officielle Django projekt hjemmesiden giver en detaljeret vejledning.
- For at lære mere om at forhindre sikkerhedssårbarheder i JavaScript som XSS, har OWASP en nyttig vejledning om Cross-site Scripting (XSS) angreb.