2013-05-05 11 views
8

po uaktualnieniu z Django 1.3 Django 1.5 zacząłem widzieć te DeprecationWarnings podczas testu:Verbose ostrzeżenia amortyzacyjne w Django

path_to_virtualenv// python2.6/site-packages/django/http/lib żądanie .py: 193: DeprecationWarning: HttpRequest.raw_post_data jest przestarzałe. Zamiast tego użyj HttpRequest.body.

Szukałem wewnątrz projektu dla raw_post_data i nic nie znalazłem. Więc nie był bezpośrednio wykorzystywany w projekcie. Potem już ręcznie przeszedł INSTALLED_APPS i okazało się, że moduł raven nadal używa raw_post_data i to było przyczyną, ale ..

Czy to możliwe, aby zobaczyć przyczynę DeprecationWarning podczas badania? Jak uczynić te ostrzeżenia bardziej gadatliwymi?

+0

Czy możesz pokazać, w jaki sposób żądasz? Musi istnieć coś, co ma dostęp do właściwości 'raw_post_data', chociaż nie powinno. –

+0

To po prostu 'self.client.get (url, params)'. Jestem prawie pewny, że nie ma to znaczenia, ponieważ takie żądania wykonuję w wielu metodach testowania, ale tylko ten powoduje pojawienie się ostrzeżenia. Sądzę więc, że dzieje się tak dlatego, że coś jest importowane do 'libs', które powoduje ostrzeżenie. Mimo wszystko dziekuję. – alecxe

+1

Rozumiem. Czy importujesz coś w 'libs', które jest powiązane z Django lub żądaniami/widokami? W Django 1.5 nie jest dostępna właściwość 'raw_post_data', ale coś może analizować żądanie przez iterowanie po wszystkich właściwościach. Może "makiety"? Lub coś w 'libs'? –

Odpowiedz

4

Jest to wzięte z a similar question.

Możesz użyć modułów ostrzeżeń, aby zgłosić błąd dla DeprecationWarning.

Tymczasowo dodaj poniższy fragment do góry projektu urls.py:

import warnings 
warnings.simplefilter('error', DeprecationWarning) 

DeprecationWarning będzie teraz podnieść błąd, więc jeśli debug=True dostaniesz znajomą żółtą stronę błędu Django z pełnym traceback.

+1

Tak, widziałem to, ale, niestety, to nie działa - kiedy dodaję to do 'urls.py' lub' settings.py', nie widzę ostrzeżeń w ogóle podczas testu. Spróbuję ustalić przyczynę i zaakceptować odpowiedź, jeśli działa. Dziękujemy za udział. – alecxe

+0

powodzenia z nim – SunnySydeUp

+0

Spróbuj dodać go do swojego manage.py? –

20

Można ustawić Python warning control linią opcji poleceń -W podnieść wyjątek z traceback na DeprecationWarning jak błędy zamiast zwykłego prostego ostrzeżenia raz. Każde specjalne ostrzeżenie można filtrować według wiadomości, kategorii, modułu, linii lub ich kombinacji.

Przykłady:

python -W error:"raw_post_data has been deprecated" manage.py test 

python -W error::DeprecationWarning manage.py test 

python -W error:::django.http.request manage.py test 

Grzywna filtrowanie jest przydatna, jeśli chcesz naprawić wszystkie ostrzeżenia jednego typu ze sobą edycji partii w wielu plikach dużego projektu.


Python 2,7 i wyższe ignoruje DeprecationWarning zwykle, jeżeli nie są one reanabled np przez opcję -Wd lub przez zmienną środowiskową export PYTHONWARNINGS="d". Może to być przydatne w urządzeniach programistycznych, ale nie w produkcji.

Powiązane problemy