2014-09-17 3 views
0

아래 코드의 응답에서 ID를 어떻게 인쇄 할 수 있습니까? 사용자가 DB에 존재합니다. 또한이 오류가 발생합니다.Django 테스트 클라이언트가 쿼리에서 행 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' 

답변

1

문제가 있지만, 뷰 자체에, 당신의 테스트를하지 않습니다. Django에서보기는 항상 HttpResponse object을 반환해야합니다. 때로는 render()과 같은 바로 가기 기능을 사용하여이 작업을 수행하지만 HttpResponse 개체도 반환합니다.

return up.id 

또한

return HttpResponse(up.id) 

당신은 단지이 하나의 값 그렇지 않으면 빈 페이지를 반환하려면 어떤 이유로 변경할 수 있다면, 나도 궁금해 : 당신은 단지보기를 만들나요 테스트하려면 UserProfile 그리고 실제 사이트에서보기로 사용하지 마십시오? 그렇다면이 코드는 뷰에 속하지 않으므로 unittest 자체에 넣어야합니다. 실제, 실제보기를 테스트하기 위해서만 테스트 클라이언트를 사용해야합니다.


대부분 관련이 없지만 중요한 메모입니다. 이 :

try: 
    # your view code 
except: 
    pass 

강한 안티 패턴입니다. 왜 모든 잠재적 문제들을 침묵시키고 싶습니까? 정말로 그 일을 그만 두어야합니다.

+0

작은 것들 :'qd .__ getitem __ ('firstname')'은'qd [ 'firstname']'와 동의어입니다. 그러나 이전의 것은 훨씬 짧고 명확합니다 :) –

+0

'qd.get ('firstname' ')', 아이템이 존재하지 않으면 예외를 던지지 않을 것입니다 (대신'None'을 리턴합니다). –

+0

불행히도 귀하의 질문을 이해할 수 없습니다. 다시 말해 줄 수 있니? –