将信息从 javascript 传递到 django 应用程序并返回

2023-11-27

所以我试图基本上建立一个网页,用户在其中选择一个id,然后该网页将id信息发送到python,其中python使用该id来查询数据库,然后将结果返回到网页进行显示。

我不太确定该怎么做。我知道如何使用 ajax 调用来调用 python 生成的数据,但我不确定如何将初始 id 信息传递给 django 应用程序。是否可以说,查询像./app/id(IE /app/8)这样的url,然后使用url信息给python提供信息?我将如何编辑 urls.py 和views.py 来做到这一点?

Thanks,


你说的是 AJAX。 AJAX 总是需要 3 部分(从技术上讲,只需两部分:Javascript 具有双重职责)。

  1. 客户端(在本例中为 Javascript)发出请求
  2. 服务器(在本例中为 Django 视图)处理请求并返回响应
  3. 客户端(同样是 Javascript)接收响应并用它做一些事情

您还没有指定首选框架,但如果没有某种 Javascript 框架来执行 AJAX,您会觉得很疯狂,所以我将为您选择 jQuery。该代码可以很容易地适应任何 Javascript 框架:

$.getJSON('/url/to/ajax/view/', {foo: 'bar'}, function(data, jqXHR){
    // do something with response
});

我在用着$.getJSON,这是一个 jQuery 便捷方法,它将 GET 请求发送到 URL 并自动将响应解析为 JSON,将其转换为传递为的 Javascript 对象data这里。第一个参数是请求将发送到的 URL(稍后会详细介绍),第二个参数是一个 Javascript 对象,其中包含应与请求一起发送的数据(如果不需要,可以省略它)发送任何数据),第三个参数是回调函数,用于处理成功时服务器的响应。所以这段简单的代码涵盖了上面列出的第 1 部分和第 3 部分。

下一部分是您的处理程序,在本例中当然是 Django 视图。该视图的唯一要求是它必须返回 JSON 响应:

from django.utils import simplejson

def my_ajax_view(request):
    # do something
    return HttpResponse(simplejson.dumps(some_data), mimetype='application/json')

请注意,除了必需的参数之外,该视图不接受任何参数request。这是一个有点哲学的选择。恕我直言,在真正的 REST 方式中,数据应该随请求一起传递,而不是在 URL 中传递,但其他人可以而且确实不同意。最终的选择取决于你。

另请注意,这里我使用了 Django 的 simplejson 库,它最适合常见的 Python 数据结构(列表、字典等)。如果您想返回 Django 模型实例或查询集,您应该使用序列化器库。

from django.core import serializers
...
data = serializers.serialize('json', some_instance_or_queryset)
return HttpResponse(data, mimetype='application/json')

现在您有了一个视图,您需要做的就是将其连接到 Django 的 urlpatterns 中,以便 Django 知道如何路由请求。

urlpatterns += patterns('',
    (r'^/url/to/ajax/view/$', 'myapp.views.my_ajax_view'),
)

这就是哲学差异的来源。如果您选择通过 URL 本身传递数据,则需要在 urlpattern 中捕获它:

(r'^/url/to/ajax/view/(?P<some_data>[\w-]+)/$, 'myapp.views.my_ajax_view'),

然后,修改您的视图以接受它作为参数:

def my_ajax_view(request, some_data):

最后,修改 Javascript AJAX 方法以将其包含在 URL 中:

$.getJSON('/url/to/ajax/view/'+some_data+'/', function(data, jqXHR){

如果您选择通过请求传递数据的路线,那么您需要注意在视图中正确检索它:

def my_ajax_view(request):
    some_data = request.GET.get('some_data')
    if some_data is None:
        return HttpResponseBadRequest()

这应该足以让您使用 Django 来实现几乎任何 AJAX 功能。其他的都是关于视图如何检索数据(手动创建数据、查询数据库等)以及 Javascript 回调方法如何处理 JSON 响应。对此有一些提示:

  1. The data对象将一般来说是一个列表,即使只包含一项。如果您知道只有一项,则可以使用data[0]。否则,使用 for 循环访问每个项目:

    form (var i=0; i<data.length; i++) {
        // do something with data[i]
    }
    
  2. If data or data[i]是一个对象(又名字典、哈希、键控数组等),您可以通过将键视为属性来访问键的值,即:

    data[i].some_key
    
  3. 一般来说,处理 JSON 响应和 AJAX 时,通常最好先直接在浏览器中尝试,这样您就可以查看确切的响应和/或验证响应的结构。要在浏览器中查看 JSON 响应,您很可能需要扩展。 JSONView(适用于Firefox and Chrome)将使其能够理解 JSON 并像网页一样显示它。如果请求是 GET,您可以使用查询字符串以正常 GET 方式将数据传递到 URL,即http://mydomain.com/url/to/ajax/view/?some_data=foo。如果是 POST,您将需要某种 REST 测试客户端。REST客户端是一个很好的 Firefox 插件。对于 Chrome,你可以尝试Postman。这些也非常适合学习 Twitter、Facebook 等的第 3 方 API。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将信息从 javascript 传递到 django 应用程序并返回 的相关文章

  • Snakemake:将多个输入用于具有多个子组的一个输出的规则

    我有一个工作管道 用于下载 比对和对公共测序数据执行变体调用 问题是它目前只能在每个样本的基础上工作 i e作为每个单独测序实验的样本 如果我想对一组实验 例如样本的生物和 或技术复制 执行变体调用 则它不起作用 我试图解决它 但我无法让它
  • 哪种方式最适合Python工厂注册?

    这是一个关于这些方法中哪一种被认为是最有效的问题 Pythonic 我不是在寻找个人意见 而是在寻找惯用的观点 我的背景不是Python 所以这会对我有帮助 我正在开发一个可扩展的 Python 3 项目 这个想法类似于工厂模式 只不过它是
  • 如何使用 jQuery 通过 Ajax 发送复选框数组的值?

    我有一个包含很多表单字段的表单 12 x n 行 每行中的第一个字段 代表产品 是一个类似于以下内容的复选框
  • 非常大的字段会对 MySQL 数据库产生负面影响吗?

    我目前正在使用 Django 构建一个网站 并希望托管用户生物样式页面 该页面可能长达几 KB 这些字段不一定需要搜索 但在查找用户名时确实需要提供 将这些数据存储在数据库中会产生负面影响吗 如果我使用带有数据库链接的静态文本文件 我的服务
  • Python脚本从字母和两个字母组合生成单词

    我正在编写一个简短的脚本 它允许我使用我设置的参数生成所有可能的字母组合 例如 b a 参数 单词 5 个字母 第三 第五个字母 b a 第一个字母 ph sd nn mm 或 gh 第二 第四个字母 任意元音 aeiouy 和 rc 换句
  • 如何检查元素的内容是否为空,如果是,则在 jquery 中删除该元素

    我目前正在尝试选择某个 div 内没有内容的任何 h2 元素并将其删除 这是我的 html 代码 div class skipToContainer h2 class vidSkipTo Hello h2 h2 class vidSkipT
  • 更改时触发跨度文本/html

    jQuery 或 JavaScript 中是否有任何事件在以下情况下触发span标签 text html 已更改 Code span class user location span user location change functio
  • Django - 在长时间处理期间显示加载消息

    我怎样才能显示请稍等从 django 视图加载消息 我有一个 Django 视图 需要花费大量时间对大型数据集执行计算 当进程加载时 我想向用户呈现一条反馈消息 例如 旋转加载动画 gif 或类似消息 在尝试了布兰登和穆拉特提出的两种不同方
  • 在 HTML5 中将两个图像合并到一个画布上

    我正在使用 HTML5 canvas 元素 假设我有 2 个 ImageData 对象 我想将它们组合起来放在一张画布上 假设我不关心这些图像如何组合 两个 ImageData 对象具有完全相同的像素数和形状 组合两个图像的最佳方式是什么
  • JavaScript:预期的赋值或函数调用,却看到了一个表达式

    我正在使用 JSHint 来确保我的 JavaScript 是 严格的 但我收到以下错误 预期是赋值或函数调用 但看到的是表达式 关于以下代码 var str A B C D var data var strArr str split fo
  • 无法在渲染器进程中使用 Node.js API

    无法在 Electron 中使用任何与 Electron 或节点相关的操作 未定义获取错误过程 我检查了他们指导添加节点支持的各个地方 但这已经完成了 所以卡在这里 我的主要应用程序代码是 const electron require el
  • (0, eval) () 的作用是什么? [复制]

    这个问题在这里已经有答案了 以下内容来自这个问题 https stackoverflow com questions 14119988 return this 0 evalthis 14120023 14120023 function q
  • 显示班级图片 10 秒

    我有下面给出的代码显示9 boxes 其值如下digital time 还有一个班级box002显示digits相当于随机选择的九个盒子的值 box002 can be dragged to digital time starting wi
  • 为什么从 openAI 导入 Universe 模块时出现“无效语法”错误

    当我导入时universe来自 openAI 的模块 我收到以下错误 Traceback most recent call last File
  • JavaScript 中最长的通用前缀

    我正在尝试解决 Leet Code 挑战14 最长公共前缀 https leetcode com problems longest common prefix 编写一个函数来查找字符串数组中最长的公共前缀字符串 如果没有公共前缀 则返回空字
  • 如何有效地比较 pandas DataFrame 中的行?

    我有一个 pandas 数据框 其中包含雷击记录以及时间戳和全球位置 格式如下 Index Date Time Lat Lon Good fix 0 1 20160101 00 00 00 9962692 7 1961 60 7604 1
  • 数字和小数的输入掩码

    在测试我的程序后 我发现了以下错误 我在 sqlserver 中的表包含 价格数字 6 2 我的程序的用户输入价格 555 00 就很好了 但是当他输入 555555 时 这是错误的 所以我需要指定掩码 其中尾数是可选的 0 到 999 小
  • 跨浏览器:禁用输入字段的不同行为(文本可以/不能复制)

    我有一个被禁用的输入 html 字段 在某些浏览器 Chrome Edge Internet Explorer 和 Opera 中可以选择并复制文本 但至少在 Firefox 中这是不可能的 您可以通过在不同浏览器中执行以下代码来测试
  • 如何设置 Firebase 用户的显示名称?

    根据Firebase网站上的JS Auth文档 它只展示了如何获取 displayName 以及如何更新 displayName 所以我尝试更新它 但这有点不合逻辑 因为你怎么能在不创建某些东西的情况下更新它呢 所以我的问题是 如何设置注册
  • 想要定制django Rest框架Browsable API页面

    问题 我想自定义 django Rest Framework Browsable API 页面 使其具有与我的 Web 应用程序的其余部分相同的外观和感觉 安装的软件 Python 3 6 Django 1 10 6 Django 休息框架

随机推荐

  • Microsoft SQL Server CE(精简版)3.5 的 jdbc 驱动程序

    我希望能够探索此版本数据库的数据库内容 我正在考虑使用 Squirrel DB 客户端 需要 JDBC 驱动程序 因此 我正在寻找适用于 SQL SERVER 3 5 的 JDBC 类型 4 驱动程序 有人可以向我指出免费或开源或试用软件吗
  • 当实现你自己的 IUserStore 时,类上的“可选”接口实际上是可选的吗?

    我正在使用 Microsoft 的 Asp Net Identity 框架版本 2 并正在实现我自己的 IUserStore 我的新班级MyUserStore实施IUserStore
  • 位运算符在 Java 中到底是如何工作的?

    我目前正在尝试了解 Java 中的按位和位移运算符 尽管它们在简化的玩具示例 基本上是正整数 中对我来说是有意义的 但一旦涉及负数 以及在其他一些情况下 我的理解就会崩溃 我尝试用两个搜索引擎在互联网上进行搜索 甚至检查了Java规范 我找
  • 在轨道中销毁之前检查所有关联

    我的应用程序中有一个重要的模型 有很多关联 如果我想检查 before destroy 回调中的所有引用 我必须执行以下操作 has many models 1 has many models 2 mas many models 3 has
  • 避免将 master 合并到开发分支中

    我从每个冲刺开始就一直在监控两个分支 Release and Master Master分支是开发人员创建新分支 特定于任务 实现更改并创建合并到分支中的拉取请求的地方Master Release分支是特定于冲刺的 始终可提交给生产 我们只
  • 2-SUM 的线性时间算法

    给定一个整数 x 和一个由 N 个不同整数组成的排序数组 a 设计一个线性时间算法来确定是否存在两个不同的索引 i 和 j 使得 a i a j x 这是类型子集和问题 这是我的解决方案 不知道是不是早知道了 想象一下两个变量 i 和 j
  • 您推荐哪些 Javascript 模板引擎? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我想知道您对javascr
  • 使用 CarrierWave 混合文件类型

    我有一个 CarrierWave 上传器 可以接受各种文件类型 有些是图像类型 例如 jpg png 有些则不是 我想创建上传文件的中等版本 version medium do process resize to fit gt 300 30
  • 使用类似 SQL 的 IN 子句过滤 Pyspark DataFrame

    我想用类似 SQL 的方法过滤 Pyspark DataFrameIN子句 如 sc SparkContext sqlc SQLContext sc df sqlc sql SELECT from my df WHERE field1 IN
  • 如何通过电子邮件将我正在开发的 Android 应用程序发送给某人?

    这是我的第一个 Android 应用程序 我需要将迄今为止的内容通过电子邮件发送给某人进行测试 我应该如何导出应用程序并附加它 以免它被视为垃圾 更简单的方法 将 apk 放在您的网络服务器上 使用以下命令创建 QR 条形码图像 然后通过电
  • 为什么 CAP 定理中的 C 与 ACID 中的 C 不同?

    我的问题很简单 正在寻找一个更简单的答案 为什么 CAP 定理中的 C 与 ACID 中的 C 不同 Read thisHN 螺纹 Update NOSQL v1 0 搭便车指南 幻灯片 71 说 CAP 中的 C A C 原子一致性 两个
  • 跟踪数据库模式更改的机制[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 跟踪和 或自动化数据库架构
  • 计算两个 Pandas 列之间的时间差(以小时和分钟为单位)

    我有两列 fromdate and todate 在数据框中 import pandas as pd data todate pd Timestamp 2014 01 24 13 03 12 050000 pd Timestamp 2014
  • 将 std::experimental::filesystem 与 Xcode 9 链接

    我正在使用 std experimental filesystem 和 Xcode 9 0 beta 编译器阶段完成正常 但链接器抱怨未定义的符号 std experimental filesystem v1 path filename c
  • 创建大量线程时出现.Net 内存泄漏

    我有一个随着时间的推移创建大量线程的应用程序 我注意到内存使用量随着它的运行而增加 并最终耗尽内存 但相同的代码在我同事的环境中不会泄漏内存 我们都有相同的 net 版本 我能够使用以下示例代码重现该问题 该代码不会在我同事的笔记本电脑上泄
  • 为什么最好从方法类的实例中静态调用静态方法?

    如果我在 Java 中创建类的实例 为什么最好静态调用同一类的静态方法 而不是使用 this method 当我尝试通过 this staticMethod 从自定义类的构造函数中调用静态方法 staticMethod 时 我收到来自 Ec
  • 获取客户端当前在断开连接事件中所在的房间列表

    我正在尝试查找客户端当前在断开连接事件中所在的房间列表 关闭浏览器 重新加载页面 互联网连接已断开 我需要它的原因如下 用户已进入几个房间 然后其他人也做了同样的事情 然后他关闭了浏览器选项卡 我想通知他所在房间里的所有人他离开了 所以我需
  • pyside qtreewidget 约束拖放

    我试图向 QTreeWidget 拖放功能添加约束 以防止分支进入另一个根中的另一个分支 这是一个让事情更清楚的例子 我有 4 个对象 我们称它们为苹果 香蕉 胡萝卜 榴莲 这棵树看起来像这样 isDelicious Root Backgr
  • Xcode 11.4 beta 在 @Published 属性订阅上崩溃。这是怎么回事?

    我不知道为什么 但我的代码在这个 searchTerm 发布者上崩溃了 我的代码中有很多这样的发布者 其他一切都正常 它仅在这个新的 Xcode 版本中不起作用 而在以前的版本中起作用 如果我评论这一行并将其替换为 searchTerm p
  • 将信息从 javascript 传递到 django 应用程序并返回

    所以我试图基本上建立一个网页 用户在其中选择一个id 然后该网页将id信息发送到python 其中python使用该id来查询数据库 然后将结果返回到网页进行显示 我不太确定该怎么做 我知道如何使用 ajax 调用来调用 python 生成