我花了整整一周时间将tastypie整合到我的项目中,现在我无法停止思考'为什么我这样做'。
我正在使用django和tastypie(REST框架),但我的问题可以应用于其他语言/框架。
我的要求是 1.请求json的移动客户端 2.请求html和json的Web客户端
所以我有
- 对于json请求的end_point(例如,给我这个用户的图像)
- end_point用于html请求(给我一个用户主页及其图像等)
- core_service(在底部),它将图像字典列表返回到#1和#2
醇>
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捆绑在一起。
如果我的理解是正确的,我最终会以
结束
json请求的end_point(例如,给我这个用户的图像)- end_point用于html请求(给我一个用户主页及其图片)
- core_service(在底部),它将python字典返回到#1和#2
- tastypie,作为#1 /#3
的组合 醇>
所以即使我有tastypie,我仍然需要#3。(核心服务) 我觉得很奇怪......
答案 0 :(得分:2)
Tasty-pie(或任何类似框架)的好处源于以RESTful方式设计代码。在这种情况下,制作模型资源。
在您提交的案例中,如何将美味馅饼整合到您的项目中并不明显,这可能会解释您对美味派(或类似框架)的好处的困惑
AlbumImage
是resource的好候选人:
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 access和advanced ways to filter and sort data。