Prikaz uporabniških podatkov s pridobivanjem JavaScript: profili in objave
Eden od priljubljenih primerov uporabe zmogljivih zmožnosti interakcije API JavaScripta je pridobivanje in prikaz podatkov v realnem času iz ozadja. V tem primeru želite pridobiti informacije iz dveh povezanih tabel: ena se nanaša na objave uporabnika in druga na njegov profil. To je odličen pristop, da se naučite dinamično prikazati več naborov podatkov na svoji spletni strani in jih obravnavati v enem klicu API-ja.
The Fetch API morate uporabiti za pridobivanje podatkov iz ozadja, preden lahko nadaljujete. JavaScript bo razčlenil Odgovor JSON ki ga vrne Python API, ki vsebuje profil in objave. Profil in informacije lahko pravilno prikažete, če znate delati z DOM s pomočjo JavaScripta.
Čeprav se lahko zdi težko, je pridobivanje podatkov iz več tabel dejansko izvedljivo, če poznate strukturo odgovora. Obdelati morate podatki JSON in sestavite elemente HTML, da ga prikažete po oddaji zahteve za pridobivanje. Del tega je ustvarjanje seznamov ali razdelkov za uporabniške profile in objave, ki so jim priložene.
V tej vadnici vas bom popeljal skozi primer iz resničnega sveta, ki uporablja JavaScript za nalaganje podatkov o objavi in uporabniških profilov iz API-ja Python. Na koncu boste razumeli, kako upodobiti pridobljene podatke in se prepričati, da so pravilno prikazani na vaši strani HTML.
Ukaz | Primer uporabe |
---|---|
fetch() | Če želite začeti omrežno zahtevo za pridobivanje virov, uporabite ta ukaz. Tu se uporablja za pridobivanje objav in uporabniškega profila prek končne točke API-ja zaledja Python. |
.then() | Postopek za upravljanje obljube, ki jo vrne fetch(). Ko je odgovor pravilno pridobljen, se postopek obdelave podatkov izvede s pretvorbo v JSON s funkcijo.then(). |
response.json() | Telo JSON odgovora je razčlenjeno s to tehniko. Potreben je za delo z API-ji, ki zagotavljajo podatke v obliki JSON, kot so objave in uporabniški profili. |
createElement() | Ta tehnika JavaScript DOM dinamično zgradi element HTML. Gradnja in prikaz komponent, kot so uporabniški profili, in objavljanje gradiva, narejenega iz pridobljenih podatkov, sta dve glavni uporabi tega. |
append() | Ustvarjeni elementi so vstavljeni kot zadnji podrejeni element izbranega nadrejenega vozlišča z uporabo metode append(). Ta tehnika se uporablja za vključitev elementov v ogrodje HTML, kot so gumbi za spremljanje, uporabniški podatki in objave. |
JsonResponse() | Ta ukaz Django ustvari odziv HTTP s podatki, kodiranimi v JSON. Bistvenega pomena je za pošiljanje podatkov o objavah in profilih iz zaledja Python v čelni del JavaScript za obdelavo. |
values() | Djangova metoda values() ustvari objekt za rezultate poizvedbe, ki je podoben slovarju. V tem primeru se uporablja za pridobivanje objav, ki so povezane z določenim avtorjem. |
Profile.DoesNotExist | Zahtevanega profila ni mogoče najti v zbirki podatkov, zaradi česar se sproži ta izjema, specifična za Django. Zagotavlja, da v primeru, da profila ni mogoče najti, bo API prikazal napako 404 skupaj s koristnim sporočilom. |
TestCase | Preizkusi enot v Djangu so napisani z uporabo razreda TestCase. Bistvenega pomena je za preverjanje točnosti API-ja in zagotavljanje, da se objave in podatki o profilu vrnejo na želeni način pod različnimi pogoji. |
Razumevanje integracije JavaScript in Python za dinamično vsebino
Vključeni skripti prikazujejo, kako združiti vmesnik JavaScript in zaledje Python na enostaven za uporabo, a učinkovit način. Zahvaljujoč tej integraciji lahko spletna stran dinamično naloži podatke o objavi in uporabniške profile. The pridobi API je glavni del kode JavaScript; pošlje zahtevo zaledju in vrne odgovor JSON. The potem () tehnika v povezavi z obljubami omogoča skriptu, da zagotovi asinhrono nalaganje podatkov. Ta metoda izboljša uporabniško izkušnjo tako, da prepreči, da bi brskalnik zamrznil, medtem ko čaka na odgovor API-ja.
S pomočjo ID-ja uporabnika koda JavaScript pošlje zahtevo za pridobitev API-ju Python, ki vrne podatke o profilu in objavi. Skript najprej pretvori odgovor v JSON, preden spremeni DOM za prikaz profila in objav. To naredi tako, da ustvari elemente HTML, kot so odstavki in elementi seznama. Na primer, na novo zgrajena div elementi za uporabniško ime, sledilce in spremljanje se uporabljajo za prikaz podatkov profila. Vsaka informacija je dodana razdelku profila strani, potem ko je umeščena v ustrezno strukturo HTML.
Zaledje, ki ga je sestavil Django, je bistvenega pomena za pridobivanje podatkov o objavi in profilu iz baze podatkov. The JsonResponse funkcija v Pythonu pretvori podatke v JSON, ki je priporočena oblika za spletne API-je zaradi enostavnosti razčlenjevanja in lahke narave. The vrednosti() metoda v Djangu zagotavlja učinkovito iskanje objav v obliki slovarja. Na ta način bo frontend preprosto pregledoval objave in jih dinamično upodabljal na spletnem mestu. The Profil.DoesNotExist skript uporablja izjemo za obravnavo morebitnih težav in zagotavljanje ustreznih povratnih informacij v primerih, ko podatki niso na voljo.
Na splošno je spletno mesto dinamično in se lahko spremeni, ne da bi bilo treba znova naložiti celotno stran, zahvaljujoč kombinaciji Pythona in JavaScripta. Ta strategija še posebej dobro deluje na spletnih dnevnikih in spletnih mestih za družabna omrežja, kjer se informacije, ki jih ustvarijo uporabniki, vključno z objavami in profili, pogosto posodabljajo. Rešitev postane modularna in enostavna za vzdrževanje z upoštevanjem najboljših praks in organiziranjem kode v različne funkcije. Poleg tega vključitev testov enote zagotavlja, da so podatki o profilu in objavah vrnjeni natančno in da API deluje, kot je predvideno. To aplikacijam v realnem času omogoča, da optimizirajo delovanje in učinkoviteje obravnavajo napake.
Python in JavaScript za dinamično pridobivanje podatkov za uporabniške profile in objave
Glavna ideja tega pristopa je dinamično nalaganje uporabniških profilov in objav z integracijo vmesnika JavaScript z zaledjem Python API. Metoda uporablja ogrodje Django za Python na zaledju in standardni 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));
}
Pogled Python Django API za prikazovanje profila in objavljanje podatkov
Tabeli Profile in Objave sta dve povezani tabeli, iz katerih ta pogled Python Django pridobi podatke in jih vrne kot JSON za uporabniški vmesnik.
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)
Preizkus enote za Python Django View
Da bi zagotovili, da se podatki ustrezno strežejo, ta preskus enote preveri, ali Django API pravilno pridobi uporabniški profil in objave.
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)
}
Učinkovito ravnanje s podatki JSON za dinamične spletne aplikacije
Učinkovito ravnanje z odzivom JSON je ključnega pomena pri delu z API-ji, ki vračajo podatke iz številnih virov, vključno s profili uporabnikov in objavami. V prejšnjem primeru smo uporabili JavaScript za dinamično posodabljanje spletne strani po pridobivanju podatkov iz zaledja Python. Toda pri delu z njimi je bistvenega pomena tudi, da kar najbolje izkoristite, kako ravnate s podatki JSON in jih predstavljate. Skozi nize člankov lahko krožimo z uporabo učinkovitih zank, kot je forEach, in sestavite elemente HTML brez zapisovanja surovega HTML-ja v datoteko JavaScript s pomočjo tehnik, kot je createElement. Ta metoda ohranja modularnost kode in enostavnost vzdrževanja.
Obravnava napak in preverjanje podatkov sta ključna dodatna dejavnika, ki ju je treba upoštevati. Če z njim ne ravnamo ustrezno, lahko zaledje vrne netočne ali manjkajoče podatke, kar lahko povzroči težave na sprednjem delu. Pokvarjenim postavitvam ali težavam z JavaScriptom se lahko izognemo tako, da v kodo JavaScript implementiramo nadomestno strategijo, kot je ugotavljanje, ali odgovor vključuje zahtevane podatke, preden jih poskuša prikazati. Zanesljivost je ključnega pomena pri obsežnih spletnih aplikacijah, zato je še posebej pomembna. Še več, z uporabo Django's JsonResponse zagotavlja, da so podatki ustrezno oblikovani za uporabo na sprednji strani.
In nazadnje, pri delu z dinamično vsebino je varnost stalna skrb. Prečiščevanje podatkov pred prikazom je eden od načinov za odpravo tega in zaustavitev varnostnih napak, kot so napadi s skriptiranjem na več mestih (XSS). Izogibajte se uvajanju potencialno nevarne kode z uporabo vgrajenih zmožnosti spreminjanja DOM JavaScripta, kot je npr. textContent, namesto innerHTML. Z upoštevanjem teh smernic ste lahko prepričani, da so informacije na vaši spletni strani varne in vredne zaupanja.
Pogosta vprašanja o ravnanju s podatki JSON z JavaScriptom in Pythonom
- Kaj naredi fetch() boljši od drugih tehnik AJAX?
- fetch() ponuja sodoben, preprost API za pošiljanje zahtev HTTP; obljube se uporabljajo za upravljanje asinhronih nalog, kar odpravlja potrebo po zapletenih mehanizmih povratnega klica.
- Zakaj je response.json() uporabljen pri pridobivanju informacij iz API-ja?
- Za preoblikovanje neobdelanega odziva HTTP v objekt JSON, s katerim je enostavno manipulirati in ki ga prikaže JavaScript, je potreben 2. korak.
- Kako forEach pomoč pri prikazovanju podatkov v JavaScriptu?
- forEach je metoda, ki vam omogoča kroženje po nizih, kot je seznam objav, in dinamično dodajanje elementov HTML vsakemu elementu.
- Kakšna je vloga JsonResponse v Django API?
- Imenovano orodje Django JsonResponse pretvori podatke v JSON, tako da jih lahko frontend enostavno upravlja in prikaže z uporabo JavaScripta.
- Kako se je mogoče izogniti varnostnim napakam v JavaScriptu pri uporabi innerHTML?
- Za zaščito pred napadi XSS je bolje uporabiti JavaScript textContent oz 10 tehnike, namesto da bi vbrizgali potencialno škodljivo kodo.
Končne misli o pridobivanju in prikazovanju uporabniških podatkov
Za dinamične spletne strani, integracija JavaScript z zaledjem Python za pridobivanje in prikaz podatkov je učinkovita strategija. Popolno ponovno nalaganje strani ni potrebno za zagotovitev, da se uporabniški vmesnik učinkovito posodablja ob tehnikah, kot so prinašati in obdelavo odgovorov JSON. Uporabniška izkušnja je zaradi tega na splošno izboljšana.
Pri razvoju takih programov je treba upoštevati obvladovanje napak, varnost in optimizacijo. Aplikacija bo bolj odporna, če se obravnavajo nepopolni odgovori in je zagotovljeno čiščenje podatkov. Ta pristop zagotavlja močno podlago za dodajanje bolj izpopolnjenih funkcij vašemu projektu v prihodnosti.
Reference in dodatno branje
- Ta vsebina temelji na Djangovi uradni dokumentaciji za ravnanje JsonResponse , ki zagotavlja podroben vpogled v delovanje odzivov JSON v Djangu.
- Da bi razumeli več o JavaScriptu Fetch API , MDN ponuja izčrpno pokritost o tem, kako ga uporabljati za izdelavo zahtev HTTP.
- Drug koristen vir za manipulacijo DOM z JavaScriptom je dokumentacija createElement iz MDN, ki prikazuje, kako dinamično zgraditi elemente HTML.
- Za razumevanje integracije Pythona in Djanga za razvoj API-jev uradni Projekt Django spletno mesto ponuja podroben vodnik.
- Če želite izvedeti več o preprečevanju varnostnih ranljivosti v JavaScriptu, kot je XSS, ima OWASP koristen vodnik o Skriptno izvajanje med spletnimi mesti (XSS) napadi.