2

私は一週間かけてtastypieをプロジェクトに統合しましたが、今では「なぜそれをしたのか」と考えるのをやめられません。

私はdjangoとtastypie(RESTフレームワーク)を使用していますが、私の質問は他の言語/フレームワークにも適用できます。

私の要件は次のとおりです。1。jsonを要求する
モバイルクライアント2.html
とjsonを要求するWebクライアント

だから私は持っていた

  1. jsonリクエストのend_point(例:このユーザーの画像を教えてください)
  2. HTMLリクエストのend_point(画像などを含むユーザーのホームページを教えてください)
  3. 画像ディクショナリのリストを#1と#2に返すcore_service(下部)
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. HTMLリクエストのend_point(画像付きのユーザーホームページを教えてください)
  3. pythonディクショナリを#1と#2に返すcore_service(下部)
  4. #1 /#3の組み合わせとして機能するおいしいパイ

ですから、おいしいものを持っていても、#3。(コアサービス)が必要です。
変だと思う...

他のビューからtastypieapiを使用することは、私の関連する質問です。

4

1 に答える 1

2

tasty-pie(または同様のフレームワーク)の利点は、RESTfulな方法でコードを設計することから生じます。この場合、モデルをリソースにします。

あなたが提示した場合、どのようにtasty-pieをプロジェクトに統合したかは明らかではありません。これは、tasty-pie(または同様のフレームワーク)の利点に関する混乱を説明している可能性があります。

AlbumImageリソースの良い候補になります:

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

...次に、URIを登録AlbumImageResourceすることができます...

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システムがあります。

実際、ドキュメントには、アクセスを制限する方法や、データをフィルタリングおよび並べ替える高度な方法も記載されています。

于 2013-02-04T21:00:06.963 に答える