0

我正在尝试使用 Django Rest Framework 创建一个带有 rest api 的新模型。

这是我的序列化器:

class FooSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Foo

这是我的观点.py

@api_view(['POST', 'GET','DELETE','OPTIONS'])
def foos(request):
    """
    API endpoint to create, delete and get foos
    """
    authentication_classes = (authentication.TokenAuthentication,)
    permission_classes = (permissions.IsAuthenticated,)

    model = Foo
    serializer_class = FooSerializer

    if request.method == "POST":
        data = JSONParser().parse(request)
        serializer = FooSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JSONResponse(serializer.data, status=201)
        else:
            return JSONResponse(serializer.errors, status=400)

    return Response(serializer.data)

然后在我的主干视图中:

       foo = new Foo
            name:'Bla di bla di'
        foo.save()

注意到除了 OPTIONS 失败之外,没有 POST。

失败的选项

OPTIONS http://127.0.0.1:8080/api/foo/  

我不知道该怎么做,如果我遗漏了帖子的 contentType:"application/json" 部分(手动发布时),这不会发生

它适用于我的终端中的 CURL。

在我的 chrome Inspector > Network 我得到这个:

Request URL:http://127.0.0.1:8080/api/foo/
Request Headersview source
Access-Control-Request-Headers:accept, origin, authorization, content-type
Access-Control-Request-Method:POST
Cache-Control:no-cache
Origin:http://localhost:8000
Pragma:no-cache

请求,响应为空。

编辑

我用 Rest APi 关闭了服务器,发生了完全相同的事情!所以这告诉我一件事,它与服务器无关。一定是AJAX的东西。

我完全糊涂了:-(

4

1 回答 1

1

在进行跨域请求时,在进行 POST 之前进行 OPTIONS 调用是很正常的。

如果发生了 OPTIONS 调用,但没有跟随 POST,则最可能的原因是 COR 失败。

检查服务器响应 - 它是否返回正确的标头?

你需要3个:

'Access-Control-Allow-Origin' 'Access-Control-Allow-Methods'
'Access-Control-Allow-Headers'

这些必须符合您的要求。

请参阅此答案以进行快速修复:https ://stackoverflow.com/a/3520073

或此页面的背景 + 完整说明:http ://www.html5rocks.com/en/tutorials/cors/

于 2013-12-05T11:45:49.333 回答