datetime.now () em Django aplicação vai mal

votos
6

Eu tive alguns problemas com uma aplicação Django depois que eu implantado. Eu uso um mod-wsgi Apache + no servidor ubuntu. Um tempo depois que reiniciar o servidor o tempo passa foobar, é errado por cerca de -10 horas. Fiz uma vista Django que se parece com:

def servertime():
  return HttpResponse( datetime.now() )

e depois que reiniciar o servidor e verifique a URL que mostra que a visão que primeiro parece bem. Em seguida, em um ponto que às vezes dá a hora correta e às vezes não, e depois ele dá na hora errada sempre. O tempo servidor é corect embora.

Qualquer pistas? Eu pesquisei-lo sem sorte.

Publicado 19/05/2009 em 17:34
fonte usuário
Em outras línguas...                            


7 respostas

votos
6

Eu posso ver seu urls.py bem?

comportamentos semelhantes me confundiu uma vez antes ...

O que acabou por ser foi a maneira que meu urls.py chamado a vista. Python corria o datetime.now () uma vez e armazenado que para chamadas futuras, nunca realmente chamá-lo novamente. É por isso que devs django teve de implementar a capacidade de passar de uma função, não uma chamada de função, para o valor padrão de um modelo, porque levaria a primeira chamada da função e usar isso até python é reiniciado.

Seu comportamento parece ser a primeira vez que é correto porque é a primeira vez a visão foi chamado. Ele estava incorreta, por vezes, porque ele tem essa mesma data novamente. Em seguida, ele foi aleatoriamente correta novamente porque o seu apache provavelmente iniciou outro processo de trabalho para ele, e a loucura provavelmente acontece quando você ter saltado entre as quais processo foi lidar com o pedido.

Respondeu 19/05/2009 em 17:48
fonte usuário

votos
5

Descobri que colocando wsgi no modo daemon funciona. Não sei por que, mas ele fez. Parece que alguns dos processos recém-criados obtém a hora asneira.

Respondeu 02/07/2009 em 17:32
fonte usuário

votos
2

datetime.now () provavelmente está sendo avaliada uma vez, quando sua classe é instanciado. Tente remover os parênteses para que a função datetime.now é retornado e então avaliado. Eu tive um problema semelhante com configuração de valores padrão para os meus DateTimeFields e escreveu-se a minha solução aqui .

Respondeu 06/12/2011 em 18:06
fonte usuário

votos
1

Django define o fuso horário do sistema com base em suas configurações time_zone variável. Isso pode levar a todos os tipos de confusão quando executar várias instâncias Django com diferentes configurações de time_zone.

Isto é o que Django faz:

os.environ['TZ'] = self.TIME_ZONE

A resposta acima:

"Descobri que colocando wsgi no modo daemon funciona"

Nao funciona para mim...

Eu acho que estou indo com não usando Django construído em TIME_ZONE mais.

Respondeu 12/05/2010 em 10:18
fonte usuário

votos
1

Talvez o servidor está avaliando a datetime.now () na inicialização do servidor, tentar torná-lo preguiçoso através de um modelo ou usar uma variável no seu ponto de vista.

Dê uma olhada neste post .

Respondeu 21/05/2009 em 01:20
fonte usuário

votos
0

Tentar definir o seu fuso horário (variável TIME_ZONE) em settings.py

Que funcionou para mim.

Respondeu 06/06/2013 em 10:11
fonte usuário

votos
0

pode ser necessário especificar o tipo de conteúdo como assim

def servertime():
  return HttpResponse( datetime.now(), content_type="text/plain" )

outra ideia:

não pode estar a trabalhar porque datetime.now () retorna um objeto de data e hora. Tente isto:

def servertime():
  return HttpResponse( str(datetime.now()), content_type="text/plain" )
Respondeu 20/05/2009 em 03:12
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more