创建一个“单例”非模型对象的可口馅饼资源

2024-04-16 04:46:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是tastype,我想为“singleton”非模型对象创建一个Resource。在

出于这个问题的目的,我们假设我希望URL表示的是ini文件中存在的一些系统设置。 这意味着…:

  1. 我为此URL返回的字段将为此Resource自定义创建-没有包含此信息的模型。在
  2. 我想要一个返回数据的URL,例如GET请求/api/v1/settings。在
  3. 返回的数据应该以类似于详细信息URL的格式返回,即它不应该有meta和{}部分。它应该只包含设置中的字段。在
  4. 不应该GET一个这样的对象的列表,也不可能执行POSTDELETE或{}(这部分我知道如何做,但为了完整起见,我在这里添加此部分)。在
  5. 可选:出于API探索的目的,它应该与tastypie-swagger配合使用。在

我用了这个方法,但我觉得我的方法有点过时,所以我想知道这里的常识是什么。到目前为止,我尝试的是重写dehydrate并在那里完成所有的工作。这需要我重写obj_get,但将其留空(这有点难看),并且还需要通过重写override_urls来删除详细信息url中对id的需要。在

有更好的方法吗?在


Tags: 文件数据对象方法模型目的信息url
2条回答

您应该能够通过以下方式实现这一点。注意,我还没有实际测试过这个,所以可能需要一些调整。一个更丰富的例子可以在Tastypie Docs中找到

class SettingsResource(Resource):
    value = fields.CharField(attribute='value', help_text='setting value')

    class Meta:
        resource_name = 'setting'
        fields = ['value']
        allowed_methods = ['get']

    def detail_uri_kwargs(self, bundle_or_obj):
        kwargs = {}
        return kwargs

    def get_object_list(self, request):
        return [self.obj_get()]

    def obj_get_list(self, request=None, **kwargs):
        return [self.obj_get()]

    def obj_get(self, request=None, key=None, **kwargs):
        setting = SettingObject()
        setting.value = 'whatever value'
        return setting

SettingObject必须支持getattrsetattr方法。您可以将其用作模板:

^{pr2}$

这听起来像是完全不属于Tastype的驾驶室。如果您想控制标题,并返回一个带有application/json的有效负载的HttpResponse对象,为什么不在某处用@require_GET装饰一个视图呢?在

您的对象是一个singleton,并且禁止与它进行所有其他RESTful交互,这表明REST库对于这个工作是错误的工具。在

相关问题 更多 >