403尝试通过DRF访问API时禁止访问

时间:2017-02-04 19:16:20

标签: angularjs django django-rest-framework

我正在尝试使用以下服务从角度使用django-rest-framework访问django服务器:

myapp.factory("GetData", ["$resource",function($resource) {
   return $resource(
      "http://local/path/**/users/:username/",
      {},
      {
        "query": {
        method: "GET",
        isArray: true,
        headers:{
          "Content-Type":"application/json"
        }
      }
    },
    {
     stripTrailingSlashes:false
    }
   );
}]);

当我把URL放在浏览器中时,我得到了所需的输出,但问题是当我尝试通过Angular访问时,在我的控制台中我得到403禁止错误。任何人都可以向我解释导致这种情况的原因。以及如何解决这个问题。

我的url.py看起来如下:

from rest_framework.routers import DefaultRouter
from .views import UserViewSet

router = DefaultRouter()
router.register(prefix='users', viewset=UserViewSet)

urlpatterns = router.urls

我的views.py文件如下:

 from django.shortcuts import render
 from django.http import HttpResponse
 from rest_framework import viewsets
 from .models import users
 from .serializers import UserSerializer

 class UserViewSet(viewsets.ModelViewSet):
    queryset = users.objects.all()
    serializer_class = UserSerializer

2 个答案:

答案 0 :(得分:0)

我认为403禁止进入浏览器阻止跨源请求。 您需要通过设置适当的标头在API服务器上启用允许CORS。

您可以查找https://github.com/ottoyiu/django-cors-headers

为此,您需要添加已安装的应用。

'corsheaders'

然后开始测试它。检查文档中的微调设置。

CORS_ORIGIN_ALLOW_ALL = True

修改

您还需要在中间件中添加它。

'corsheaders.middleware.CorsMiddleware',

答案 1 :(得分:0)

我设法通过结合@Bipul Jain建议的https://stackoverflow.com/a/42044910/7210105(上图)并在我的$资源中更改此链接来解决问题

  

http://local/path/ ** /用户/:用户名/”

我从链接中删除了 http://local/path ,403 forbidden错误消失了。