【发布时间】:2016-12-25 09:33:26
【问题描述】:
我有一个问题,我不知道如何使它工作。
urls.py:
urlpatterns = [
url(r'athletes/search$', SearchAthletes.as_view()),
url(r'athletes/([0-9]+)$', ViewAthlete.as_view())
]
views.py:
class ViewAthlete(APIView):
def get(self, request, id, format=None):
athlete = Athlete.objects.get(id=id)
serializer = AthleteSerializer(athlete)
return Response(serializer.data)
test.py:
def test_view_athlete(self):
tmp = Athlete.objects.order_by('?')[0]
request = self.factory.get('/_api/v1/athletes/' + str(tmp.id))
request.user = AnonymousUser()
response = ViewAthlete.as_view()(request)
self.assertEquals(response.data.id, tmp.id)
我不断收到以下错误:
Traceback(最近一次调用最后一次): 文件“/tests.py”,第 44 行,在 test_view_athlete response = ViewAthlete.as_view()(请求)
文件“/venv/lib/python3.5/site-packages/django/views/decorators/csrf.py”,第 58 行,位于 Wrapped_view 返回 view_func(*args, **kwargs)
文件“/venv/lib/python3.5/site-packages/django/views/generic/base.py”,第 68 行,在视图中 return self.dispatch(request, *args, **kwargs)
文件“/venv/lib/python3.5/site-packages/rest_framework/views.py”,第 474 行,在调度中 响应 = self.handle_exception(exc)
文件“/venv/lib/python3.5/site-packages/rest_framework/views.py”,第 471 行,在调度中 响应 = 处理程序(请求,*args,**kwargs) 类型错误:get() 缺少 1 个必需的位置参数:'id'
据我了解,问题在于,ViewAthelete 视图类的 get 函数没有 id 参数。这是什么原因?在开发环境(非测试)中,它显示数据,但测试环境无法识别来自路由的参数。
【问题讨论】: