0

我如何从下面的代码中的响应中打印 id。用户确实存在于数据库中。我也遇到了这个错误。

from django.test import Client

c = Client(enforce_csrf_checks=False)
response = c.post('/reg/_user/', {'firstname': 'test', 'lastname' : '_test'})

查看 get_user

def _user(request):
  try:
    response_dict = {}
    qd = request.POST
    firstname = qd.__getitem__('firstname')
    lastname = qd.__getitem__('lastname')
    up = UserProfile.objects.get(first_name=firstname,last_name=lastname)
    print up.id
    return up.id
  except:
    pass

错误:

 response = c.post('/reg/_user/', {'firstname': 'test', 'lastname' : '_test'})
 File "/usr/local/lib/python2.7/dist-packages/django/test/client.py", line 483, in post
 response = super(Client, self).post(path, data=data, content_type=content_type, **extra)
 File "/usr/local/lib/python2.7/dist-packages/django/test/client.py", line 302, in post
 return self.request(**r)
 File "/usr/local/lib/python2.7/dist-packages/django/test/client.py", line 444, in request
 six.reraise(*exc_info)
 File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 201, in get_response
response = middleware_method(request, response)
 File "/usr/local/lib/python2.7/dist-packages/django/middleware/clickjacking.py", line 30, in process_response
if response.get('X-Frame-Options', None) is not None:
AttributeError: 'UserProfile' object has no attribute 'get'
4

1 回答 1

1

问题不在于您的测试,而在于视图本身。在 Django 中,视图总是必须返回一个HttpResponse 对象有时,这是使用诸如render()之类的快捷函数来实现的,但它反过来也返回一个 HttpResponse 对象。

如果由于某种原因您只想返回一个带有这个单一值的空页面,您可以更改

return up.id

return HttpResponse(up.id)

另外,我想知道:您创建视图是否只是为了测试UserProfile而不将其用作实际站点上的视图?如果是这样,则此代码不属于视图,应将其放入单元测试本身。您应该只使用测试客户端来测试实际的、真实的视图。


在一个几乎不相关但非常重要的注意事项上。这个:

try:
    # your view code
except:
    pass

是一个强大的反模式。你为什么要让所有潜在的问题保持沉默?你真的应该停止这样做。

于 2014-09-17T08:27:37.077 回答