DJANGO_SETTINGS_MODULE

985 views
Skip to first unread message

Paulo Cesar

unread,
Aug 25, 2017, 12:16:31 AM8/25/17
to Django Brasil
Bom dia,

estou tentando rodar o exemplo do tutorial do Django dentro do VSCode mas não estou conseguindo. Acho que tem a ver com o DJANGO_SETTINGS_MODULE, mas não sei como fazer. Alguém pode me dar uma ajuda?

Obrigado

Thiago Oliveira

unread,
Aug 25, 2017, 7:08:21 AM8/25/17
to Django Brasil
Qual é o erro que está ocorrendo ?
--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
Obrigado.
Thiago Oliveira Vicente 
cel: 11-97051-3508

Paulo Cesar

unread,
Aug 26, 2017, 9:23:30 AM8/26/17
to Django Brasil
Bom dia Thiago,

o código que quero executar é o seguinte:

from models import Question
q_lista = Question.objects.all()
print(q_lista)

A mensagem de erro que recebo é:

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. 
You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

Obrigado

Rafael Henter

unread,
Aug 27, 2017, 10:23:41 AM8/27/17
to django...@googlegroups.com
Você está recebendo este erro por estar e executando um script sem import os módulos do Django ou você está fora da raiz do seu projeto e o manager não está encontrando o ambiente do seu sistema. Verifique se o seu problema é uma dessas duas opções e caso não for analisamos mais o que possa estar acontecendo.

Abs

Rafael Henter

Paulo Cesar

unread,
Aug 27, 2017, 3:02:16 PM8/27/17
to Django Brasil
Oi Rafael, 
Quando eu rodo a consulta dentro do PowerShell do VSCode não dá nenhum erro, porque o manage.py se incumbe de carregar o ambiente necessário para sua execução. Veja aqui:

Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. Todos os direitos reservados.

PS C:\Users\Paulo\Python\Django\FirstDjangoApp> python manage.py shell
Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from polls.models import Question
>>> q_lista = Question.objects.all()
>>> print(q_lista)
<QuerySet [<Question: What's new? None>, <Question: o que há de novo?>]>
>>>


Quando  esse script é rodado dentro do VSCode (através de Ctrl+Shiff+B) ele não carrega o manage.py que busca em settings.py as configurações de ambiente necessárias e dá o erro. Até onde vi, uma forma de contornar isso seria fazer a variável de ambiente DJANGO_SETTINGS_MODULE apontar para o arquivo setting.py da aplicação, mas não sei como fazer isso. 

Desculpe se falei muita bobagem mas é que eu estou começando agora.

abraços

Rafael Henter

unread,
Aug 27, 2017, 3:32:01 PM8/27/17
to django...@googlegroups.com

Bom, neste caso eu tenho uma dúvida. Por que está executando este arquivo sem ser via manage.py runsever ? Vai ser um script "stand alone" (roda fora do django)? 

Caso seja um script stand alone. Ele deve conter o seguinte header para identificar seu ambiente:


Em 27 de ago de 2017, às 16:02, Paulo Cesar <pcmo...@gmail.com> escreveu:

DJANGO_SETTINGS_MODULE

Paulo Cesar

unread,
Aug 28, 2017, 8:24:08 AM8/28/17
to Django Brasil
Bom dia Rafael,

eu queria rodar um script python (teste.py) sem usar runserver mas fazendo uso das facilidades de django.db.models para expor resultados de consultas ao banco de dados. O objetivo é treinar o aprendizado de Python e Django expondo os resultados na janela "output" do VSCode sem ter que criar views ou chamar o powershell . A orientação que você me deu faz sentido porque acho que é preciso configurar o ambiente carregando o arquivo settings.py da aplicação, mas inclui o trecho do seu código em teste.py  e deu o erro 

> Executing task: python c:\Users\Paulo\Python\Django\FirstDjangoApp\polls\teste.py <

Traceback (most recent call last):
  File "c:\Users\Paulo\Python\Django\FirstDjangoApp\polls\teste.py", line 4, in <module>
    from django.core.management import setup_environ
ImportError: cannot import name 'setup_environ'

Estranho é que o editor do VSCode reconhece o método setup_environ.

Acabo concluindo que o problema é mais com a configuração do VSCode do que com o Django. Enfim, acho que esse problema está tomando mais tempo seu e meu do que deveria. Vou continuar estudando aqui e se conseguir organizar minhas conclusões volto a postar.

Obrigado por tudo

abs

Paulo Cesar

unread,
Aug 28, 2017, 3:41:50 PM8/28/17
to Django Brasil
Boa tarde Rafael,

depois de muito pesquisar, achei isso na documentação do Django:

É mandatório chamar o django.setup() para o usar o Django de modo “standalone”

Se você está usando componentes do Django de modo “standalone” – por exemplo, escreveu um script Python o qual carrega alguns templates Django e os renderiza, ou usa o ORM para ler alguns dados – existe mais um passo que é necessário além de configurar as definições.

Depois de definir ou o DJANGO_SETTINGS_MODULE ou chamado configure(), precisará chamar django.setup() para carregar suas definições e popular o registro da aplicação Django. Por exemplo:

import django
from django.conf import settings
from myapp import myapp_defaults

settings.configure(default_settings=myapp_defaults, DEBUG=True)
django.setup()

# Now this script or any imported module can use any part of Django it needs.
from myapp import models

Repare que só é necessário chamar django.setup() se o seu código é realmente “standalone”. Quando chamado pelo seu servidor web, ou através do django-admin, o Django irá fazer isso por você.

django.setup() deve ser chamado uma única vez.

Portanto, evite colocar lógica de aplicação reutilizável em scripts “standalone” de modo que tenha que importar o script em algum lugar da aplicação. Se você não puder evitar isso, coloque a chamada dodjango.setup() dentro de um bloco if:

if __name__ == '__main__':
    import django
    django.setup()

Coloquei esse trecho no início do meu script mas ainda não funcionou. Voltei às pesquisas e achei o seguinte (em https://stackoverflow.com/questions/39723310/django-standalone-script):

import sys, os, django
sys.path.append("/path/to/store") #here store is root folder(means parent).
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "store.settings")
django.setup()

from store_app.models import MyModel

Ai rodou e exibiu o resultado da consulta na janela de output!

Nessas andanças acabei conhecendo o SublimeText e acabei adotando ele ao invés do VSCode. Ele tá rodando mais rápido.

Abraços

Sinval Júnior

unread,
Aug 28, 2017, 3:51:38 PM8/28/17
to django...@googlegroups.com
Você consegui rodar fora do VSCode?

Tudo isso é problemas na consgiuração de sua IDE? Para rodar Django o ideal é primeiro ter corretamente configurado um venv [1] para não contaminar o sistema operacional. Depois você precisa de alguma forma dizer a sua IDE qual é este venv. Eu sempre rodo meus projetos via terminal, isto já com o venv ativado é bem fácil basta usar ./manager runserver . Não aconselho usar está solução stantalone pois terá problemas para efetuar o deploy. 






Ao encaminhar esta mensagem, por favor:
1 - Apague meu endereço eletrônico;
2 - Encaminhe como Cópia Oculta (Cco ou BCc) aos seus destinatários. Dificulte assim a disseminação de vírus, spams e banners.

#=================================================================+
#!/usr/bin/env python
nome = 'Sinval Júnior'
email = 'sinvalju arroba gmail ponto com'
print nome
print email
#==================================================================+

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasil+unsubscribe@googlegroups.com.

Sinval Júnior

unread,
Aug 28, 2017, 3:59:48 PM8/28/17
to django...@googlegroups.com
Correção do link - https://github.com/pyenv/pyenv

Ao encaminhar esta mensagem, por favor:
1 - Apague meu endereço eletrônico;
2 - Encaminhe como Cópia Oculta (Cco ou BCc) aos seus destinatários. Dificulte assim a disseminação de vírus, spams e banners.

#=================================================================+
#!/usr/bin/env python
nome = 'Sinval Júnior'
email = 'sinvalju arroba gmail ponto com'
print nome
print email
#==================================================================+

Reply all
Reply to author
Forward
0 new messages