Kasutajaandmete kuvamine JavaScripti toomisega: profiilid ja postitused
Üks JavaScripti võimsate API interaktsioonivõimaluste populaarne kasutusjuht on andmete reaalajas hankimine ja kuvamine taustaprogrammist. Sel juhul soovite hankida teavet kahest lingitud tabelist: üks puudutab kasutaja postitusi ja teine tema profiili. See on suurepärane võimalus õppida, kuidas dünaamiliselt kuvada oma veebilehel mitut andmekomplekti ja käsitleda neid ühe API-kõnega.
The Tõmba API tuleb enne jätkamist kasutada taustaprogrammist andmete toomiseks. JavaScript sõelub JSON-vastus mille tagastab profiili ja postitusi sisaldav Pythoni API. Saate profiili kuvada ja teavet õigesti postitada, kui teate, kuidas JavaScripti kasutades DOM-iga töötada.
Kuigi see võib tunduda keeruline, on andmete hankimine mitmest tabelist tegelikult võimalik, kui teate, kuidas vastus on üles ehitatud. Peate töötlema JSON-i andmed ja koostage HTML-i elemendid, et seda pärast toomistaotluse esitamist näidata. Kasutajaprofiilide ja nendega kaasnevate postituste jaoks loendite või jaotiste loomine on osa sellest.
Selles õpetuses tutvustan teile reaalset näidet, mis kasutab Pythoni API-st postitusandmete ja kasutajaprofiilide laadimiseks JavaScripti. Saate aru, kuidas toodud andmed lõpuks renderdada ja veenduda, et need kuvatakse teie HTML-lehel õigesti.
Käsk | Kasutusnäide |
---|---|
fetch() | Võrgupäringu käivitamiseks ressursside toomiseks kasutage seda käsku. Siin kasutatakse seda postituste ja kasutajaprofiili hankimiseks Pythoni taustarakenduse API lõpp-punkti kaudu. |
.then() | Protseduur fetch() tagastamise lubaduse haldamiseks. Kui vastus on õigesti hangitud, viiakse andmetöötlusprotsess läbi, teisendades selle funktsiooni.then() abil JSON-iks. |
response.json() | Selle tehnika abil sõelutakse vastuse JSON-keha. See on vajalik töötamiseks API-dega, mis pakuvad JSON-vormingus andmeid (nt postitused ja kasutajaprofiilid). |
createElement() | See JavaScripti DOM-tehnika loob HTML-elemendi dünaamiliselt. Komponentide (nt kasutajaprofiilid ja hangitud andmete põhjal postitamine) loomine ja kuvamine on selle kaks peamist kasutust. |
append() | Loodud elemendid sisestatakse valitud vanemsõlme viimase alamastmena, kasutades meetodit append(). Seda tehnikat kasutatakse elementide, näiteks jälgimisnuppude, kasutajateabe ja postituste lisamiseks HTML-i raamistikku. |
JsonResponse() | See Django käsk loob HTTP-vastuse JSON-i kodeeritud andmetega. See on hädavajalik postitus- ja profiiliandmete saatmiseks Pythoni taustaprogrammist JavaScripti esiprogrammi töötlemiseks. |
values() | Django meetod value() loob päringutulemuste jaoks objekti, mis meenutab sõnaraamatut. Sel juhul kasutatakse seda konkreetse autoriga seotud postituste hankimiseks. |
Profile.DoesNotExist | Taotletud profiili ei saa andmebaasis leida, mille tulemuseks on see Django-spetsiifiline erand. See tagab, et juhul, kui profiili ei leita, annab API koos abistava sõnumiga veateate 404. |
TestCase | Django ühiktestid on kirjutatud klassi TestCase abil. See on hädavajalik API täpsuse kontrollimiseks ning postituste ja profiiliandmete soovitud viisil tagastamise tagamiseks erinevatel tingimustel. |
Dünaamilise sisu JavaScripti ja Pythoni integreerimise mõistmine
Kaasasolevad skriptid näitavad, kuidas ühendada JavaScripti ja Pythoni taustaprogrammi hõlpsalt kasutataval, kuid tõhusal viisil. Tänu sellele integratsioonile saab veebileht dünaamiliselt laadida postituste andmeid ja kasutajaprofiile. The hankige API on JavaScripti koodi põhiosa; see saadab päringu taustaprogrammi ja tagastab JSON-vastuse. The siis () tehnika koos lubadustega võimaldab skriptil tagada andmete asünkroonse laadimise. See meetod parandab kasutajakogemust, hoides brauserit API vastust ootamise ajal külmumast.
Kasutaja ID-d kasutades teeb JavaScripti kood Pythoni API-le allalaadimispäringu, mis tagastab profiili ja postituse andmed. Skript teisendab vastuse esmalt JSON-iks, enne kui muudab DOM-i profiili ja postituste kuvamiseks. See teeb seda HTML-i elementide, näiteks lõikude ja loendiüksuste loomisega. Näiteks äsja ehitatud div Kasutajanime, jälgijate ja jälgijate elemente kasutatakse profiiliandmete kuvamiseks. Iga teave lisatakse pärast õigesse HTML-struktuuri paigutamist lehe profiiliosasse.
Django sisseehitatud taustaprogramm on postituste ja profiiliandmete andmebaasist eemaldamiseks hädavajalik. The JsonResponse Funktsioon Pythonis muudab andmed JSON-iks, mis on veebipõhise API-de jaoks soovitatav vorming, kuna seda on lihtne sõeluda ja see on kerge. The väärtused () Django meetod tagab postituste tõhusa otsimise sõnaraamatu vormingus. Sel viisil on kasutajaliidesel lihtne postitused üle vaadata ja need veebisaidil dünaamiliselt renderdada. The Profiil.Pole olemas erandit kasutab skript võimalike probleemide lahendamiseks ja veendumaks, et andmete puudumisel antakse õige tagasiside.
Üldiselt on veebisait dünaamiline ja võib tänu Pythoni ja JavaScripti kombinatsioonile muutuda ilma täielikku lehe uuesti laadimist nõudmata. See strateegia töötab eriti hästi ajaveebides ja suhtlusvõrgustikes, kus kasutajate loodud teavet, sealhulgas postitusi ja profiile, uuendatakse sageli. Lahendus muutub modulaarseks ja hõlpsasti hooldatavaks, järgides parimaid tavasid ja korraldades koodi erinevateks funktsioonideks. Lisaks tagab ühikutestide kaasamine, et profiili ja postituste andmed tagastatakse täpselt ning API toimib ettenähtud viisil. See võimaldab reaalajas rakendustel jõudlust optimeerida ja vigu tõhusamalt käsitleda.
Python ja JavaScript kasutajaprofiilide ja postituste dünaamiliseks andmete toomiseks
Selle lähenemisviisi põhiidee on kasutajaprofiilide ja postituste dünaamiline laadimine, integreerides JavaScripti liidese Pythoni API taustaprogrammiga. Meetod kasutab Pythoni jaoks mõeldud Django raamistikku taustaprogrammis ja standardset JavaScripti.
// 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 vaade profiili teenindamiseks ja andmete postitamiseks
Tabelid Profiil ja Postitused on kaks seotud tabelit, millest see Python Django vaade hangib andmed ja tagastab kasutajaliidese jaoks JSON-vormingus.
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)
Ühikutest Python Django View jaoks
Andmete nõuetekohase edastamise tagamiseks kontrollib see üksuse test, et Django API hangib kasutajaprofiili ja postitused õigesti.
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)
}
JSON-andmete tõhus haldamine dünaamiliste veebirakenduste jaoks
JSON-vastuse tõhus käsitlemine on ülioluline, kui töötate API-dega, mis tagastavad andmeid paljudest allikatest, sealhulgas kasutajaprofiilidest ja postitustest. Eelmises näites kasutasime pärast Pythoni taustaprogrammist andmete toomist veebilehe dünaamiliseks värskendamiseks JavaScripti. Kuid JSON-andmete haldamise ja esitamise viiside maksimaalne ärakasutamine on samuti oluline nendega töötamisel. Saame artiklite massiive läbida, kasutades tõhusaid silmuseid nagu igale, ja konstrueerida HTML-i elemente ilma JavaScript-faili toor-HTML-i kirjutamata, kasutades selliseid tehnikaid nagu looElement. See meetod säilitab koodi modulaarsuse ja hoolduse lihtsuse.
Vigade käsitlemine ja andmete valideerimine on olulised lisategurid, mida tuleb arvesse võtta. Kui seda ei käsitleta õigesti, võib taustaprogramm tagastada ebatäpseid või puuduvaid andmeid, mis võib põhjustada probleeme esiprogrammis. Saame vältida rikkis paigutust või JavaScripti probleeme, rakendades JavaScripti koodis varustrateegia, näiteks määrates, kas vastuseks sisaldab vajalikke andmeid enne nende näitamist. Usaldusväärsus on suuremahuliste veebirakenduste puhul ülioluline, seetõttu on see eriti oluline. Veelgi enam, kasutades Django't JsonResponse garanteerib, et andmed on esiotsa tarbimiseks sobivalt vormindatud.
Ja lõpuks, dünaamilise sisuga töötades on turvalisus pidev mure. Andmete desinfitseerimine enne nende kuvamist on üks viis selle parandamiseks ja turvavigade, nagu XSS-i (cross-site scripting) rünnakute peatamiseks. Vältige potentsiaalselt ohtliku koodi sisestamist JavaScripti sisseehitatud DOM-i muutmisvõimaluste, näiteks tekstSisu, mitte sisemise HTML-i. Neid juhiseid järgides võite olla kindel, et teie veebilehel olev teave on turvaline ja usaldusväärne.
Levinud küsimused JSON-andmete käsitlemise kohta JavaScripti ja Pythoni abil
- Mis teeb fetch() parem kui teised AJAX-i tehnikad?
- fetch() pakub kaasaegset, lihtsat API-d HTTP-päringute esitamiseks; lubadusi kasutatakse asünkroonsete ülesannete haldamiseks, välistades vajaduse keerukate tagasihelistamismehhanismide järele.
- Miks on response.json() mida kasutatakse API-st teabe hankimisel?
- Selleks, et muuta töötlemata HTTP-vastus JSON-objektiks, mida on lihtne manipuleerida ja mida JavaScripti näidatakse, on vaja 2. sammu.
- Kuidas teeb forEach abi andmete kuvamisel JavaScriptis?
- forEach on meetod, mis võimaldab teil liikuda üle massiivide, nagu postituste loend, ja lisada igale üksusele dünaamiliselt HTML-elemente.
- Mis on roll JsonResponse Django API-s?
- Django tööriist nimega JsonResponse teisendab andmed JSON-iks, et kasutajaliides saaks neid JavaScripti abil hõlpsasti hallata ja kuvada.
- Kuidas saab JavaScripti kasutamisel vältida turvavigu? innerHTML?
- XSS-i rünnakute eest kaitsmiseks on eelistatav kasutada JavaScripti textContent või 10 potentsiaalselt kahjuliku koodi sisestamise asemel.
Viimased mõtted kasutajaandmete toomise ja kuvamise kohta
Dünaamiliste veebisaitide jaoks integreerimine JavaScript Pythoni taustaprogrammiga andmete toomiseks ja kuvamiseks on tõhus strateegia. Täielik lehe uuesti laadimine ei ole vajalik kasutajaliidese tõhusa värskendamise tagamiseks, kui sellised tehnikad nagu tooma kasutatakse JSON-i vastuste töötlemist. Selle tulemusel paraneb üldiselt kasutajakogemus.
Selliste programmide väljatöötamisel tuleks arvesse võtta vigade haldamist, turvalisust ja optimeerimist. Rakendus on vastupidavam, kui käsitletakse mittetäielikke vastuseid ja tagatakse andmete puhastamine. See lähenemisviis annab tugeva aluse teie projektile tulevikus keerukamate funktsioonide lisamiseks.
Viited ja lisalugemine
- See sisu põhineb Django ametlikul käsitlemise dokumentatsioonil JsonResponse , mis annab üksikasjaliku ülevaate sellest, kuidas JSON-vastused Djangos töötavad.
- JavaScripti kohta lisateabe saamiseks Tõmba API , pakub MDN igakülgset ülevaadet selle kohta, kuidas seda HTTP-päringute tegemiseks kasutada.
- Teine kasulik ressurss DOM-i manipuleerimiseks JavaScriptiga on CreateElement dokumentatsioon MDN-ist, mis näitab, kuidas dünaamiliselt luua HTML-elemente.
- Pythoni ja Django integreerimise mõistmiseks API arendamiseks on ametnik Django projekt veebisait pakub üksikasjalikku juhendit.
- JavaScripti (nt XSS) turvaaukude ennetamise kohta lisateabe saamiseks on OWASP-l kasulik juhend Saididevaheline skriptimine (XSS) rünnakud.