0

我使用Django的REST框架,在JSON提供的数据和使用它们通过AJAX刷新页面。如何保护页面正在用数据更新的URL并且没有人可以访问API网址。网址是可见的AJAX在HTML,所以它可以被访问,但我想,以防止它通过只访问它的网站具有令牌或其他任何适当的身份验证。如何在Django通过AJAX设置令牌认证,以确保API网址

的URL为 '/ API /项目/'(参见AJAX代码)

serializers.py

from rest_framework import serializers 

from .models import Item 

class ItemModelSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Item 
     fields = [ 
      'title', 
      'value', 
     ] 

views.py(在API)

from rest_framework import generics 
from .serializers import ItemModelSerializer 
from .models import Item 

class ItemListAPIView(generics.ListAPIView): 
    serializer_class = ItemModelSerializer 

    def get_queryset(self): 
     return Item.objects.all().order_by('sort') 

网址.py

urlpatterns = [ 
    #...urls... 
    url(r'^api/item/', include('apps.item.api.urls', namespace='api-item')), 
    url(r'^admin/', admin.site.urls), 
] 

template - ajax

setInterval(function() { 
    $.ajax({ 
     method: "GET", 
     url: "/api/item/", 
     success: function(data) { 
      $("#items tbody").empty(); 
      $.each(data, function (key, value) {          
       var itemKey = key; 
       var itemTitle = value.title; 
       var itemValue = value.value; 
       $("#items tbody").append(
        "<tr><td class='left'>" + itemTitle + "</td><td>" + itemValue</td></tr>" 
       ) 
      }) 
     }, 
     error: function(data) { 
      console.log("error") 
      console.log(data) 
     } 
    }) 
}, 3000) 

回答

0

我不确定我是否正确理解你的问题,我猜你是问你如何在Django中为你的API在Django中设置一个令牌。通常,我们使用共享令牌的概念。将会有一个登录API用户名/密码对用户进行身份验证。如果凭据是正确的,权威性的API将返回,你可以使用和AJAX请求设置令牌。使用该令牌进一步调用您的API进行身份验证。

如果要直接打电话给你的API不AUTH API,你将不得不使用Django和AJAX之间共享一个硬编码的令牌但它是不安全遵循这样的做法。

看看这里的DRF认证http://www.django-rest-framework.org/api-guide/authentication/#sessionauthentication

+0

“如果要直接打电话给你的API没有权威性API,你将不得不使用硬编码的令牌Django和AJAX之间共享但它是不安全遵循这样的做法。” - 这是我的恰恰是点 - 如何在Django,AJAX安全的GET请求,JS只有该网站可以使用它没有其他人? – Radek