加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – Django API请求

发布时间:2020-12-16 02:51:31 所属栏目:百科 来源:网络整理
导读:我正在尝试访问其他服务的API,使用我的模型字段作为API请求中的关键字. URL就像这样: http://api.example.com/json/?first_name=FNAMElast_name=LNAMEkey={key} 这是来自views.py的代码: class ExamplePersonView(ListView): context_object_name = "examp
我正在尝试访问其他服务的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应用程序,可以很容易地将您的模型转换为公共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和视图,例如:

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参数也可以是像“/ call_bill_clinton /”这样的django url.

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

function callFacebook() {
    $.ajax({
        type: "GET",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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读