Zobrazenie používateľských údajov pomocou funkcie JavaScript Fetch: Profily a príspevky
Jedným z populárnych prípadov použitia silných schopností interakcie API JavaScriptu je získavanie a zobrazovanie údajov z backendu v reálnom čase. V tomto prípade chcete získať informácie z dvoch prepojených tabuliek: jedna sa týka príspevkov používateľa a druhá ich profilu. Je to skvelý prístup, ako sa naučiť dynamicky zobrazovať niekoľko množín údajov na svojej webovej stránke a spracovať ich v rámci jedného volania rozhrania API.
The Fetch API musíte použiť na získanie údajov z backendu, než budete môcť pokračovať. JavaScript bude analyzovať Odpoveď JSON ktorý je vrátený Python API obsahujúcim profil a príspevky. Informácie o profile a príspevku môžete zobraziť správne, ak viete, ako pracovať s DOM pomocou JavaScriptu.
Hoci sa to môže zdať zložité, načítanie údajov z niekoľkých tabuliek je v skutočnosti možné, ak viete, ako je odpoveď štruktúrovaná. Musíte spracovať Údaje JSON a zostaviť prvky HTML, aby sa zobrazili po odoslaní žiadosti o načítanie. Súčasťou toho je vytváranie zoznamov alebo sekcií pre používateľské profily a s nimi súvisiace príspevky.
V tomto návode vás prevediem príkladom z reálneho sveta, ktorý používa JavaScript na načítanie údajov príspevkov a používateľských profilov z Python API. Do konca pochopíte, ako vykresliť načítané údaje, a uistíte sa, že sa na vašej stránke HTML zobrazujú správne.
Príkaz | Príklad použitia |
---|---|
fetch() | Ak chcete spustiť sieťovú požiadavku na získanie prostriedkov, použite tento príkaz. Tu sa používa na získanie príspevkov a používateľského profilu prostredníctvom koncového bodu rozhrania API Python. |
.then() | Postup na správu prísľubu, ktorý funkcia fetch() vráti. Po správnom získaní odpovede sa proces spracovania údajov vykoná ich konverziou na JSON pomocou funkcie.then(). |
response.json() | Telo JSON odpovede sa analyzuje pomocou tejto techniky. Je to nevyhnutné pre prácu s rozhraniami API, ktoré poskytujú údaje vo formáte JSON, ako sú príspevky a profily používateľov. |
createElement() | Táto technika JavaScript DOM dynamicky vytvára prvok HTML. Vytváranie a zobrazovanie komponentov, ako sú používateľské profily a zverejňovanie materiálov vytvorených zo získaných údajov, sú dve hlavné použitia. |
append() | Vytvorené prvky sa vložia ako konečný potomok zvoleného nadradeného uzla pomocou metódy append(). Táto technika sa používa na začlenenie položiek do rámca HTML, ako sú tlačidlá sledovania, informácie o používateľovi a príspevky. |
JsonResponse() | Tento príkaz Django vytvára odpoveď HTTP s údajmi zakódovanými v JSON. Je to nevyhnutné na odosielanie údajov o príspevku a profile z backendu Pythonu do frontendu JavaScript na spracovanie. |
values() | Metóda Django values() vytvorí pre výsledky dotazu objekt, ktorý sa podobá slovníku. V tomto prípade sa používa na získanie príspevkov, ktoré sú spojené s konkrétnym autorom. |
Profile.DoesNotExist | Požadovaný profil nemožno nájsť v databáze, čo má za následok vyvolanie tejto výnimky špecifickej pre Django. Zabezpečuje, že v prípade, že sa profil nenájde, API poskytne chybu 404 spolu s užitočnou správou. |
TestCase | Unit testy v Django sa píšu pomocou triedy TestCase. Je to nevyhnutné na overenie presnosti API a zabezpečenie toho, aby sa príspevky a údaje profilu vrátili požadovaným spôsobom za rôznych podmienok. |
Pochopenie integrácie JavaScriptu a Pythonu pre dynamický obsah
Zahrnuté skripty ukazujú, ako skombinovať frontend JavaScript a backend Python jednoduchým, no efektívnym spôsobom. Vďaka tejto integrácii môže webová stránka dynamicky načítať údaje príspevkov a používateľské profily. The načítať API je hlavnou časťou kódu JavaScript; odošle požiadavku na backend a vráti odpoveď JSON. The potom () technika v spojení s prísľubmi umožňuje skriptu zaručiť asynchrónne načítanie údajov. Táto metóda zlepšuje používateľskú skúsenosť tým, že zabraňuje zamrznutiu prehliadača počas čakania na odpoveď rozhrania API.
Pomocou ID používateľa kód JavaScript odošle požiadavku na načítanie do Python API, ktoré vráti údaje profilu a príspevku. Skript najprv skonvertuje odpoveď na JSON a až potom upraví DOM na zobrazenie profilu a príspevkov. Robí to vytváraním prvkov HTML, ako sú odseky a položky zoznamu. Napríklad novovybudované div prvky pre meno používateľa, sledovateľov a sledovanie sa používajú na zobrazenie údajov profilu. Každá informácia sa po umiestnení do správnej štruktúry HTML pridá do sekcie profilu stránky.
Backend vytvorený spoločnosťou Django je nevyhnutný na získanie údajov o príspevkoch a profile z databázy. The JsonResponse funkcia v Pythone transformuje údaje do JSON, čo je odporúčaný formát pre online API kvôli jeho ľahkej analýze a ľahkej povahe. The hodnoty() metóda v Django zaručuje efektívne vyhľadávanie príspevkov vo formáte slovníka. Týmto spôsobom bude pre frontend jednoduché prechádzať príspevky a dynamicky ich vykresľovať na webe. The Profile.DoesNotExist výnimku používa skript na riešenie potenciálnych problémov a zabezpečenie poskytnutia správnej spätnej väzby v prípadoch, keď údaje nie sú k dispozícii.
Celkovo je webová stránka dynamická a vďaka kombinácii Pythonu a JavaScriptu sa môže meniť bez potreby opätovného načítania stránky. Táto stratégia funguje obzvlášť dobre na blogoch a stránkach sociálnych sietí, kde sa často aktualizujú informácie generované používateľmi vrátane príspevkov a profilov. Riešenie sa stáva modulárnym a ľahko udržiavateľným dodržiavaním osvedčených postupov a usporiadaním kódu do odlišných funkcií. Zahrnutie jednotkových testov navyše zaručuje, že údaje o profile a príspevkoch sa vrátia presne a že rozhranie API funguje podľa plánu. To umožňuje aplikáciám v reálnom čase optimalizovať výkon a efektívnejšie riešiť chyby.
Python a JavaScript pre dynamické načítanie údajov pre používateľské profily a príspevky
Hlavnou myšlienkou tohto prístupu je dynamické načítanie používateľských profilov a príspevkov integráciou rozhrania JavaScript s backendom rozhrania Python API. Metóda využíva rámec Django pre Python na backende a štandardný 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));
}
Zobrazenie Python Django API na poskytovanie profilu a odosielanie údajov
Tabuľky Profil a Posts sú dve súvisiace tabuľky, z ktorých toto zobrazenie Python Django získava údaje a vracia ich ako JSON pre používateľské rozhranie.
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)
Unit Test pre Python Django View
Aby sa zabezpečilo, že údaje sa budú poskytovať správne, tento test jednotky overí, či Django API správne získava užívateľský profil a príspevky.
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)
}
Efektívne spracovanie údajov JSON pre dynamické webové aplikácie
Efektívne spracovanie odpovede JSON je kľúčové pri práci s rozhraniami API, ktoré vracajú údaje z mnohých zdrojov vrátane používateľských profilov a príspevkov. V predchádzajúcom príklade sme použili JavaScript na dynamickú aktualizáciu webovej stránky po načítaní údajov z backendu Pythonu. Pri práci s údajmi JSON je však tiež nevyhnutné maximálne využiť spôsob, akým narábate s údajmi JSON a ako ich prezentujete. Môžeme prechádzať poliami článkov pomocou efektívnych slučiek, ako napr pre každéhoa vytvárať prvky HTML bez písania nespracovaného kódu HTML do súboru JavaScript pomocou techník ako createElement. Táto metóda zachováva modularitu kódu a jednoduchosť údržby.
Spracovanie chýb a validácia údajov sú kľúčové dodatočné faktory, ktoré je potrebné vziať do úvahy. Ak nie je správne spracované, backend môže vrátiť nepresné alebo chýbajúce údaje, čo môže viesť k problémom na frontende. Nefunkčným rozloženiam alebo problémom s JavaScriptom sa môžeme vyhnúť implementáciou záložnej stratégie v kóde JavaScript, ako je napríklad určenie, či odpoveď obsahuje požadované údaje predtým, ako sa ich pokúsite zobraziť. Spoľahlivosť je kľúčová vo veľkých webových aplikáciách, preto je obzvlášť dôležitá. Navyše s využitím Django's JsonResponse zaručuje, že údaje sú vhodne naformátované na použitie na frontende.
A napokon, pri práci s dynamickým obsahom je bezpečnosť neustálym problémom. Dezinfekcia údajov pred ich zobrazením je jedným zo spôsobov, ako to napraviť a zastaviť bezpečnostné chyby, ako sú útoky cross-site scripting (XSS). Vyhnite sa zavádzaniu potenciálne nebezpečného kódu pomocou vstavaných možností úpravy DOM JavaScriptu, ako napr textObsah, skôr než innerHTML. Dodržiavaním týchto pokynov si môžete byť istí, že informácie na vašej webovej stránke sú bezpečné a dôveryhodné.
Bežné otázky týkajúce sa spracovania údajov JSON pomocou JavaScriptu a Pythonu
- Čo robí fetch() lepšie ako iné techniky AJAX?
- fetch() ponúka moderné, jednoduché rozhranie API na odosielanie požiadaviek HTTP; prísľuby sa používajú na riadenie asynchrónnych úloh, čím sa eliminuje potreba zložitých mechanizmov spätného volania.
- Prečo je response.json() používané pri získavaní informácií z API?
- Na transformáciu nespracovanej odpovede HTTP na objekt JSON, s ktorým sa dá ľahko manipulovať a ktorý sa zobrazuje pomocou JavaScriptu, je potrebný krok 2.
- Ako to robí forEach pomôcť pri zobrazovaní údajov v JavaScripte?
- forEach je metóda, ktorá vám umožňuje prechádzať poliami, napríklad zoznamom príspevkov, a dynamicky pridávať prvky HTML do každej položky.
- Aká je úloha JsonResponse v Django API?
- Nástroj Django tzv JsonResponse konvertuje údaje ako JSON, takže frontend ich môže ľahko spravovať a zobrazovať pomocou JavaScriptu.
- Ako sa dá vyhnúť bezpečnostným chybám v JavaScripte pri používaní innerHTML?
- Na ochranu pred útokmi XSS je vhodnejšie použiť JavaScript textContent alebo 10 techniky namiesto vkladania potenciálne škodlivého kódu.
Záverečné úvahy o načítavaní a zobrazovaní používateľských údajov
Pre dynamické webové stránky, integrácia JavaScript s Python backendom na získanie a zobrazenie údajov je efektívna stratégia. Úplné opätovné načítanie stránky nie je potrebné na to, aby sa zaručilo, že sa používateľské rozhranie efektívne aktualizuje, keď sú techniky podobné aport a spracovanie odpovedí JSON. Výsledkom je celkovo lepší používateľský zážitok.
Pri vývoji takýchto programov by sa mala brať do úvahy správa chýb, bezpečnosť a optimalizácia. Aplikácia bude odolnejšia, ak sa budú spracovávať neúplné odpovede a bude zabezpečená dezinfekcia údajov. Tento prístup poskytuje pevný základ pre pridávanie sofistikovanejších funkcií do vášho projektu v budúcnosti.
Referencie a ďalšie čítanie
- Tento obsah je založený na oficiálnej dokumentácii spoločnosti Django JsonResponse , ktorá poskytuje podrobné informácie o tom, ako fungujú odpovede JSON v Django.
- Aby ste pochopili viac o JavaScripte Fetch API , MDN ponúka komplexné informácie o tom, ako ho používať na vytváranie požiadaviek HTTP.
- Ďalším užitočným zdrojom pre manipuláciu s DOM pomocou JavaScriptu je dokumentáciu createElement z MDN, ktorý ukazuje, ako dynamicky vytvárať HTML prvky.
- Pre pochopenie integrácie Pythonu a Django pre vývoj API, oficiálny Projekt Django webová stránka poskytuje podrobného sprievodcu.
- Ak sa chcete dozvedieť viac o predchádzaní bezpečnostným zraniteľnostiam v JavaScripte, ako je XSS, OWASP má užitočného sprievodcu Skriptovanie medzi stránkami (XSS) útokov.