Skip to main content
 首页 » 编程设计

python之Angular post返回403而get在Django中使用Django Rest Framework返回301

2025年05月04日35yyy_WW

这是我的 angular.service

function register(email, password, confirm_password, username){ 
  // get works 
  // $http.get('/api/v1/accounts/');  
 
  return $http.post('/api/v1/accounts/',{ 
    username: username, 
    password: password, 
    email: email 
  }); 
} 

这是我的 create我的 View 集的功能

class AccountViewSet(viewsets.ModelViewSet): 
    lookup_field = 'username' 
    queryset = Account.objects.all() 
    serializer_class = AccountSerializer 
 
    def get_permissions(self): 
        if self.request.method == 'Post': 
            return (permissions.AllowAny(),) 
 
    def create(self, request): 
        print "this is not printing at all" 

这是我的 urls

router = DefaultRouter() 
router.register(r'accounts', AccountViewSet) 
 
urlpatterns = [ 
    url(r'^$', views.index), 
    url(r'^api/v1/', include(router.urls)), 
 
] 

我用 csrf 配置我的 Angular 应用程序

angular 
.module('main') 
.run(run); 
 
run.$inject = ['$http']; 
 
function run($http) { 
  console.log("I double check this runs"); 
  $http.defaults.xsrfHeaderName = 'X-CSRFToken'; 
  $http.defaults.xsrfCookieName = 'csrftoken'; 
} 

但是每当我尝试 post使用 $http我明白了

403 (FORBIDDEN) 

虽然我能够使用 get

我错过了什么吗?

编辑:

我认为 get_permissions 没有按预期工作

如果我在全局设置权限

from rest_framework.permissions import AllowAny 
permission_classes = (AllowAny,) 

但是,如果我使用 get_permissions,代码就可以工作了,代码不起作用,这令人惊讶,因为我跟踪了 git repo看起来像get_permissions检查权限时总是被调用

请您参考如下方法:

这看起来像是一个简单的身份验证或授权(权限)问题。我在您的 View 中没有看到任何身份验证权限,因此我假设 DRF 使用的是默认设置。默认不允许匿名用户发帖(我不认为,反正) django-rest-framework.org/api-guide/permissions