2014-09-17 2 views
0

Как я могу напечатать идентификатор из ответа в приведенном ниже коде. Пользователь существует в БД. Также я сталкиваюсь с этой ошибкой.Django test client получить идентификатор строки из запроса

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 ') ', который не будет генерировать исключение, если элемент не существует (вместо этого он вернет« Нет »). –

+0

Я не понимаю ваш вопрос, к сожалению. Не могли бы вы перефразировать его? –

Смежные вопросы