Angular post使用Django Rest Framework返回403而Django中的get返回301

时间:2015-08-22 21:41:29

标签: python angularjs django post django-rest-framework

这是我的角色服务

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
  });
}

以下是我的viewset的create函数

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
.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时,这是令人惊讶的在检查权限时被调用

1 个答案:

答案 0 :(得分:1)

这看起来像一个简单的身份验证或授权(权限)问题。我在视图中看不到任何身份验证权限,因此我假设DRF使用默认值。默认情况下,匿名用户不得发布(I don't think, anyway) django-rest-framework.org/api-guide/permissions