【问题标题】:Using django-tastypie for a non-RESTful API将 django-tastypie 用于非 RESTful API
【发布时间】:2013-08-01 07:51:46
【问题描述】:

假设您需要编写一个简单的非 RESTful API,并希望使用 django-tastypie 来实现,您会怎么做?

Tastypie 仅提供与数据模型紧密耦合的Resources。

有没有一种方法可以在 API 中使用 sweetpie 的其他实用程序(例如身份验证、序列化等),但将其用于“简单”API?当然,这可以写成一个简单的视图,但是你会错过美味派给你的其他东西。

一个简单的例子是一个接收字符串并反转它的 API。

【问题讨论】:

  • 你不需要使用ModelResource 还有一个Resource 类你可以继承django-tastypie.readthedocs.org/en/latest/…
  • @HeddevanderHeide 我从来没有提到过ModelResource,而是Resource,如果你看一下,即使Resource 也假设了某种数据模型,我对此并不感兴趣。所以这并不真的帮不了我。

标签: django api rest tastypie


【解决方案1】:

这是prepend_urls 的目的 - 您可以将自定义端点添加到现有方法中。开箱即用它们就像普通视图一样工作,但您现在可以从您的资源中调用您需要的所有函数 - 并返回普通的 HttpResponses 或搭载现有的 Tastypie 函数以返回丰富的对象。

例如,如果我有一个 User 资源并想提供一个端点来确定用户当前是否通过返回 10 进行身份验证,我会这样做:

def prepend_urls(self):
    return [
        #...
        url(r"^(?P<resource_name>%s)/is_authenticated?$" % (self._meta.resource_name), self.wrap_view('is_authenticated')),
        #...
    ]
# ...other methods in your Resource...
def is_authenticated(self, request, **kwargs):
    if self._meta.authentication.is_authenticated(request):
        return HttpResponse("1")
    else:
        return HttpResponse("0")

或者,如果我真的想为经过身份验证的用户返回实际的用户资源,我可以(例如)用return self.get_detail(request, id=request.user.id) 替换return HttpResponse("1") - 有效地模拟对/user/?id=[authenticated user's ID] 的调用。

【讨论】:

    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 2013-02-26
    • 2010-10-14
    • 1970-01-01
    • 2013-11-02
    • 2012-05-22
    • 1970-01-01
    • 2015-06-23
    相关资源
    最近更新 更多