Django 从其他视图使用tastypieapi
我正在从普通的django视图调用tastypieAPIDjango 从其他视图使用tastypieapi,django,api,tastypie,Django,Api,Tastypie,我正在从普通的django视图调用tastypieAPI 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.f
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)
完成同样的事情,但似乎更难 我调用api的方式可以接受吗?
此外,如果我能在python字典中而不是在json中得到结果,那就太棒了。
可能吗 如果您需要字典,这意味着您必须更好地设计应用程序。不要在视图中做重要的事情,也不要在tastype方法中做重要的事情。重构它,使其具有共同的功能性 一般来说,视图必须较小。不超过15行。这使得代码可读、可重用且易于测试。 我将提供一个示例使其更清晰,假设在该tastype方法中,您必须创建一个类似的对象,可能会发送一个信号:
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()
希望能有所帮助。如果您需要字典,这意味着您必须更好地设计应用程序。不要在视图中做重要的事情,也不要在tastype方法中做重要的事情。重构它,使其具有共同的功能性 一般来说,视图必须较小。不超过15行。这使得代码可读、可重用且易于测试。 我将提供一个示例使其更清晰,假设在该tastype方法中,您必须创建一个类似的对象,可能会发送一个信号:
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()
希望能有所帮助。不,没有一种合适的方法可以作为python字典获得api响应。我从_json序列化器方法中看到了
,它不能以某种方式使用吗?不,没有一种合适的方法可以作为python字典获得api响应。我从_json
序列化器方法中看到,它不能以某种方式使用吗?谢谢你的回答。这真让我失望。我最初将utils
和view
分开。我认为tastypie可以取代utils
的功能,但我想不会。为什么它被称为API框架
,而我现在显然需要3个组件,utils
,view
和API
。我的意思是,为什么我会使用tastypi?我认为构建简单而健壮的核心服务(您的答案中的UTIL)是tastypie的工作。我错了吗?是的,你是对的。真糟糕。从技术上讲,有一些方法可以在视图中使用API方法,但它一点也不好。我认为Tastypie是为客户设计的。不管怎样,如果你以前把它分开了,那是件好事。再试一次,这是值得的。谢谢你的回复。当我使用tastypie时,我有定制的过滤(build_filters),数据准备代码(determinate)。我的utils
中已经有了这些。因此,如果我需要utils
,即使我使用了tastype(导致代码重复),为什么还要使用tastype呢?因为tastype支持创建REST web服务的所有管道。也许你需要这个。您可以在视图中轻松使用自己的web服务。只要发出一个HTTP请求,得到响应,解析JSON,就完成了。这将是一个不同的体系结构,但没关系,分离关注点很好。谢谢你的回答。这真让我失望。我最初将utils
和view
分开。我认为tastypie可以取代utils
的功能,但我想不会。为什么它被称为API框架
,而我现在显然需要3个组件,utils
,view
和API
。我的意思是,为什么我会使用tastypi?我认为构建简单而健壮的核心服务(您的答案中的UTIL)是tastypie的工作。我错了吗?是的,你是对的。真糟糕。从技术上讲,有一些方法可以在视图中使用API方法,但它一点也不好。我认为Tastypie是为客户设计的。不管怎样,如果你以前把它分开了,那是件好事。再试一次,这是值得的。谢谢你的回复。当我使用tastypie时,我有定制的过滤(build_filters),数据准备代码(determinate)。我的utils
中已经有了这些。因此,如果我需要utils
,即使我使用了tastype(导致代码重复),为什么还要使用tastype呢?因为tastype支持创建REST web服务的所有管道。也许你需要这个。您可以在视图中轻松使用自己的web服务。只要发出一个HTTP请求,得到响应,解析JSON,就完成了。这将是一个不同的体系结构,但没关系,分离关注点是很好的。