ajax - Django API 请求

标签 ajax django api

我正在尝试访问另一个服务的 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 在我的页面模板和我的 views.py 之间进行通信以发送请求,然后在页面上显示信息。

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

如果没有,是否有人对使用 AJAX 和 Django 发出请求并在模板中呈现它有很好的理解?

最佳答案

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

但是,假设您想与 facebook GraphAPI 进行通信以检索配置文件

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

标准结果被序列化为 JSON,它很容易实现到 AJAX 或任何 JavaScript 库中,因此名称为 JavaScript Object Notation。

所以 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 文件中或脚本标记之间的模板中,您应该会收到一条很好的警报消息:

Hi I am former President Bill Clinton



现在你可以把这个警报变成更有意义的东西,并将它放在一个 h1 标签中(不知道为什么这是有意义的)
$("body").html("<h1>"+data.name+"</h1>");

但有时您可能希望在应用程序的服务器端检索数据并对其进行处理。

所以创建一个 django urlpattern 和 View ,例如:
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>

关于ajax - Django API 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11615901/

相关文章:

javascript - Ajax 函数后没有数据传递到 URL

javascript - 为什么随机数量的 JSONP 请求会失败?

python - 当我在 Django 中运行我的服务器时,我收到模板不存在

java - 在 android 中调用 API 并使用 Retrofit 2 收到此错误 :Response{protocol=h2, code=200, message=, url=https ://api. com/video/list-video.php}

iphone - 我的 foursquare 身份验证、callback_url 和应用程序网站是什么?

c# - 我如何从 AtTask 下载文档?

javascript - 带有 Jsf 1.1 实现的 Ajax

php - jQuery AJAX 在表末尾添加表 tr

ios - Django 休息框架日期时间字段格式

python - Django:登录manage.py会导致误导性异常和回溯