Django异步视图是否可以替代ajax?

12

我有一些疑惑,想通过提问来澄清。

根据这个Ajax定义:

Ajax是使用许多客户端Web技术创建异步Web应用程序的一组Web开发技术。使用Ajax,Web应用程序可以在不干扰现有页面的显示和行为的情况下异步地发送和检索数据。

1. 这难道不是Django 3.0中提供的async views功能吗?

1A. 如果Async Django无法完全替代AJAX,那么学习它是否值得?

2. 这对Channels意味着什么?

Channels是一个项目,它将Django扩展到HTTP之外的能力 - 处理WebSockets、聊天协议、IoT协议等等。它是建立在一个名为ASGI的Python规范上的。

Async Django能否取代Channels?

提出与这些主题相关的建议并给出理由。例如:使用带有JSON的AJAX(仅作为示例)

我知道将Django转换为异步需要时间,所以请考虑这一点。

2个回答

11

我不是Python开发人员,但我从头实现了几个Web服务器,我认为我可以帮助你。

服务器渲染与客户端渲染

在Web开发中,有两种向最终用户提供内容的方法,称为服务器渲染和客户端渲染

服务器端渲染(SSR) - 传统的渲染方法,基本上您页面的所有资源都存储在服务器上。然后,当请求页面时(通常来自Web浏览器),将下载HTML、JS和CSS。此外,框架可以根据后端逻辑动态创建HTML,并最终下载它。此时,许多框架为快速创建具有“惊人”功能的应用程序提供了奇迹。

技术:Java、C#、Python、Node.js等

客户端渲染(CSR) - 有时称为“前端渲染”,是一种较新的渲染方法,这依赖于通过JavaScript框架在客户端(浏览器)执行的JS。因此,当请求页面时,将下载最小的、少量的或空的index.html、CSS和JS。在这里,JavaScript负责发送或接收数据并更新页面的最小部分而无需刷新整个页面。最后,当用户单击或触发某些事件时,JavaScript将使用异步调用(ajax)通常将数据发送或接收到API Rest(JSON)。

技术:React、Angular、Vue、Aurelia、jQuery、纯JavaScript等

Django是服务器渲染框架

正如您可以看到这些文章:Simplest CRUD exampleHello World app,您需要Python(服务器语言)来在Django中进行开发。Django内部创建您的HTML页面并将其呈现给您的用户。

React(Angular、Vue等)是客户端渲染框架

想象一下OMS提供的API。此API为我们提供了一个端点,以按国家获取COVID统计信息:

假设您是 Z 代,不了解Java、Python、C# 等古老的编程语言,您需要开发一个简单的仪表板,展示首批感染病毒的国家的COVID数据统计信息。
您的网站将具有视觉上酷炫的效果:首页加载空框,并逐一显示前十个国家的统计数据。
为了实现这个效果, 您将使用 React 渲染一个带有空框的主页,并会触发多个对API的请求:
- (中国) https://oms.api/covid/stats/country/ch - (美国) https://oms.api/covid/stats/country/eu - (意大利) https://oms.api/covid/stats/country/it 您的主页仍在工作中,用户正在浏览、滚动页面,在几秒钟后,框里填充有统计信息。
因此,我们可以说您的Web 执行了异步调用,允许Web页面部分动态加载...等等,这就是 AJAX :D

异步视图:带 ASGI 的 Python 异步代码

对于 Python Web 框架来说,一个新挑战是适应异步模型的潜在优势。
如果您在 ASGI 下运行,则 Django 支持编写异步("async")视图以及完全支持异步请求堆栈。
ASGI 规范是一个迭代但基本的重新设计,提供了异步服务器/应用程序接口,并支持 HTTP、HTTP/2 和 WebSockets。
正如您可以在以下链接中看到的那样,“异步视图”不是带有 AJAX 的 HTML 页面,而是使用 ASGI, 可以说这是 Django 尝试以 Python 异步方式开发但在服务器端执行的一种方法。

结论

异步视图不是带有ajax的html页面,只是在服务器上以异步方式运行的Python代码。

你的问题

  1. 异步视图与AJAX有什么区别?
  • 异步视图是Python(服务器)中的代码,而ajax是浏览器中的代码。确实,异步视图Ajax没有关联。
  1. Django中的异步视图也会做同样的事情吗?
  • 是的,异步视图是一种异步代码,但不是像react、angular等客户端那样在客户端进行。
  1. 如果异步Django无法完全替代AJAX,学习它是否值得?
  • 这取决于你的目标。目前,Web开发人员的工作(请查看本页面的远程工作部分-->)需要具备异步技能,但是要求在客户端使用,如React、Angular、Vue等。Java、Python和其他强大的语言正在用于后端需求。
  1. 这对Channels意味着什么?
  • 根据你的段落,通道可以用于API和Web,但采用服务器策略(Python)。
  1. 异步Django能否替代Channels?
  • 我认为不行。也许Channels正在使用或将使用类似异步视图的异步技术。

3
根据我所了解的信息,(不知道AJAX是什么,但许多Django教程都提到它,所以它在我的学习愿望清单上)。AJAX代表异步JavaScript和XML。其本质上是执行异步调用,允许动态加载网页的部分内容。这意味着当数据变化时只刷新页面的一部分而不是整个页面。它允许你的页面从服务器或API获取数据,并允许用户同时查看页面。一旦从API检索到信息,视图就可以更新以匹配新数据。
这不是Django中异步视图将要做的事情吗?
是的,看起来Django将允许您在视图本身内执行这些技术。可能有一些用例可以使用AJAX而Django的异步功能无法实现,但是没有深入研究,我不能给出明确的答案。
1A. 如果Async Django无法完全替代AJAX,那么学习它是否值得?
AJAX是否值得学习?我认为是的。我赞成样样精通,却样样不松手的想法。如果您计划在余生中一直使用Django进行开发,也许不值得。然而,在其他技术中很常见找到AJAX,因此,如果您计划超越Django栈外冒险,学习它是值得的。如果您深入研究AJAX,还可以获得了解异步通信原理的益处。
2. 这对于Channels意味着什么?
同样,这只是猜测,但我认为Channels将提供异步Django没有的其他功能(在您的摘录中,您提到:处理WebSockets、聊天协议、IoT协议等等。Django是异步的,本质上并没有提供这些功能)。随着时间的推移,Django可能会采用其中一些功能,但我认为Channels仍然有其专业领域。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接