2

非常に単純なもの、つまり新しいユーザーを作成しているときに、私はちょっと立ち往生しています。

私の頭の中のワークフローは次のとおりです。ユーザーは API キーを使用してクエリを送信しました。ユーザーが存在するかどうかを確認します。そうでない場合は、ユーザーを作成します。

これは私の UserSignUpResource です:

   class UserSignUpResource(ModelResource):

        class Meta:
            object_class = User
            queryset = User.objects.all()
            allowed_methods = ['post']
            include_resource_uri = False
            resource_name = 'newuser'
            excludes = ['is_active','is_staff','is_superuser']
            authentication = ApiKeyAuthentication()
            authorization = DjangoAuthorization()
            models.signals.post_save.connect(create_api_key, sender=User)

        def obj_create(self,bundle,request=None,**kwargs):
            try:
                bundle = super(UserSignUpResource, self).obj_create(bundle,request,**kwargs)
                bundle.obj.set_password(bundle.data.get('password'))
                bundle.obj.save()
            except IntegrityError:
                raise BadRequest('The username already exists')
            return bundle
    def apply_authorization_limits(self,request,object_list):
        return object_list.filter(id=request.user.id,is_superuser=True)

私のAPI呼び出し:

curl -v -X POST -d '{"username" : "puck", "password" : "123456"}' -H "Authorization: ApiKey puck:link" -H "Content-Type: application/json" http://127.0.0.1:8000/api/v1/newuser/

401 エラーが発生します。それはまさに、API キーを作成して新しいユーザーを作成する方法がわからないからです。

django admin に api 列が表示されますが、ユーザーごとに 1 つの api キーしか作成できません。したがって、それはどのように機能しますか?どうすれば機能しますか?

チュートリアルに関する情報はほとんどありません。それについてのブログはほとんどありません。どんな助けでもいいでしょう。かなり苦戦しています。

4

1 に答える 1

1

以下を使用して ApiKey を作成できます。

ApiKey.objects.create(user=user)

(管理インターフェイスからも実行できますが、空のインラインを保存しても実際には保存されないことに注意してください。つまり、API キーの日付/時刻フィールドをインラインで変更します)。

api_key を取得したら、これが機能するはずです。

curl -v -X POST -d '{"username" : "puck", "password" : "123456"}' -H "Content-Type: application/json" http://127.0.0.1:8000/api/v1/newuser/?username=user&api_key=API_KEY
于 2012-10-03T21:00:40.390 に答える