0

Django Rest Framework を使用して、Rest API で新しいモデルを作成しようとしています。

これは私のシリアライザです:

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

これは私のview.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の失敗

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

何をすべきかわかりません。投稿の contentType:"application/json" の部分を省略しても、これは起こりません (手動投稿を行う場合)

私の端末ではCURLで動作します。

私のクロムインスペクター>ネットワークで、これを取得します:

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

Request、および Response は空です。

編集

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 に答える