无法在django rest框架中获取POST数据

时间:2016-11-23 13:32:42

标签: angularjs django django-views django-rest-framework

以下是我的观点,

 @api_view(['GET','POST'])
def login(request):
    if request.method == 'GET':
        posts = Posts.objects.all()
        serializer = PostSerializer(posts, many=True)
        return Response(serializer.data)
    elif request.method == 'POST':
        usr = request.data.get('username')
        print(request.data)
        pwd = request.data.get('password')
        try:
            user = Users.objects.get(username=usr)
            if user.password == pwd:
                return Response(UserSerializer(user).data)
            else:
                return Response({})
        except Users.DoesNotExist:
            return Response({})

这是我在angularjs控制器中的调用

$http.post("api/v1/login/",{"username":$scope.username,"password":$scope.password})
           .then(
               function(response){
                 console.log('r',response.data)
               },
               function(response){
                 console.log('e',response)
               }
            );

我在视图中得到一个空对象。我还添加了

$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
        $httpProvider.defaults.xsrfCookieName = 'csrftoken';
        $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';

在某些博客中建议的角度配置中。request.data仍然是空的。我在哪里做错了请指导我。提前谢谢。

我已更新此帖子,因为有一些不相关的代码。问题应该在这两个代码块中。请帮助。获取ajax请求正在运行。只有在帖子中,我才能得到任何数据。

2 个答案:

答案 0 :(得分:0)

from rest_framework.decorators import api_view, parser_classes
from rest_framework.parsers import FormParser, MultiPartParser 

@api_view(['GET','POST'])
@parser_classes((FormParser, MultiPartParser))
def login(request):
    ...

答案 1 :(得分:0)

安装ngCookies然后添加以下代码:

.run(['$rootScope', '$log', '$http', '$cookies',
function ($rootScope, $log, $http, $cookies) {
    $http.defaults.headers.common['X-CSRFToken'] = $cookies['csrftoken'];
}]);

清理浏览器并重试。