为"单例"非模型对象创建tastypie资源

 brucegogo03 发布于 2023-02-06 14:36

我正在使用tastypie,我想创建Resource一个"单例"非模型对象.

出于这个问题的目的,让我们假设我想要的URL表示ini文件中存在的一些系统设置.这意味着......:

    我为此URL返回的字段将为此自定义创建Resource- 没有包含此信息的模型.

    我想要一个返回数据的URL,例如GET请求/api/v1/settings.

    返回的数据应该以类似于细节URL的格式返回 - 也就是说,它不应该包含metaobjects部分.它应该只包含设置中的字段.

    它不应该是GET这样的对象的列表也不可能执行POST,DELETE或者PUT(这部分我知道该怎么做,但我在这里添加它是为了完整性).

    可选:它应该tastypie-swagger适合API探索目的.

我得到了这个工作,但我认为我的方法有点屁股倒退,所以我想知道这里的常识是什么.到目前为止我尝试的是覆盖dehydrate并完成那里的所有工作.这需要我覆盖obj_get但是将其留空(这有点难看)并且还要id通过覆盖去除细节URL 中的需要override_urls.

有没有更好的方法呢?

1 个回答
  • 您应该能够通过以下方式实现此目的.注意我实际上没有对此进行测试,因此可能需要进行一些调整.在Tastypie文档中可以找到更丰富的示例

    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方法.您可以将其用作模板:

    class SettingObject(object):
        def __init__(self, initial=None):
            self.__dict__['_data'] = {}
            if initial:
                self.update(initial)
    
        def __getattr__(self, name):
            return self._data.get(name, None)
    
        def __setattr__(self, name, value):
            self.__dict__['_data'][name] = value
    
        def update(self, other):
            for k in other:
                self.__setattr__(k, other[k])
    
        def to_dict(self):
            return self._data
    

    2023-02-06 14:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有