2015-08-21 13 views
5

Uygulamamızı Django 1.6'dan 1.7'ye güncelliyoruz. RemovedInDjango18WarningDeprecation Filtreleme Nasıl yapılır?

bunları filtrelemek için bir yolu var mı:

Biz bu mesajın bir sürü görüyor musunuz? İthalat sırasında yayılırlar.

warnings.filterwarnings('ignore', '...')'u denedik ama warnings.filterwarnings()'u aramadan önce uyarılar yayılıyor.

İçe aktarma sırasında gerçekleşen bu uyarıları nasıl filtreleyebilirim? Eğer manage.py çalıştırmak yalnızca

+0

@Andy. Bence bu farklı bir soru. Warnings.filterwarnings() işlevini nasıl kullanacağımı biliyorum. Sorunum zamanlama: İçe aktarma sırasında bir çok mesaj yayılıyor. Ben warnings.filterwarnings() yeterince erken – guettli

+0

aramak nasıl bilmiyorum [kendi filtrenizi yazmak] (https://docs.djangoproject.com/en/1.Settings.py içinde 8/topic/logging/# id5)? – danihp

+0

@danhip AFAIK, settings.py yüklenmeden önce uyarılar yayılır. Settings.py dosyasındaki bir filtre çok geç olurdu. – guettli

cevap

4

Quickfix

import sys sonra şu satırları ekleyin, bunu susturmak için:

# ... 
import sys 

if not sys.warnoptions: 
    sys.warnoptions += [None] 

# ... 

ayrıca your_project/wsgi.py güncellemek, senin WSGI sunucusuna (yani Apache) onu susturmak istiyorsanız ve import os sonra aşağıdaki satırları ekleyin:

# ... 
import os 
import sys 

if not sys.warnoptions: 
    sys.warnoptions += [None] 

# ... 

Açıklama

bu işleri nedeni django.utils.log.configure_logging() bunu nasıl işleyeceğini taşımaktadır

:

O kasten erken başardık önce hataları yayılan edildi açıklıyor django.setup() parçası olarak önyükleme işleminde, denir
def configure_logging(logging_config, logging_settings): 
    if not sys.warnoptions: 
     # Route warnings through python logging 
     logging.captureWarnings(True) 
     # RemovedInNextVersionWarning is a subclass of DeprecationWarning which 
     # is hidden by default, hence we force the "default" behavior 
     warnings.simplefilter("default", RemovedInNextVersionWarning) 
    # ... 

onları yığından aşağı doğru susturabilirsiniz. sys.warnoptions'a yeni bir öğe eklemek, mantığı atlayarak True değerini değerlendirmek üzere zorlar. Bu, warnings modülü tarafından yüklendiğinde only used during python startup olduğundan zararsızdır.

RemovedInNextVersionWarning sadece RemovedInDjango18Warning in Django 1.7 için bir takma addır. RemovedInDjango19Warning in 1.8 olarak ayarlanmıştır ve bu nedenle gelecek sürümler için bu kod DeprecationWarning türünün gelecekteki kanıtı olmalıdır.


Komut satırı yöntemleri sys.warnoptions normalde piton çağrılırken -W argument dayalı piton başlatma sırasında ayarlanır Not olduğunu

. Bu nedenle, dev sunucusunu kullandığınızda yalnızca uyarıları susturmanın basit bir yolu python -W123 manage.py runserver'dur. Bu, dosyaların değiştirilmesini gerektirmez, ancak 123 yalnızca bir yer tutucu ve geçerli bir uyarı eylemi olmadığı için başlangıçta tek bir zararsız uyarı ile sonuçlanır. Bu RemovedInDjango18Warning olmayan ilgi muhtemelen de dahil, TÜM DeprecationWarning s görmezden olsa

başka yolu da, python -Wi::DeprecationWarning manage.py runserver olduğunu.