繁体   English   中英

AngularJS + django REST api

[英]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()

但是,一旦完成测试,我建议您使用正确的身份验证。 我一直在使用令牌身份验证。

有关详细信息,请查看此帖子:

Django Rest框架令牌认证

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM