使用Javascript访问Django Rest框架API-获取令牌
我有一个使用Django Rest框架的API设置。当通过cURL或HTTPie甚至可浏览的API进行访问时,它工作良好。API具有令牌身份验证,因此最初您必须提供将返回令牌的凭据。使用HTTPie(甚至curl),您可以执行以下操作:使用Javascript访问Django Rest框架API-获取令牌,javascript,django,django-rest-framework,Javascript,Django,Django Rest Framework,我有一个使用Django Rest框架的API设置。当通过cURL或HTTPie甚至可浏览的API进行访问时,它工作良好。API具有令牌身份验证,因此最初您必须提供将返回令牌的凭据。使用HTTPie(甚至curl),您可以执行以下操作: http POST http://127.0.0.1:8000/api/v1/api-token-auth/ username="user1" password="testpassword" 这将返回一个响应,例如: HTTP/1.0 200 OK Allow
http POST http://127.0.0.1:8000/api/v1/api-token-auth/ username="user1" password="testpassword"
这将返回一个响应,例如:
HTTP/1.0 200 OK
Allow: POST, OPTIONS
Content-Type: application/json
Date: Sun, 03 Sep 2017 16:57:38 GMT
Server: WSGIServer/0.2 CPython/3.6.1
X-Frame-Options: SAMEORIGIN
{
"token": "fgfdgfdgfdgfdgd45345345lkjlj"
}
然后,您将获取令牌并执行GET/PUSH/etc,如下所示:
http --json POST http://127.0.0.1:8000/api/v1/test/ test_text="Testing" 'Authorization: Token fgfdgfdgfdgfdgd45345345lkjlj'
我已经在谷歌上搜索了一段时间了,对于上面两行如何翻译成Javascript,我找不到任何明确的答案?如何(1)通过凭证获取令牌;(2) 检索令牌;(3) 使用令牌发出GET和PUSH请求?我同意您应该使用Ajax 您需要在应用程序的一开始就调用ajax:
var data = {username:'user',password:'password'}
$.ajax({
type: 'POST',
data: data,
url: 'http://your_url',
success: function(res){
console.log(res)
$.ajaxSetup({
headers: {
"token": res.token
}
});
},
error: function(error) {
callbackErr(error,self)
}
})
还没有测试过,但想法是使用Ajax调用获取令牌,并使用.ajaxSetup将令牌保存到所有后续Ajax请求的头中
您可以执行以下操作:
var data = {test_text="Testing"}
$.ajax({
type: 'POST',
data: data,
url: 'http://127.0.0.1:8000/api/v1/test/',
success: function(res){
console.log(res) //answer of api call.
});
},
error: function(error) {
callbackErr(error,self)
}
})
或者这个:
$.ajax({
type: 'GET',
url: 'http://127.0.0.1:8000/api/v1/ANOTHER_TES/',
success: function(res){
console.log(res) //answer of api call.
});
},
error: function(error) {
callbackErr(error,self)
}
})
更改调用的
类型
参数以更改您的请求 post、get或任何其他url调用都是异步调用。因此,为了维护程序流程并发出post请求,您需要使用js的promise特性,这将使您的post调用同步。
如果您在程序开始时使用此代码,则此代码可以正常工作,但这是异步的,要使其与您的程序同步,您需要使用promise。
对于你问题的第三部分,你需要这样做
$.ajax({
type: 'GET',
url: 'http://your_url' + "/token=" + your_token,
success: function(res){
console.log(res)
},
error: function(error) {
callbackErr(error,self)
}
})
您使用的是特定的框架/库吗?您好@bryan60,我没有使用任何特定的Javascript库。我很乐意使用完成任务的JS库。您不能使用post方法在url中发送数据。您需要在标头中以键值对的形式传递凭据。使用jQuery,它易于使用,功能丰富provided@AbhishekParmar非常感谢您的评论,但是我该如何使用jquery来实现这一点呢?从语法上看,它是什么样子的?谢谢@Tico,所以这段代码返回了一个令牌,它回答了我问题中的第1点和第2点,非常好。但我不清楚该令牌如何用于发出GET或PUSH请求。你能举个基本的例子吗?假设只有一个字段可以获取/推送到:test_text。很好,我想这回答了我的问题。非常感谢!
$.ajax({
type: 'GET',
url: 'http://your_url' + "/token=" + your_token,
success: function(res){
console.log(res)
},
error: function(error) {
callbackErr(error,self)
}
})