1

我想做一个基于 Tastypie 的 API 加法器。这是它的工作原理......用户将发布到他们想要添加的两个号码并使用 Tastypie + Django 我想在返回给用户时包含添加的号码。

我没有兴趣将它放入 mySQL 数据库。

class Adder(resource):
    class Meta:
    authorization = Authorization()
    authentication = Authentication()

    def hydrate(self,bundle):
        _a = bundle.data['first_number']
        _b = bundle.data['second_number']

        self.create_response(request, return_dict)
        return bundle

Tastypie 的文档似乎确实围绕着模型(原因很明显)。

但是我很好奇 create_response 是否可以从 hydrate 方法中调用,以及调用 hydrate 方法是否是处理发布数据的正确方法。

4

1 回答 1

2

我可能会跳过更细粒度的东西,如 hydrate、apply_sorting、build_filters 等。

我假设没有 api 后面的对象,您正在使用类似列表的 url /api/v1/add_stuff/,并假设您正在接受 POST 请求。如果这些假设是错误的,您可以通过更改为 post_detail、get_list 等来进行调整。

def post_list(self, request, **kwargs):
    _a = request.POST.get('first_number', None)
    _b = request.POST.get('second_number', None)
    if None in (_a, _b):
        raise HttpBadRequest()
    return self.create_response(request, {'result': _a + _b})

请注意,我认为这段代码可以工作,但我还没有测试过。它旨在提供一个起点。

Tastypie 文档的这一部分描述了调用各种方法的顺序,并且在页面底部有一个完整的 API 参考,因此您可以查看期望的参数以及它们应该返回的参数。

编辑:

这种情况的流程将如下所示:

  1. dispatch中,检查请求 uri。根据是否请求了详细信息或列表 uri (/api/v1/add_stuff/<pk>//api/v1/add_stuff/),将处理委托给dispatch_detaildispatch_list。这也是身份验证、授权和限制检查发生的地方。

  2. dispatch_list中,检查请求方法并将调用委托给名为 的方法'%s_list' % request.METHOD.lower()。为了回答您的评论,这些是神奇的方法名称。如果请求方法是 POST,则dispatch_list查找名为的方法 post_list,如果未定义适当的处理程序,则会引发错误。

于 2012-09-20T16:42:36.243 回答