Відображення даних користувача за допомогою JavaScript Fetch: профілі та публікації
Одним із популярних випадків використання потужних можливостей взаємодії API JavaScript є отримання та відображення даних у режимі реального часу з серверної частини. У цьому випадку ви бажаєте отримати інформацію з двох пов’язаних таблиць: одна стосується дописів користувача, а інша – його профілю. Це чудовий підхід, щоб навчитися динамічно відображати кілька наборів даних на вашій веб-сторінці та обробляти їх за один виклик API.
The Fetch API потрібно використати для отримання даних із серверної частини, перш ніж ви зможете продовжити. JavaScript проаналізує Відповідь JSON який повертає API Python, що містить профіль і публікації. Ви можете правильно відображати профіль і публікувати інформацію, якщо знаєте, як працювати з DOM за допомогою JavaScript.
Хоча це може здатися складним, отримати дані з кількох таблиць насправді можливо, якщо ви знаєте, як структурована відповідь. Ви повинні обробити дані JSON і створити елементи HTML, щоб показати його після надсилання запиту на отримання. Частиною цього є створення списків або розділів для профілів користувачів і дописів, які з ними пов’язані.
У цьому підручнику я проведу вас через реальний приклад, який використовує JavaScript для завантаження даних публікацій і профілів користувачів з API Python. До кінця ви зрозумієте, як відобразити отримані дані та переконатися, що вони правильно відображаються на вашій сторінці HTML.
Команда | Приклад використання |
---|---|
fetch() | Щоб почати мережевий запит на отримання ресурсів, скористайтеся цією командою. Тут він використовується для отримання дописів і профілю користувача через кінцеву точку Python backend API. |
.then() | Процедура керування обіцянкою, яку повертає fetch(). Після належного отримання відповіді процес обробки даних виконується шляхом перетворення їх у JSON за допомогою функції.then(). |
response.json() | Тіло JSON відповіді аналізується за допомогою цієї техніки. Це необхідно для роботи з API, які надають дані у форматі JSON, наприклад дописи та профілі користувачів. |
createElement() | Цей метод JavaScript DOM створює HTML-елемент динамічно. Створення та відображення таких компонентів, як профілі користувачів і публікація матеріалу, створеного на основі отриманих даних, є двома основними способами його використання. |
append() | Створені елементи вставляються як останні дочірні елементи вибраного батьківського вузла за допомогою методу append(). Ця техніка використовується для включення елементів у структуру HTML, таких як кнопки слідування, інформація про користувача та публікації. |
JsonResponse() | Ця команда Django створює відповідь HTTP з даними, закодованими в JSON. Це важливо для надсилання даних публікацій і профілів із серверної частини Python до зовнішньої частини JavaScript для обробки. |
values() | Метод values() Django створює об’єкт для результатів запиту, який нагадує словник. У цьому випадку він використовується для отримання публікацій, які пов’язані з певним автором. |
Profile.DoesNotExist | Запитуваний профіль не може бути знайдений у базі даних, що призводить до виникнення цього винятку, специфічного для Django. Він гарантує, що у випадку, якщо профіль не знайдено, API видасть помилку 404 разом із корисним повідомленням. |
TestCase | Модульні тести в Django написані з використанням класу TestCase. Це важливо для перевірки точності API та переконання, що дописи та дані профілю повертаються бажаним чином за різних умов. |
Розуміння інтеграції JavaScript і Python для динамічного вмісту
Додані сценарії показують, як поєднати інтерфейс JavaScript і сервер Python простим у використанні, але ефективним способом. Завдяки цій інтеграції веб-сторінка може динамічно завантажувати дані публікацій і профілі користувачів. The отримати API є основною частиною коду JavaScript; він надсилає запит серверній частині та повертає відповідь JSON. The потім() Техніка у поєднанні з промісами дозволяє сценарію гарантувати асинхронне завантаження даних. Цей метод покращує взаємодію з користувачем, запобігаючи зависанню браузера під час очікування відповіді API.
Використовуючи ідентифікатор користувача, код JavaScript надсилає запит на отримання до API Python, який повертає профіль і дані публікації. Сценарій спочатку перетворює відповідь у JSON, а потім змінює DOM для відображення профілю та публікацій. Це робиться шляхом створення елементів HTML, таких як абзаци та елементи списку. Наприклад, новобудова див елементи для імені користувача, підписників і підписок використовуються для відображення даних профілю. Кожна інформація додається до розділу профілю сторінки після розміщення у відповідній структурі HTML.
Створений Django бекенд необхідний для отримання даних публікацій і профілів із бази даних. The JsonResponse функція в Python перетворює дані в JSON, який є рекомендованим форматом для онлайн-інтерфейсів API через його легкість синтаксичного аналізу та легкий характер. The значення() метод у Django гарантує ефективне отримання дописів у форматі словника. Таким чином інтерфейсу буде легко переглядати публікації та динамічно відображати їх на веб-сайті. The Profile.DoesNotExist винятки використовуються сценарієм для вирішення потенційних проблем і забезпечення належного відгуку у випадках, коли дані недоступні.
Загалом веб-сайт динамічний і може змінюватися, не вимагаючи повного перезавантаження сторінки завдяки поєднанню Python і JavaScript. Ця стратегія особливо добре працює в блогах і на сайтах соціальних мереж, де інформація, створена користувачами, зокрема дописи та профілі, часто оновлюється. Рішення стає модульним і легко підтримується завдяки дотриманню найкращих практик і організації коду в окремі функції. Крім того, включення модульних тестів гарантує, що дані профілю та публікацій повертаються точно, а API працює належним чином. Це дає змогу програмам у реальному часі оптимізувати продуктивність і ефективніше обробляти помилки.
Python і JavaScript для динамічного отримання даних для профілів користувачів і публікацій
Основна ідея цього підходу полягає в тому, щоб динамічно завантажувати профілі користувачів і публікації шляхом інтеграції інтерфейсу JavaScript із серверною частиною API Python. Метод використовує фреймворк Django для Python на серверній частині та стандартний 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 для обслуговування профілю та публікації даних
Таблиці Profile і Posts — це дві пов’язані таблиці, з яких це представлення Python Django отримує дані та повертає їх як JSON для використання інтерфейсом користувача.
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)
Модульний тест для Python Django View
Щоб переконатися, що дані обслуговуються належним чином, цей модульний тест перевіряє, чи Django API правильно отримує профіль користувача та публікації.
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 для динамічних веб-додатків
Ефективна обробка відповіді JSON має вирішальне значення під час роботи з API, які повертають дані з багатьох джерел, включаючи профілі користувачів і публікації. У попередньому прикладі ми використовували JavaScript для динамічного оновлення веб-сторінки після отримання даних із серверної частини Python. Але під час роботи з JSON дуже важливо максимально використати те, як ви обробляєте та представляєте дані JSON. Ми можемо перебирати масиви статей, використовуючи ефективні цикли, наприклад forEachі створювати елементи HTML без запису необробленого HTML у файлі JavaScript за допомогою таких методів, як createElement. Цей метод підтримує модульність коду та легкість обслуговування.
Обробка помилок і перевірка даних є важливими додатковими факторами, які слід враховувати. У разі неправильної обробки серверна частина може повернути неточні або відсутні дані, що може призвести до проблем у зовнішній частині. Ми можемо уникнути несправних макетів або проблем з JavaScript, реалізувавши резервну стратегію в коді JavaScript, наприклад, визначивши, чи відповідь містить необхідні дані, перш ніж спробувати їх показати. Надійність має вирішальне значення для великомасштабних веб-додатків, тому це особливо важливо. Крім того, використовуючи Django JsonResponse гарантує, що дані належним чином відформатовані для зовнішнього використання.
І нарешті, під час роботи з динамічним вмістом безпека викликає постійну турботу. Очищення даних перед їх відображенням є одним із способів виправити це та зупинити недоліки безпеки, такі як атаки міжсайтових сценаріїв (XSS). Уникайте введення потенційно небезпечного коду за допомогою вбудованих у JavaScript можливостей модифікації DOM, таких як textContent, а не innerHTML. Дотримуючись цих вказівок, ви можете бути впевнені, що інформація на вашій веб-сторінці є безпечною та надійною.
Поширені запитання щодо обробки даних JSON за допомогою JavaScript і Python
- Що робить fetch() краще за інші методи AJAX?
- fetch() пропонує сучасний простий API для надсилання запитів HTTP; обіцянки використовуються для керування асинхронними завданнями, усуваючи потребу в складних механізмах зворотного виклику.
- Чому response.json() використовується під час отримання інформації з API?
- Щоб перетворити необроблену відповідь HTTP на об’єкт JSON, яким легко керувати та відображати JavaScript, потрібен крок 2.
- Як робить forEach допомогти у відображенні даних у JavaScript?
- forEach це метод, який дозволяє циклічно переходити між масивами, такими як список публікацій, і динамічно додавати елементи HTML до кожного елемента.
- Яка роль JsonResponse в API Django?
- Інструмент Django називається JsonResponse перетворює дані як JSON, щоб інтерфейс міг легко керувати ними та відображати їх за допомогою JavaScript.
- Як можна уникнути недоліків безпеки в JavaScript під час використання innerHTML?
- Щоб захиститися від атак XSS, краще використовувати JavaScript textContent або 10 техніки, а не впроваджувати потенційно шкідливий код.
Останні думки щодо отримання та відображення даних користувача
Для динамічних веб-сайтів, інтеграція JavaScript із серверною частиною Python для отримання та показу даних є ефективною стратегією. Повне перезавантаження сторінки не є необхідним, щоб гарантувати ефективне оновлення інтерфейсу користувача, коли такі методи, як принести і обробка відповідей JSON. В результаті користувальницький досвід покращується.
При розробці таких програм слід враховувати управління помилками, безпеку та оптимізацію. Додаток буде більш стійким, якщо оброблятиметься неповна відповідь і буде забезпечено очищення даних. Цей підхід забезпечує міцну основу для додавання більш складних функцій до вашого проекту в майбутньому.
Посилання та додаткова література
- Цей вміст базується на офіційній документації Django для обробки JsonResponse , який надає детальну інформацію про те, як працюють відповіді JSON у Django.
- Щоб зрозуміти більше про JavaScript API Fetch , MDN пропонує вичерпну інформацію про те, як використовувати його для надсилання запитів HTTP.
- Іншим корисним ресурсом для роботи з DOM за допомогою JavaScript є документація createElement з MDN, де показано, як динамічно створювати елементи HTML.
- Для розуміння інтеграції Python і Django для розробки API офіційний Проект Django веб-сайт містить детальний посібник.
- Щоб дізнатися більше про запобігання вразливостям безпеки в JavaScript, як-от XSS, OWASP має корисний посібник із Міжсайтовий сценарій (XSS) напади.