如何使用 JavaScript Fetch 从 Python API 显示用户个人资料和帖子

如何使用 JavaScript Fetch 从 Python API 显示用户个人资料和帖子
如何使用 JavaScript Fetch 从 Python API 显示用户个人资料和帖子

使用 JavaScript Fetch 显示用户数据:个人资料和帖子

JavaScript 强大的 API 交互功能的一种流行用例是从后端实时检索和显示数据。在本例中,您希望从两个链接表中提取信息:一个与用户的帖子相关,另一个与用户的个人资料相关。这是学习如何在网页上动态显示多个数据集并在单个 API 调用中处理它们的好方法。

获取API 必须先用于从后端检索数据,然后才能继续。 JavaScript 将解析 JSON 响应 由包含个人资料和帖子的 Python API 返回。如果您知道如何使用 JavaScript 来处理 DOM,则可以正确显示个人资料和帖子信息。

尽管看起来很困难,但如果您知道响应的结构,那么从多个表中检索数据实际上是可行的。您必须处理 JSON数据 并构造 HTML 元素以在提交获取请求后显示它。为用户配置文件以及与之相关的帖子创建列表或部分是其中的一部分。

我将在本教程中向您介绍一个实际示例,该示例使用 JavaScript 从 Python API 加载帖子数据和用户配置文件。最后您将了解如何呈现获取的数据并确保其正确显示在您的 HTML 页面上。

命令 使用示例
fetch() 要启动网络请求来检索资源,请使用此命令。在这里,它用于通过 Python 后端 API 端点获取帖子和用户个人资料。
.then() 用于管理 fetch() 返回的承诺的过程。正确检索到答案后,将使用 .then() 函数将其转换为 JSON 来执行数据处理过程。
response.json() 使用此技术解析响应的 JSON 正文。使用提供 JSON 格式数据(例如帖子和用户个人资料)的 API 是必要的。
createElement() 这种 JavaScript DOM 技术动态构建 HTML 元素。构建和显示用户配置文件等组件以及根据获取的数据发布材料是它的两个主要用途。
append() 使用append() 方法将创建的元素作为所选父节点的最终子节点插入。该技术用于将项目合并到 HTML 框架中,例如关注按钮、用户信息和帖子。
JsonResponse() 此 Django 命令生成一个 HTTP 响应,其中包含以 JSON 编码的数据。将帖子和个人资料数据从 Python 后端发送到 JavaScript 前端进行处理至关重要。
values() Django的values()方法为查询结果创建一个类似于字典的对象。在本例中,它用于获取与特定作者相关的帖子。
Profile.DoesNotExist 请求的配置文件无法在数据库中找到,这会导致引发此 Django 特定的异常。它确保在未找到配置文件的情况下,API 将提供 404 错误以及有用的消息。
TestCase Django 中的单元测试是使用 TestCase 类编写的。这对于验证 API 的准确性并确保在各种条件下以所需的方式返回帖子和个人资料数据至关重要。

了解动态内容的 JavaScript 和 Python 集成

包含的脚本展示了如何以易于使用且高效的方式组合 JavaScript 前端和 Python 后端。由于这种集成,网页可以动态加载帖子数据和用户配置文件。这 获取API 是JavaScript代码的主要部分;它向后端发送请求并返回 JSON 响应。这 然后() 与 Promise 结合使用的技术允许脚本保证数据的异步加载。此方法可防止浏览器在等待 API 响应时冻结,从而改善用户体验。

JavaScript 代码使用用户的 ID 向 Python API 发出检索请求,Python API 返回个人资料和发布数据。该脚本首先将答案转换为 JSON,然后修改 DOM 以显示个人资料和帖子。它通过生成 HTML 元素(例如段落和列表项)来实现此目的。例如新建的 分区 用户名、关注者和关注者的元素用于显示个人资料数据。每条信息在放入正确的 HTML 结构后都会添加到页面的配置文件部分。

Django 构建的后端对于从数据库中获取帖子和个人资料数据至关重要。这 Json响应 Python 中的函数将数据转换为 JSON,这是在线 API 的推荐格式,因为它易于解析且轻量级。这 值() Django 中的方法保证了以字典格式高效检索帖子。通过这种方式,前端可以轻松地检查帖子并将其动态呈现在网站上。这 配置文件.不存在 脚本使用异常来处理潜在问题并确保在数据不可用的情况下提供正确的反馈。

总体而言,由于 Python 和 JavaScript 的结合,该网站是动态的,无需重新加载整个页面即可进行更改。这种策略在博客和社交网站上尤其有效,在这些网站上,用户生成的信息(包括帖子和个人资料)经常更新。通过遵循最佳实践并将代码组织成不同的功能,该解决方案变得模块化且易于维护。此外,包含单元测试可以保证准确返回个人资料和帖子数据,并且 API 按预期运行。这使得实时应用程序可以优化性能并更有效地处理错误。

用于用户个人资料和帖子的动态数据获取的 Python 和 JavaScript

这种方法背后的主要思想是通过将 JavaScript 接口与 Python API 后端集成来动态加载用户配置文件和帖子。该方法在后端使用 Python 的 Django 框架和标准 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 形式返回以供 UI 使用。

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 视图的单元测试

为了确保正确提供数据,此单元测试验证 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)
}

为动态 Web 应用程序高效处理 JSON 数据

当使用从多个来源(包括用户个人资料和帖子)返回数据的 API 时,有效处理 JSON 响应至关重要。在前面的示例中,我们从 Python 后端获取数据后利用 JavaScript 动态更新网页。但是,在使用 JSON 数据时,充分利用处理和呈现 JSON 数据的方式也很重要。我们可以使用有效的循环来循环浏览文章数组,例如 对于每个,并借助以下技术构建 HTML 元素,而无需在 JavaScript 文件中编写原始 HTML 创建元素。这种方法保持了代码的模块化和易于维护。

错误处理和数据验证是需要考虑的重要附加因素。如果处理不当,后端可能会返回不准确或丢失的数据,这可能会导致前端出现问题。我们可以通过在 JavaScript 代码中实现回退策略来避免布局损坏或 JavaScript 问题,例如确定是否 回复 在尝试显示之前包含所需的数据。可靠性在大型 Web 应用程序中至关重要,因此这一点尤其重要。此外,利用 Django 的 Json响应 保证数据的格式适合前端使用。

最后,在处理动态内容时,安全性始终是一个令人担忧的问题。在显示数据之前对其进行清理是解决此问题并阻止跨站点脚本 (XSS) 攻击等安全缺陷的一种方法。通过使用 JavaScript 内置的 DOM 修改功能,避免引入潜在危险的代码,例如 文本内容,而不是innerHTML。通过遵守这些准则,您可以确保网页上的信息安全且值得信赖。

关于使用 JavaScript 和 Python 处理 JSON 数据的常见问题

  1. 是什么让 fetch() 比其他 AJAX 技术更好吗?
  2. fetch() 提供现代、简单的 API 用于提交 HTTP 请求; Promise 用于管理异步任务,消除了对复杂回调机制的需要。
  3. 为什么是 response.json() 从 API 获取信息时使用?
  4. 为了将未处理的 HTTP 响应转换为易于操作并由 JavaScript 显示的 JSON 对象,需要执行步骤 2。
  5. 怎么样 forEach 有助于在 JavaScript 中显示数据?
  6. forEach 是一种允许您循环遍历数组(例如帖子列表)并将 HTML 元素动态添加到每个项目的方法。
  7. 的作用是什么 JsonResponse 在 Django API 中?
  8. 一个 Django 工具,名为 JsonResponse 将数据转换为 JSON,以便前端可以使用 JavaScript 轻松管理和显示它。
  9. 使用时如何避免JavaScript中的安全漏洞 innerHTML
  10. 为了防范 XSS 攻击,最好使用 JavaScript textContent 或者 10 技术而不是注入潜在有害的代码。

关于获取和显示用户数据的最终想法

对于动态网站,集成 JavaScript 使用 Python 后端来检索和显示数据是一种有效的策略。当使用诸如 拿来 并使用处理 JSON 回复。结果,用户体验总体得到增强。

开发此类程序时应考虑错误管理、安全性和优化。如果处理不完整的回复并确保数据清理,应用程序将更具弹性。这种方法为将来向项目添加更复杂的功能奠定了坚实的基础。

参考文献和进一步阅读
  1. 本内容根据Django官方文档进行处理 Json响应 ,它提供了有关 JSON 响应如何在 Django 中工作的详细见解。
  2. 了解有关 JavaScript 的更多信息 获取API ,MDN 全面介绍了如何使用它来发出 HTTP 请求。
  3. 使用 JavaScript 进行 DOM 操作的另一个有用资源是 创建元素文档 来自 MDN,它展示了如何动态构建 HTML 元素。
  4. 为了了解Python和Django集成进行API开发,官方 姜戈项目 网站提供了详细的指南。
  5. 要了解有关防止 JavaScript 中的安全漏洞(例如 XSS)的更多信息,OWASP 有一个有用的指南: 跨站脚本 (XSS) 攻击。