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?
-
这不是 Django 中的异步视图也会做的事情吗?
-
如果 Async Django 不会完全替代 AJAX,是否值得学习?
-
这对频道意味着什么?
-
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中的函数