Уведомления

Группа в Telegram: @pythonsu

#1 Май 8, 2012 23:41:39

Gorazio
От:
Зарегистрирован: 2011-11-20
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при тестировании

Добрый вечер всем, нуждаюсь в помощи знающих людей.
Есть модель (лог-журнал запросов):

...
class RequestLog (models.Model):
    datetime = models.CharField(max_length=25)
    requested_url = models.CharField(max_length=255)
    request_type = models.CharField(max_length=10)
    request_ip = models.CharField(max_length=20)
    def __unicode__(self):
        return self.requested_url
В эту модель данные заносятся middleware:
#Здесь сохраняем
class SaveRequestdb(object):
    def process_request(self, request):
        if request:
            rp = request.path
            req = RequestLog(requested_url=request.build_absolute_uri(rp),
                              datetime=datetime.now(),
                              request_type=request.method,
                              request_ip=request.META['REMOTE_ADDR'],
                              )
            req.save()
#Здесь отображаем последних 10 запросов
class RequestLogMw(object):
    def process_response(self, request, response):
        if request.path.strip().endswith("requests/"):
            req = RequestLog.objects.filter().order_by('-datetime')[: 10]
            return render_to_response("url_log.html",
                                      {'req': req, },
                                      context_instance=RequestContext(request))
        return response
В urls.py:
...
from <проэкт>.<мидлввря> import RequestLogMw
urlpatterns = patterns('',
    ...
    url(r'^requests/', RequestLogMw.process_response, name='logurl'),
Все работает нормально, но я не могу понять почему получаю ошибку при тестировании шаблона с последними 10-ю запросами, тест вот:
class RequestsLogTemplateTest(TestCase):
    def setUp(self):
        self.client = Client()
    def tearDown(self):
        self.client = None
    def test_reqlog_page(self):
        response = self.client.get('/requests/')
        self.assertContains(response, 'At', count=2, status_code=200)
        _n = 15
        while _n >= 0:
            _n -= 1
            if _n == 0:
                break
            else:
                response = self.client.get('/requests/')
        self.assertContains(response, 'At', count=10, status_code=200)
Получаю ошибку:
Traceback (most recent call last):
  File "/home/animasola/Documents/coffeine/muchcoffee/../muchcoffee/coffeine/tests.py", line 52, in test_reqlog_page
    response = self.client.get('/requests/')
  File "/usr/local/lib/python2.7/dist-packages/django/test/client.py", line 445, in get
    response = super(Client, self).get(path, data=data, **extra)
  File "/usr/local/lib/python2.7/dist-packages/django/test/client.py", line 229, in get
    return self.request(**r)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
TypeError: unbound method process_response() must be called with RequestLogMw instance as first argument (got WSGIRequest instance instead)
Извините за простыню, и помогите пожалуйста. Спасибо наперед.



Офлайн

#2 Май 9, 2012 01:31:12

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Ошибка при тестировании

Трудно сказать что конкретно не правильно, спмотрите дебаггером.
Вы как-то очень странно используете middleware - как view, судя по urls.py. Почему так?

Офлайн

#3 Май 9, 2012 11:18:49

Chern
От: Киев
Зарегистрирован: 2010-09-15
Сообщения: 71
Репутация: +  3  -
Профиль   Отправить e-mail  

Ошибка при тестировании

Судя по ошибке должно быть:

url(r'^requests/', RequestLogMw().process_response, name='logurl'),

Но это похоже на какой то грязный хак



Офлайн

#4 Май 9, 2012 13:42:38

Gorazio
От:
Зарегистрирован: 2011-11-20
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при тестировании

Ferroman
Трудно сказать что конкретно не правильно, спмотрите дебаггером.
Вы как-то очень странно используете middleware - как view, судя по urls.py. Почему так?
Правильный вопрос дорогого стоит. Спасибо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version