为什么我的服务的其他部分不容易使用tastypie?我在tastypie资源和我的核心服务中有重复的代码

时间:2013-02-02 06:14:37

标签: python django api rest tastypie

我花了整整一周时间将tastypie整合到我的项目中,现在我无法停止思考'为什么我这样做'。

我正在使用django和tastypie(REST框架),但我的问题可以应用于其他语言/框架。

我的要求是 1.请求json的移动客户端 2.请求html和json的Web客户端

所以我有

  
      
  1. 对于json请求的end_point(例如,给我这个用​​户的图像)
  2.   
  3. end_point用于html请求(给我一个用户主页及其图像等)
  4.   
  5. core_service(在底部),它将图像字典列表返回到#1和#2
  6.   
def user_image_list_json(request): # 1
   dict = service.user_image_list(request.user_id)
   return serialize_as_json(dict)

def user_home(request): #2
    #build other parts of user home such as `user name`
    dict = service.user_image_list(request.user_id)
    #stuff that dict inside html 
    #build other parts of the page
    return html_response

#3
def image_list_user(user_id, last_image_id,request_comment_count, count):
    if last_image_id is not None:
        last_image_id = int(last_image_id)
        queryset = AlbumImage.objects.select_related().filter(id__lt=last_image_id).filter(album__user_profile__user__id = user_id)
    else:
        queryset = AlbumImage.objects.select_related().filter(album__user_profile__user__id = user_id)

    if count is not None:
        count = min(IMAGE_LIST_COUNT, count)
        queryset = queryset[0:count]
    else:
        count = IMAGE_LIST_COUNT

    album_image_list = list(queryset)

    #dict_list = [album_image.to_dict() for album_image in album_image_list]                                                                                                                                                                                                  
    dict_list = append_comment_list(album_image_list,request_comment_count)
    return dict_list

这就是我构建Web服务以便为Web客户端和移动客户端提供服务的方式 现在我听说REST框架可以简化Web开发。(这是我的第一个Web开发) 我适应tastypie(一个django / python REST api框架)

我预计tastypie会在第3级(common_service)替换我的代码 但我发现它实际上是#1 /#3捆绑在一起。

如果我的理解是正确的,我最终会以

结束
  
      
  1. json请求的end_point(例如,给我这个用​​户的图像)
  2.   
  3. end_point用于html请求(给我一个用户主页及其图片)
  4.   
  5. core_service(在底部),它将python字典返回到#1和#2
  6.   
  7. tastypie,作为#1 /#3
  8. 的组合   

所以即使我有tastypie,我仍然需要#3。(核心服务) 我觉得很奇怪......

Using tastypie api from other views是我的相关问题。

1 个答案:

答案 0 :(得分:2)

Tasty-pie(或任何类似框架)的好处源于以RESTful方式设计代码。在这种情况下,制作模型资源。

在您提交的案例中,如何将美味馅饼整合到您的项目中并不明显,这可能会解释您对美味派(或类似框架)的好处的困惑

AlbumImageresource的好候选人:

class AlbumImageResource(ModelResource):
    class Meta:
        queryset = AlbumImage.objects.all()
        resource_name = 'album_image'

...然后,任何AlbumImageResource都可能有URI registered ...

from myapp.api import AlbumImageResource

album_resource = EntryResource()

urlpatterns = patterns('',
    # The normal jazz here...
    (r'^api/', include(album_resource.urls)),
)

...它可以通过该URI以任何格式访问:

curl -H "Accept: application/json" http://127.0.0.1:8000/api/album_image/

然后,您有一个可以通过URI访问内容的RESTful系统。

事实上,文档even provides ways to limit accessadvanced ways to filter and sort data