Django Asyc Views 是 ajax 替代品吗?

Posted

技术标签:

【中文标题】Django Asyc Views 是 ajax 替代品吗?【英文标题】:Is Django Asyc Views an ajax replacement? 【发布时间】:2020-09-02 10:41:38 【问题描述】:

我有一些困惑,想通过问一些问题来解决它们。

根据这个 Ajax 定义:

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

1.与 Django 3.0 中提供的async views 功能不一样吗?

1A。如果 Async Django 不会完全替代 AJAX,是否值得学习?

2。这对频道意味着什么?

Channels 是一个项目,它采用 Django 并将其功能扩展到 HTTP 之外——处理 WebSocket、聊天协议、物联网协议等。它建立在名为 ASGI 的 Python 规范之上。

async django 也可以替换频道吗?

通过推理提出与这些主题相关的事情。将 AJAX 与 JSON 结合使用(只是一个示例)

我知道将 Django 转换为异步需要时间,所以在回答时要记住这一点

【问题讨论】:

【参考方案1】:

我不是 python 开发人员,但我从头开始实现了几个 web 服务器,我想我可以帮助你。

服务器渲染与客户端渲染

在 Web 开发中,有两种方法可以向最终用户提供内容,称为 Server rendering and client side rendering

服务器端渲染 (s-s-r) — 传统的渲染方法,基本上您页面的所有资源都存放在服务器上。然后,当页面被请求(通常来自网络浏览器)时,会下载 html、JS 和 CSS。框架也可以动态地根据后端逻辑创建 html 并最终下载它。在这一点上,许多框架为立即创建具有“惊人”功能的应用程序提供了奇迹。

技术:java、c#、python、nodejs 等

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

技术:react、angular、vue、aurelia、jquery、纯javascript等

Django 是服务器渲染框架

如您所见:Simplest CRUD example 和 Hello World app,您需要 python(服务器语言)在 Django 中进行开发。 Django 在内部创建您的 html 页面并将它们呈现给您的用户。

React(angular, vue, etc) 是一个客户端渲染框架

想象一个由 OMS 提供的 api。这个 api 为我们和端点提供了按国家/地区获取 covid 统计信息:

https://oms.api/covid/stats/country/country-id

假设你是 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

您的主页仍在工作,用户正在导航、滚动,几秒钟后,框会填满统计信息。

因此,我们可以说您的网站执行了 ASYNCHRONOUS 调用,从而允许动态加载网页的某些部分...等等 这是 AJAX :D

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

Python Web 框架面临的新挑战之一是适应异步模型的潜在优势。

如果您在 ASGI 下运行,Django 支持编写异步(“async”)视图,以及完全启用异步的请求堆栈。

ASGI 规范是一种迭代但基本的重新设计,它提供了一个异步服务器/应用程序接口,支持 HTTP、HTTP/2 和 WebSockets。

正如你在下面的链接中看到的,异步视图不是带有ajax的html页面,因为使用ASGI,我们可以说这是Django以异步方式开发的尝试,但是在服务器中使用python:

https://docs.djangoproject.com/en/3.1/topics/async/ https://www.encode.io/articles/hello-asgi

结论

异步视图不是带有 ajax 的 html 页面,只是一个 python 代码,而是以异步方式在服务器中运行。

您的问题

    异步视图与 AJAX?
异步视图是 python(服务器)中的代码和浏览器中的 ajax。 Async ViewAjax 肯定不相关。
    这不是 Django 中的异步视图也会做的事情吗?
是的,Async Views 是一种异步代码,但在服务器端,而不是在客户端,如 react、angular 等
    如果 Async Django 不会完全替代 AJAX,是否值得学习?
这取决于您的目标。目前 web 开发人员 的工作(查看此页面的远程工作部分 -->)正在请求异步技能,但在客户端,如 react、angular、vue 等。Java、python 和其他强大的语言正在使用它满足后端需求的能力。
    这对频道意味着什么?
作为您的段落,频道可以用于 api 和 web,但具有服务器策略 (python)。
    async django 也可以替换频道吗?
我认为没有。也许频道正在使用或将使用异步视图等异步技术。

【讨论】:

【参考方案2】:

根据我掌握的信息,(不知道 AJAX 是什么,但许多 Django 教程都提到了它,所以它在我的学习愿望清单上)

AJAX 代表异步 Javascript 和 XML。它归结为执行异步调用,允许动态加载部分网页。这意味着当数据更改时只刷新页面的一部分而不是整个页面。它允许您让您的页面从服务器或 API 获取数据,并允许用户同时查看页面。从 API 检索信息后,可以更新视图以匹配新数据。

这不是 Django 中的异步视图也会做的事情吗?

是的,看起来 Django 将允许您在视图本身内执行这些类型的技术。可能有一些用例可以使用AJAX,而Django的异步特性不能,但是不研究,我无法给出明确的答案。

1A。如果 Async Django 不会完全替代 AJAX,是否值得学习?

AJAX 是否仍然值得学习。我会说是的。我是万事通的心态,一无是处。如果你打算用 Django 来开发你的余生,那可能不值得。然而,AJAX 在其他技术中很常见,因此如果您计划在 Django 堆栈之外进行冒险,那么它值得学习。如果您深入研究 AJAX,您还可以获得了解异步通信工作原理的一些基本原理的额外好处。

    这对频道意味着什么?

再次,只是猜测,但我假设 Channels 将提供异步 Django 不会立即具备的附加功能(在你的摘录中你提到:处理 WebSockets、聊天协议、物联网协议等。Django 正在async 本身并不提供这些功能)。随着时间的推移,Django 可能会采用其中的一些功能,但我认为 Channels 仍将占据一席之地。

【讨论】:

以上是关于Django Asyc Views 是 ajax 替代品吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在views.py Django中返回ajax响应以及重定向

从 django views.py 获取数据并使用 ajax 显示它

Django如何通过单击带有变量的提交按钮从ajax调用views.py中的函数

如何通过 Ajax jQuery 将简单数据发送到 Django 中的views.py?

Django 和 Ajax 管理

在 Django 中使用 AJAX 更新数据库