And*_*mas 8 python django rest tastypie
我正在使用tastypie,我想创建Resource
一个"单例"非模型对象.
出于这个问题的目的,让我们假设我想要的URL表示ini
文件中存在的一些系统设置.这意味着......:
Resource
- 没有包含此信息的模型.GET
请求/api/v1/settings
.meta
和objects
部分.它应该只包含设置中的字段.GET
这样的对象的列表也不可能执行POST
,DELETE
或者PUT
(这部分我知道该怎么做,但我在这里添加它是为了完整性).tastypie-swagger
适合API探索目的.我得到了这个工作,但我认为我的方法有点屁股倒退,所以我想知道这里的常识是什么.到目前为止我尝试的是覆盖dehydrate
并完成那里的所有工作.这需要我覆盖obj_get
但是将其留空(这有点难看)并且还要id
通过覆盖去除细节URL 中的需要override_urls
.
有没有更好的方法呢?
您应该能够通过以下方式实现此目的.注意我实际上没有对此进行测试,因此可能需要进行一些调整.在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
Run Code Online (Sandbox Code Playgroud)
SettingObject必须支持getattr和setattr方法.您可以将其用作模板:
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
Run Code Online (Sandbox Code Playgroud)
这听起来完全超出了 TastyPie 的掌控范围。@require_GET
如果您想控制标头,并返回一个HttpResponse
具有所需负载的对象,为什么不在某个地方用 装饰单个视图呢application/json
?
事实上,您的对象是单例,并且禁止与其进行所有其他 RESTful 交互,这表明 REST 库不适合这项工作。
归档时间: |
|
查看次数: |
1106 次 |
最近记录: |