1

通常のdjangoビューからtastypie apiを呼び出しています。

def test(request):

    view = resolve("/api/v1/albumimage/like/user/%d/" % 2 )

    accept =  request.META.get("HTTP_ACCEPT")
    accept += ",application/json"
    request.META["HTTP_ACCEPT"] = accept   
    res = view.func(request, **view.kwargs)

    return HttpResponse(res._container)

ビューでのtastypie リソースの使用
別のビューからサーバー上の API を呼び出す

同じことを達成しますが、難しいようです。

API の呼び出し方法は受け入れられますか?
その上、json ではなく python 辞書で結果を取得できたら最高です。
出来ますか?

4

1 に答える 1

1

辞書が必要な場合は、アプリケーションをより適切に設計する必要があることを意味します。ビューや Tastypie メソッドで重要なことを行わないでください。共通の機能を持つようにリファクタリングします。

原則として、ビューは小さくする必要があります。15行以下。これにより、コードが読みやすく、再利用可能になり、テストが容易になります。

わかりやすくするために例を示します。その Tastypie メソッドで Like オブジェクトを作成し、シグナルを送信する必要があるとします。

class AlbumImageResource(ModelResource):
    def like_method(self, request, **kwargs):
        # Do some method checking

        Like.objects.create(
            user=request.user,
            object=request.data.get("object")
        )
        signals.liked_object(request.user, request.data.get("object"))

        # Something more

ただし、ビューでその動作を再利用する必要がある場合は、別の関数で因数分解するのが適切です。

# myapp.utils
def like_object(user, object):
    like = Like.objects.create(
        user=request.user,
        object=request.data.get("object")
    )
    signals.liked_object(request.user, request.data.get("object"))
    return like

これで、API メソッドとビューから呼び出すことができます。

class AlbumImageResource(ModelResource):
    def like_method(self, request, **kwargs):
        # Do some method checking
        like_object(request.user, request.data.get("object")) # Here!

そしてあなたの見解では...

# Your view
def test(request, object_id):
    obj = get_object_or_404(Object, id=object_id)
    like_object(request.user, obj)
    return HttpResponse() 

それが役に立てば幸い。

于 2013-02-01T16:16:13.640 に答える