[英]AngularJS + django REST api
我正在尝试使用DRF构建api。
客户端是一个支持AngularJS的cordova应用程序。
当我尝试使用$resource
发布一些用户对象时,我从django获得403禁止响应。
以下是我认为与此问题相关的一些代码:
API调用:
$rootScope.user =
User.get({id: response.id}).$promise.then(angular.noop, function (e) {
if (e.status == 404) { //If not found, register the user.
$rootScope.user = new User();
Object.keys(response).forEach(function (key) {
$rootScope.user[key] = response[key];
});
$rootScope.user.$save(); //Fails here! 403.
}
else
console.log(JSON.stringify(e.msg));
});
用户工厂:
.factory('User', function ($resource, serverConstants) {
return $resource(serverConstants.serverUrl + '/users/:id');
})
django观点:
# Users
class UserSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.CharField(max_length=100,required=True)
email = serializers.EmailField(required=False,allow_blank=True)
joined = serializers.DateField(required=False,default=datetime.date.today)
class Meta:
model = models.User
fields = ('joined', 'id', 'email')
def get_validation_exclusions(self):
exclusions = super(UserSerializer, self).get_validation_exclusions()
return exclusions + ['owner']
class UserViewSet(viewsets.ModelViewSet):
queryset = models.User.objects.all()
serializer_class = UserSerializer
PS:我已经配置了角度来使用CSRF cookie和django来允许CORS
提前致谢!
您的/user/:id
端点需要经过身份验证的请求 。
您需要使用上一个链接中指定的方法之一来验证客户端的请求。
鉴于您的应用程序在WebView中运行,然后具有内置cookie处理, SessionAuthentication
更容易实现。
如果您希望端点不需要身份验证,可以像这样设置其permission_classes
属性:
from rest_framework.permissions import AllowAny
class UserViewSet(viewsets.ModelViewSet):
queryset = models.User.objects.all()
serializer_class = UserSerializer
permission_classes = (AllowAny, )
我想DRF你的意思是django-rest-framework。
如果是,请看这里:
http://www.django-rest-framework.org/api-guide/authentication/
您可以将视图公开但使用AllowAny。
from rest_framework.permissions import AllowAny
from rest_framework import generics
restapi_permission_classes = (AllowAny,)
class MyListView(generics.ListCreateAPIView):
serializer_class = MyObjectSerializer
permission_classes = restapi_permission_classes
queryset = MyObject.objects.all()
但是,一旦完成测试,我建议您使用正确的身份验证。 我一直在使用令牌身份验证。
有关详细信息,请查看此帖子:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.