0

次の例では URL が上書きされているため、 http://localhost:8000/api/v1/entry/1234/1233/?format=jsonのようなものを渡すことができます。これにより、パラメータが WRAP VIEW に渡されます。私は self.create_response(request, data) を実行しますが、ブラウザには次のようなものしか表示されません

0x2e27a50 の api.Entry オブジェクト

ブラウザでは、フィールドはシリアル化されません: 注: この段階では ModelResource は必要ありません。obj_get や get_object_list などのデータを返すカスタム ビューの dispatch_data を作成するにはどうすればよいですか? 問題のあるコードは次のとおりです。

#Object class
Class Entry(object)
    name = ''


#Resource class
class EntryResource(Resource):
    name = fields.CharField(attribute = 'name')

    class Meta:
        resource_name = 'entry'
        object_class = Entry
        include_resource_uri = False 
        authentication = Authentication()
        authorization = Authorization()
        serializer = Serializer()

    def override_urls(self):
        return [url(r"^(?P<resource_name>%s)/(?P<p1>[\d]{4})/(?P<p2>[\d]{4})%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('dispatch_data'),name='api_dispatch_data'),]

    def dispatch_data(self, request, **kwargs):
         p1 = kwargs['p1'] #params can be retrieved here
         p1 = kwargs['p2']
         info = Entry()
         info.name = p1 #just example
         response = {1:info}
         return info.values() 
         #Above results in ERROR, it will say Entry object has no attribute 'has_header' 
         #changing to self.create_response(request, info) will not serialize the fields



#urls.py
api = Api(api_name='v1')
api.register(EntryResource())

urlpatterns = patterns('',
    url(r'^api/', include(api.urls)),
)
4

1 に答える 1

0

Tastypie のUsing Tastypie With Non-ORM Data Sourcesには、必要な情報がすべて含まれていると思います。

基本的に、オブジェクトを返す (および/または必要に応じて作成、削除など) を担当するメソッドを実装する必要があります。カスタマイズする必要がない限り、「dispatch()」に触れる必要はありません。

これはニーズによって異なりますが、リソースが obj_get と obj_get_list を持っているかのように動作するようにしたい場合は、2 つを実装する必要があります。私が言及した例は非常に優れており、あなたを動かすはずです...

于 2012-03-08T14:38:40.490 に答える