Django API 请求

2024-03-02

我正在尝试使用模型的字段作为 API 请求中的关键字来访问另一个服务的 API。 URL 会像这样:

http://api.example.com/json/?first_name=FNAME&last_name=LNAME&key={key}

这是我的views.py 代码:

class ExamplePersonView(ListView):

    context_object_name = "example_person"
    template_name = "templates/example_person.html"

    def get_queryset(self):
        lname = get_object_or_404(ExamplePeople, lname__iexact=self.args[0])
        return ExamplePeople.objects.filter(lname=lname)

据我了解,我需要使用 AJAX 在我的页面模板和 view.py 之间进行通信,以发送请求,然后在页面上呈现信息。

我发现了几个 Django 应用程序可以轻松地将模型转换为公共 API,但没有一个应用程序可以帮助您从其他服务访问 API。有人知道这样的应用程序吗?

如果没有,是否有人很好地理解如何使用 AJAX 和 Django 来发出请求并将其呈现在模板中?


有多种方法可以与“外部”API 进行通信。没有必要使用ajax。 Ajax 仅用于在模板中进行后台调用,触发您想要的任何事件。

但假设您想与 facebook GraphAPI 通信以检索个人资料

http://graph.facebook.com/bill.clinton http://graph.facebook.com/bill.clinton

标准结果被序列化为 JSON,可以轻松实现到 AJAX 或任何 JavaScript 库中,因此得名 JavaScript 对象表示法。

因此,AJAX 的示例可能是:

function callFacebook() {
    $.ajax({
        type: "GET",
        data: ({}),
        dataType: 'json',
        url: "http://graph.facebook.com/bill.clinton",
        success: function(data){
            alert("Hi I am former "+data.name);
        }
    });
}
callFacebook();

将其包含在您的 javascript 文件中或模板中的脚本标记之间,您应该会收到一条不错的警报消息:

嗨,我是前总统比尔·克林顿

现在您可以将此警报变成更有意义的内容,并将其放入 h1 标记中(不确定为什么这有意义)

$("body").html("<h1>"+data.name+"</h1>");

但有时您可能希望检索数据并在应用程序的服务器端对其执行某些操作。

因此创建一个 django urlpattern 和视图,例如:

from urllib2 import urlopen
from django.http import HttpResponse
from django.utils import simplejson    

def call_bill(request):
    url = "http://graph.facebook.com/bill.clinton"
    json = urlopen(url).read()
    # do whatever you want
    return HttpResponse(simplejson.dumps(json), mimetype="application/json")

# add this to your url patterns
url("^call_bill_clinton/$", call_bill)

现在访问您的网址

作为逻辑结果,也完全有可能通过某些用户操作触发异步事件。例如,前面提到的 ajax 示例中的 URL 参数也可以是 django url,如“/call_bill_clinton/”。

<!-- add a button to call the function -->
<button onclick="callFacebook();">Call Bill</button>

function callFacebook() {
    $.ajax({
        type: "GET",
        data: ({}),
        dataType: 'json',
        url: "/call_bill_clinton/",
        success: function(data){
            alert("Hi I am former "+data.name+" and I came from Django");
        }
    });
)
// remove the auto call

此外,ajax 调用可以让您执行与 http 请求相同的技巧,您可以将各种请求方法与很酷的 javascript 事件结合使用,例如 beforeSend 事件

    beforeSend: function() {
        $('#loading').show();
    },

#loading 可能类似于:

   <div id="loading" style="display:none;">
        <img src="{% static "images/loading.gif" %}" />
    </div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django API 请求 的相关文章

随机推荐

  • 如何对实例创建进行单元测试?

    我有一个Carpenter类 它的工作使用Lathe and a Wood object class Carpenter function Work tool new Lathe material new Wood tool gt Appl
  • 红帽的订阅管理器如何工作?

    红帽subscription manager是一个从命令行注册 附加和删除订阅的工具 如果我理解正确的话 该工具会连接到客户门户以检索证书 然后 这些证书可用于从 Red Hat 存储库下载 yum 软件包等 Sources https l
  • 我的 Beaker、WSGI、Apache2、Python 有什么问题吗?

    好的 我的代码如下 我正在使用 apache2 mod wsgi beaker python def application environ start response session environ beaker session if
  • 删除行后数据库大小不变

    我有 2 个数据库 我从其中删除了特定表中的行 以减少数据库的大小 删除后大小为DB mdf不会改变 我还尝试重建索引并使用cleantable 但没有效果 ALTER INDEX ALL ON dbo Tablename REBUILD
  • Jetpack Compose Surface 单击波纹未根据形状进行剪裁?

    我有 3 个表面 如 gif 所示 当我单击波纹效果传播时 无需考虑表面的形状 哪些是用创建的 Composable fun SurfaceClickPropagationExample Provides a Context that ca
  • Perl-我在寻找什么功能?将多个规则分配给指定结果

    我在脑海中概念化了一个函数 我想象它存在 但如果它存在 我不知道它的名字 因此很难用谷歌搜索 假设我想定义两个结果 我将称之为Pass and Fail 我想要几个不同的规则适用于这两种结果 因此 为了清楚起见 希望如此 假设我有一个文件
  • 在 Three.js 中,Alpha 通道工作不一致

    我正在用 Three js 构建一个 剪纸 世界 我的所有模型都是简单的 平面 我使用带有 Alpha 通道的 PNG 来对它们进行纹理处理 以将平面修剪成更令人愉悦的形状 奇怪的是 根据飞机的位置和相机的位置 透明度不可预测地出现和消失
  • 检查数据帧是否包含任何空值

    我有一个数据框 需要查看它是否包含空值 关于同一主题的帖子有很多 但几乎所有帖子都使用count行动或show方法 count在我的例子中 由于数据量很大 操作的成本非常高 同样对于show method 有没有一种方法可以让 Spark
  • 在类中使用 PDO [重复]

    这个问题在这里已经有答案了 我有一些类执行一些 MySQL 查询和准备好的语句 然而 我不知道如何将我的 PDO 对象合并到这些类中 例如 我想做这样的事情 不幸的是 它不起作用 谁能建议一种优雅的方法来做到这一点 谢谢你的时间 抱歉 我是
  • 动态组装scrapy GET请求字符串

    我一直在使用 firebug 并且有以下字典来查询 api url htp my url aspx top querystring dbkey x1 stype id s 27 headers accept text html applic
  • qt webengine将javascript输出重定向到GUI

    我有一个可以查看页面的应用程序QWebEngineView小部件如何将我的 javascript 控制台日志重定向到我的 GUI 它当前显示在我的调试输出中 您必须子类化 QWebEnginePage 才能覆盖 javaScriptCons
  • 使用immulator时在android studio中使用protocol=http/1.1、code=200在Retrofit中获取F响应

    我正在从 Nodejs 本地服务器调用 API API正在调用 但Retrofit的respose body中没有数据 代码 200 和消息 OK 我收到以下回复 Response protocol http 1 1 code 200 me
  • FlexSlider 2 标题在 chrome 上闪烁

    我在 chrome 上的标题有些闪烁 http tyni cc flexsliderissue http tyni cc flexsliderissue在野生动物园中一切都运行良好 任何人都知道出了什么问题吗 谢谢 丹尼尔 我经常使用 Fl
  • React hooks - 当状态更改为相同值时如何强制 useEffect 运行?

    所以我正在构建一个鼓垫类型的应用程序 除了这个之外 几乎所有东西都可以正常工作 编辑 把整个东西放在codesandbox上 如果有人想看的话 codesandbox io s sleepy darwin jc9b5 file src Ap
  • 连接到存储在 Azure VM 上的 Nexus 3 Preview 上的 Docker 注册表时出现问题

    基本上 我在连接到我尝试使用最新的 Nexus 预览版创建的 docker 注册表时遇到了问题 首先 我在运行 Ubuntu 14 04 trusty 的 MS Azure 云服务器上安装了 Sonotype Nexus 3 Preview
  • 如何在 PHP 中使用 UTF-8 支持替换所有非字母字符

    我想从字符串中删除所有非字母字符 问题是我不知道字母范围 因为它是 UTF8 字符串 可以是英语 我通常会做这样的事情 str preg replace a zA Z str or str preg replace w u str 但它们都
  • CSS 打印预览 - 显示图像/链接 URL

    我正在创建一个打印样式表 并且希望通过在链接和图像旁边显示链接 URL 来使网站尽可能易于访问 对于简单的链接我找到了这个解决方案 http davidwalsh name optimize your links for print usi
  • 如何在 Android 手机上签署“.apk”文件?

    我想在手机上生成一个新的 apk 文件 我的应用程序市场中的一个功能 如应用程序 我必须在安装它之前对其进行签名 我想我必须在手机上运行 JarSigner JarSigner 存在于以下两个项目中 OpenJDK 和 GCC libjav
  • 使 clos 对象可在 lisp 中打印

    如果你想让 common lisp 中的 CLOS 对象可打印 可读打印 你如何在不使用除了 print 和 read 之外的任何东西的情况下做到这一点 至少在我的解决方案中 有两个部分可以做到这一点 但是您将需要这个功能 感谢 cl pr
  • Django API 请求

    我正在尝试使用模型的字段作为 API 请求中的关键字来访问另一个服务的 API URL 会像这样 http api example com json first name FNAME last name LNAME key key 这是我的