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

Angularjs 403尝试通过DRF访问API时禁止,angularjs,django,django-rest-framework,Angularjs,Django,Django Rest Framework,我正在尝试使用以下服务从angular使用django rest framework访问django服务器: myapp.factory("GetData", ["$resource",function($resource) { return $resource( "http://local/path/**/users/:username/", {}, { "query": { method: "GET",

我正在尝试使用以下服务从angular使用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禁止的错误。谁能给我解释一下是什么引起的。以及我如何解决这个问题

My url.py如下所示:

from rest_framework.routers import DefaultRouter
from .views import UserViewSet

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

urlpatterns = router.urls
 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
My views.py文件如下所示:

from rest_framework.routers import DefaultRouter
from .views import UserViewSet

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

urlpatterns = router.urls
 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

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

您可以查找

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

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

CORS_ORIGIN_ALLOW_ALL = True
编辑

此外,您还需要将此添加到您的中间件中

'corsheaders.middleware.CorsMiddleware',

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

您可以查找

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

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

CORS_ORIGIN_ALLOW_ALL = True
编辑

此外,您还需要将此添加到您的中间件中

'corsheaders.middleware.CorsMiddleware',

我通过结合@Bipul Jain(上文)的建议并在我的$resource中修改这个链接,成功地解决了这个问题

“***/users/:username/”


我从链接中删除了,403禁止的错误消失了。

我通过结合@Bipul Jain的建议(如上)并在$resource中更改此链接,成功地解决了这个问题

“***/users/:username/”



我从链接中删除了,403禁止的错误消失了。

除了HTTP状态码,响应的主体是什么?它包含什么?这是我在控制台中遇到的全部错误:GET**/users/403(禁止)(匿名)@angular.js:12011 sendReq@angular.js:11776 serverRequest@angular.js:11571 processQueue@angular.js:16383(匿名)@angular.js:16399$eval@angular.js:17682$digest@angular.js:17495$apply@angular.js:17790 done@angular.js:11831 completeRequest@angular.js:12033 requestLoaded@angular.js:11966如果在浏览器中打开URL:local/path/**/users(即不是通过angular),会发生什么?它工作得很好。它为我提供了预期的内容除了HTTP状态代码之外,响应的主体是什么?它包含什么?这是我在控制台中遇到的全部错误:GET**/users/403(禁止)(匿名)@angular.js:12011 sendReq@angular.js:11776 serverRequest@angular.js:11571 processQueue@angular.js:16383(匿名)@angular.js:16399$eval@angular.js:17682$digest@angular.js:17495$apply@angular.js:17790 done@angular.js:11831 completeRequest@angular.js:12033 requestLoaded@angular.js:11966如果在浏览器中打开URL:local/path/**/users(即不是通过angular),会发生什么?它工作得很好。它给了我预期的内容。这种方法不起作用。但我相信这确实与CORS有关。除了您在这里确定的方法之外,还有其他处理CORS的方法吗?忘记添加中间件配置了。请求是否到达服务器?如果是,那么错误消息是什么?XMLHttpRequest无法加载。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”。响应的HTTP状态代码为403。我在白名单localhost:3000@Bipul JainI编辑我的答案之前遇到了这个错误。您添加了中间件并尝试了吗?在将localhost:3000列入白名单后,我只得到了403(禁止),此方法不起作用。但我相信这确实与CORS有关。除了您在这里确定的方法之外,还有其他处理CORS的方法吗?忘记添加中间件配置了。请求是否到达服务器?如果是,那么错误消息是什么?XMLHttpRequest无法加载。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”。响应的HTTP状态代码为403。我在白名单localhost:3000@Bipul JainI编辑我的答案之前遇到了这个错误。您添加了中间件并尝试了吗?在将localhost:3000列入白名单后,我只得到403(禁止)aah。这是另一个。我不确定我的回答是否能被接受。这是另一个。我不确定我的回答是否能被接受。