这是我的 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
