4

私はtastypieとそれにデータを投稿することに問題があります。401 エラー コードしか取得できません。

明確にするために、tastypie api からデータを正常に取得できます。

コード スニペットが添付されているので、誰かが私を助けてくれるかもしれません。始める前に、少し背景を説明します。私はカスタム認証クラスを使用しています。

    class CustomAuthorization(Authorization):
        def is_authorized(self, request, object=None):
            if request.user.username == 'custom_user':
                return True
            return False

実際のリソースは次のとおりです。

    class CustomObjectResource(ModelResource):
        class Meta:
            queryset = CustomObject.objects.all()
            authentication = ApiKeyAuthentication()
            authorization = CustomAuthorization()
            list_allowed_methods = ['get', 'post', ]
            detail_allowed_methods = ['get', 'post', 'put']
            include_resource_uri = False
            resource_name = 'customobject'
            always_return_data = True


        def obj_create(self, bundle, request=None, **kwargs):
            try:
                print "request"
            except:
                raise BadRequest('I couldnt save your information.')
            return True

obj_create メソッドが偽物であることはわかっていますが、それでも呼び出して何かを実行する必要がありますか、それともすでに問題になっていますか?

次の curl コマンドを使用して、tastypie API にデータを送信します。

    curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"body": "This will prbbly be my lst post.", "pub_date": "2011-05-22T00:46:38", "slug": "another-post", "title": "Another Post"}' http://local.com:8000/api/v1/customobject/?format=json&username=custom_user&api_key=123456789012345

api_key は正しいですが、この場合は偽物です!

前述のように、get メソッドは機能しますが、投稿は機能しません。

これを解決する方法や回避策を知っている人はいますか?

4

2 に答える 2

1

この問題をデバッグするために、いくつかのことを試してみます。

1)追加してみてください:allowed_methods = ['get', 'post', 'put']

2) custom_authorization に print ステートメントを追加して、request.user.username が異なるために問題が発生しているかどうかを確認します。

3) APIKeyAuthentication のソースにも(2)を行う。

問題をデバッグするには、これで十分です。完了したら、印刷ステートメントを忘れずに削除してください。

幸運を祈ります。

于 2012-07-26T02:09:37.513 に答える
0

これは、既知の問題が原因である可能性があります。現在、バックグラウンドのtastypieはPOSTをPUTに変換し、Nikunjが指摘したように、list_allowed_methodsではPUTがブロックされていないため、POSTもブロックされます...その場合は許可されていないメソッドを取得する必要があります。メソッド「is_authorized」でデバッグし、そこで何が起こっているかを確認することをお勧めします。

于 2012-07-28T00:38:11.847 に答える