我从正常的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)
Using tastypie resource in view
Call an API on my server from another view
实现同样的目标,但似乎更难。
我接受api的方式是否可以接受? 此外,如果我能在python字典而不是json中得到结果,那将是很棒的 可能吗?
答案 0 :(得分: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()
希望它有所帮助。