在django视图函数中调用活塞处理程序

时间:2012-01-03 12:37:49

标签: python django django-views django-urls django-piston

我正在使用django活塞来实现我的RESTful API。我已经实现了一个

的api
/api/[uuid of user]

将提供与用户uuid相关的所有信息。

但是,我也想实现另一个api

/api/user/username

其中输出应与前一个输出完全相同。

我不想用不同的输入维护两个api但输入相同。因此,我想要做的是重定向活塞api调用。在互联网上搜索之后,似乎活塞无法做到(如果我错了就纠正我),所以我走出了一个解决方法。对于第二个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 个答案:

答案 0 :(得分:2)

错误消息告诉您read GenericHander方法是实例方法,而不是classmethod。在调用方法之前,您需要实例化对象。

在不知道有关类或方法的任何内容的情况下,可能工作:

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

但是实例化调用可能需要一些参数,这些参数应该记录下来。