在Django视图函数中调用活塞处理器

1 投票
1 回答
715 浏览
提问于 2025-04-17 09:27

我正在使用 Django Piston 来实现我的 RESTful API。我已经实现了一个 API,

/api/[uuid of user]

它会提供与用户的 UUID 相关的所有信息。

不过,我还想实现另一个 API,

/api/user/username

它的输出应该和之前的完全一样。

我不想维护两个输入不同但输出相同的 API。因此,我想做的是重定向 Piston 的 API 调用。在网上搜索了一下,似乎 Piston 不能做到这一点(如果我错了请纠正我),所以我想出了一个变通办法。对于第二个 API,我可以使用 Django 的视图函数来实现,如果用户名存在,就返回处理结果。如果不存在,就在视图函数中返回错误信息。我的代码如下:

def username_url_map(request, username):
   try
        user = UserProfile.objects.get(user = username)
    except UserProfile.DoesNotExist:
        return HttpResponse(simplejson.dumps({'error':'This user does not exist.' }), mimetype='application/json')
    except UserProfile.MultipleObjectsReturned:
        return HttpResponse(simplejson.dumps({'error':'This user does not exist.'}), mimetype='application/json')
    uuid = user.uuid

    results=GenericHandler.read(request, uuid)

    json = simplejson.dumps(results)
    return HttpResponse(json, mimetype='application/json')

但是我收到了以下错误信息:

TypeError
Exception Value: unbound method wrapper() must be called with GenericHandler instance as first argument (got WSGIRequest instance instead)

1 个回答

2

这个错误信息告诉你,GenericHanderread 方法是一个实例方法,而不是类方法。你需要先创建这个对象,然后才能调用这个方法。

在不知道更多关于这个类或方法的信息的情况下,这个方法 可能 可行:

handler = GenericHandler()
results = handler.read(request, uuid)

不过,创建对象的时候可能需要一些参数,这些参数应该在文档中有说明。

撰写回答