Maneira mais fácil de escrever um programa Python com acesso à funcionalidade do banco de dados Django

StackOverflow https://stackoverflow.com/questions/1381346

Pergunta

Eu tenho um site que busca informações do RSS Feeds periodicamente (bem, atualmente manualmente, e esse é o meu problema). Atualmente, isso é implementado como uma visão normal do Django, o que não é muito bom na minha opinião. Eu gostaria de ter um programa Python que seja executado usando um Cronjob em vez de visitar manualmente o URL correto para atualizar as informações.

Qual é a maneira mais fácil de fazer com que um programa Python tenha acesso ao meu aplicativo Django específico e ao Django ORM?

Foi útil?

Solução

from django.core.management import setup_environ
from django.core.mail import EmailMultiAlternatives, send_mail
from django.contrib.auth.models import User

import settings
from my.app.models import *

setup_environ(settings)

Foi assim que fiz isso por um cron que enviou por e -mail as atualizações diárias. O .py morava na raiz do meu aplicativo Django, para que as configurações de importação refletiriam isso de acordo.

Outras dicas

Uma alternativa a todas as abordagens dadas aqui é escrever seu trabalho de cron como um costume ./manage.py comando. Isso é muito fácil de fazer e lhe dá a capacidade de fazer ./manage.py yourcommand na linha de comando ou no seu crontab.

A documentação Sobre isso é muito escasso, mas diz para você olhar para o código dos comandos existentes, que você pode usar como modelo para o seu.

Editar: Para django 1.7

import os
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
django.setup()
#have fun

Crédito


A resposta selecionada é descontinuada Desde Django 1.4

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
#from your_app_name import models
##have fun

Fonte: https://stackoverflow.com/a/18760222

Você quer algo assim em seu crontab:

PYTHONPATH=/path/to/your/project DJANGO_SETTINGS_MODULE=settings myscript.py

E então seu script python deve começar com isso:

#!/usr/bin/env python

from django.conf import settings

A partir daí, você poderá importar seus modelos / visualizações / formulários / qualquer outra coisa, e ter um ambiente praticamente como um ./manage.py shell

Nota: Dependendo de como você faz suas importações dentro do seu projeto, isso pode não funcionar exatamente como mostrado. Se você está sempre fazendo algo como "de myProject.myapp.models import *", então você deseja definir a linha Cron para parecer mais assim:

PYTHONPATH=/path/to/1_level_before_your_project DJANGO_SETTINGS_MODULE=myproject.settings myscript.py

Eu gostaria de ter um programa Python que seja executado usando um Cronjob em vez de visitar manualmente o URL correto para atualizar as informações.

Uma alternativa simplista: escreva um cronjob para automaticamente "Visite o URL correto para atualizar as informações" - pode ser tão simples quanto um curl ou wget, afinal. Isso não responde à pergunta no título, mas, dada a maneira como você explica o seu verdadeiro problema subjacente, pode ser a abordagem mais simples e imediata para resolvê -la.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top