Django 1.6在Django环境中运行独立脚本 - 没有成功

时间:2014-03-13 15:49:39

标签: python django

我有一个独立的脚本,我需要在Django环境中运行。它使用Database Orm等。当我尝试运行它时,它开始抱怨from .generators import thread_generator。所以,很明显它不在Django环境中。我用Google搜索并试了很多东西但仍然没有成功。目前,我正在尝试以下没有成功。我甚至不确定bot_server.local是否正确或是否bot_server.settings。但是,我在设置中使用local.py。我无法将其作为命令运行,因为对于它的使用,我需要将其作为独立脚本运行。我需要将其作为脚本中的永久物,而不是具有临时性的shell环境。

from functools import wraps
import sys
import os
import datetime
import base64
import json
from django.db import connection
from django.core.management.base import BaseCommand, CommandError
from .generators import thread_generator
from .do_request import do_request
from .models import Employee, ThreadVault

if __name__ == '__main__':
    os.environ['DJANGO_SETTINGS_MODULE'] = "bot_server.local"
    sys.path.append("/home/git/bot_server/bot_server")

3 个答案:

答案 0 :(得分:3)

要运行独立脚本,您只需在开始编写脚本之前编写此代码。执行独立脚本的问题是找不到django环境所以要提供这个,我们需要 追加设置文件。

//Start your code here

import os, sys
from os import path

proj_path = "project_path\project_name"

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
sys.path.append(proj_path)
os.chdir(proj_path)

from django.core.wsgi import get_wsgi_application

from app1.models import *
from app2.models import model_name
from app3.models import model_name1, model_name2

application = get_wsgi_application()

//Start your script from here 

答案 1 :(得分:2)

答案非常简单......只需粘贴manage.py中的内容:

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bot_server.settings.local")

    from django.core.management import execute_from_command_line

我读过的所有帖子,我都不相信以前没有提到过。

答案 2 :(得分:1)

是的,这个答案很简单

manage.py文件如下

#!/usr/bin/env python

from settings.common import PROJECT_ROOT
import os
import sys


os.chdir(PROJECT_ROOT)
sys.path.insert(0, os.path.abspath(os.path.join(PROJECT_ROOT, "..")))

for i, arg in enumerate(sys.argv):
   if arg.startswith("--site"):
      os.environ["MEZZANINE_SITE_ID"] = arg.split("=")[1]
      sys.argv.pop(i)

if __name__ == "__main__":
    settings_module = "settings.common"
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", settings_module)
    from django.core.management import execute_from_command_line
    execute_from_command_line(sys.argv)