gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:15:03 25 4
gpt4 key购买 nike

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

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

谢谢,

最佳答案

你在谈论 AJAX。 AJAX 总是需要 3 个部分(从技术上讲,只有两个:Javascript 执行双重任务)。

  • 客户端(本例中为 Javascript)发出请求
  • 服务器(本例中为 Django View )处理请求并返回响应
  • 客户端(再次,Javascript)接收响应并用它做一些事情

  • 您还没有指定首选框架,但是如果没有某种 Javascript 框架,您会疯狂地使用 AJAX,所以我将为您选择 jQuery。代码可以很容易地适应任何 Javascript 框架:
    $.getJSON('/url/to/ajax/view/', {foo: 'bar'}, function(data, jqXHR){
    // do something with response
    });

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

    下一部分是您的处理程序,在本例中当然是 Django View 。该 View 的唯一要求是它必须返回一个 JSON 响应:
    from django.utils import simplejson

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

    请注意,除了必需的 request 之外,此 View 不接受任何参数。 .这有点哲学上的选择。恕我直言,在真正的 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')

    现在您有了一个 View ,您需要做的就是将它连接到 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'),

    然后,修改您的 View 以将其作为参数接受:
    def my_ajax_view(request, some_data):

    最后,修改 Javascript AJAX 方法以将其包含在 URL 中:
    $.getJSON('/url/to/ajax/view/'+some_data+'/', function(data, jqXHR){

    如果您走的是随请求传递数据的路线,那么您需要注意在 View 中正确检索它:
    def my_ajax_view(request):
    some_data = request.GET.get('some_data')
    if some_data is None:
    return HttpResponseBadRequest()

    这应该足以让您使用 Django 来处理几乎任何 AJAX 功能。其他任何事情都是关于您的 View 如何检索数据(手动创建数据、查询数据库等)以及您的 Javascript 回调方法如何处理 JSON 响应。一些提示:
  • data object 通常是一个列表,即使只包含一个项目。如果您知道只有一项,您可以使用 data[0] .否则,使用 for 循环访问每个项目:
    form (var i=0; i<data.length; i++) {
    // do something with data[i]
    }
  • datadata[i]是一个对象(又名字典、哈希、键控数组等),您可以通过将键视为属性来访问键的值,即:
    data[i].some_key
  • 一般处理 JSON 响应和 AJAX 时,通常最好先在浏览器中直接尝试,以便查看准确的响应和/或验证响应的结构。要在浏览器中查看 JSON 响应,您很可能需要一个扩展。 JSONView(适用于 FirefoxChrome )将使其能够理解 JSON 并像网页一样显示它。如果请求是 GET,您可以使用查询字符串以正常的 GET 方式将数据传递到 URL,即 http://mydomain.com/url/to/ajax/view/?some_data=foo .如果是 POST,则需要某种 REST 测试客户端。 RESTClient是一个很好的 Firefox 插件。对于 Chrome,您可以尝试 Postman .这些也非常适合从 Twitter、Facebook 等学习 3rd 方 API。
  • 关于javascript - 将信息从 javascript 传递到 django 应用程序并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11762629/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com