在应用程序中导入django设置以进行测试

时间:2015-09-30 10:22:34

标签: django python-3.x

我想在API中导入API_script.py中的django设置 设置在Agora.settings中:

这是API中的API_script.py:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Agora.settings")
from django.contrib.auth.models import User
import django
from django.db.models.loading import cache as model_cache
from Profile.models import Profile_User
try :
    django.setup()
except :
     pass

def check_profile_exist(token):
    print(token)

这是我得到的错误:

Traceback (most recent call last):
  File "/home/bussiere/WorkspaceSafe/Agora/API/API_script.py", line 3, in <module>
    from django.contrib.auth.models import User
  File "/usr/local/lib/python3.4/dist-packages/django/contrib/auth/__init__.py", line 7, in <module>
    from django.middleware.csrf import rotate_token
  File "/usr/local/lib/python3.4/dist-packages/django/middleware/csrf.py", line 14, in <module>
    from django.utils.cache import patch_vary_headers
  File "/usr/local/lib/python3.4/dist-packages/django/utils/cache.py", line 26, in <module>
    from django.core.cache import caches
  File "/usr/local/lib/python3.4/dist-packages/django/core/cache/__init__.py", line 34, in <module>
    if DEFAULT_CACHE_ALIAS not in settings.CACHES:
  File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 92, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ImportError: No module named 'Agora'

这是我的树文件:

.
    ├── Agora
    │   ├── __init__.py
    │   ├── __pycache__
    │   │   ├── __init__.cpython-34.pyc
    │   │   ├── settings.cpython-34.pyc
    │   │   ├── urls.cpython-34.pyc
    │   │   └── wsgi.cpython-34.pyc
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── API
    │   ├── admin.py
    │   ├── API_script.py
    │   ├── __init__.py
    │   ├── migrations
    │   │   ├── __init__.py
    │   │   └── __pycache__
    │   │       └── __init__.cpython-34.pyc
    │   ├── models.py
    │   ├── __pycache__
    │   │   ├── admin.cpython-34.pyc
    │   │   ├── API_script.cpython-34.pyc
    │   │   ├── __init__.cpython-34.pyc
    │   │   ├── models.cpython-34.pyc
    │   │   └── views.cpython-34.pyc
    │   ├── tests.py
    │   ├── unit_test.py
    │   └── views.py
    ├── Contact
    │   ├── admin.py
    │   ├── __init__.py
    │   ├── models.py
    │   ├── __pycache__
    │   │   ├── admin.cpython-34.pyc
    │   │   ├── __init__.cpython-34.pyc
    │   │   └── models.cpython-34.pyc
    │   ├── tests.py
    │   └── views.py
    ├── Dockerfile
    ├── generateadm.py
    ├── IMG_20150928_105102.jpg
    ├── __init__.py
    ├── manage.py
    ├── Message
    │   ├── admin.py
    │   ├── __init__.py
    │   ├── models.py
    │   ├── __pycache__
    │   │   ├── admin.cpython-34.pyc
    │   │   ├── __init__.cpython-34.pyc
    │   │   ├── models.cpython-34.pyc
    │   │   └── views.cpython-34.pyc
    │   ├── tests.py
    │   └── views.py
    ├── Mock
    │   ├── admin.py
    │   ├── __init__.py
    │   ├── models.py
    │   ├── __pycache__
    │   │   ├── admin.cpython-34.pyc
    │   │   ├── __init__.cpython-34.pyc
    │   │   ├── models.cpython-34.pyc
    │   │   └── views.cpython-34.pyc
    │   ├── tests.py
    │   └── views.py
    ├── Profile
    │   ├── admin.py
    │   ├── __init__.py
    │   ├── models.py
    │   ├── profile_script.py
    │   ├── __pycache__
    │   │   ├── admin.cpython-34.pyc
    │   │   ├── __init__.cpython-34.pyc
    │   │   ├── models.cpython-34.pyc
    │   │   └── profile_script.cpython-34.pyc
    │   ├── tests.py
    │   └── views.py
    ├── Queue
    │   ├── admin.py
    │   ├── __init__.py
    │   ├── models.py
    │   ├── __pycache__
    │   │   ├── admin.cpython-34.pyc
    │   │   ├── __init__.cpython-34.pyc
    │   │   └── models.cpython-34.pyc
    │   ├── tests.py
    │   └── views.py
    ├── requierement.txt
    ├── result.txt
    └── runserver.sh

问候和感谢

4 个答案:

答案 0 :(得分:2)

您是否已将django项目路径附加到python的路径?

e.g。

import os, sys
BASE_PATH="/location/folder/where/manage.py/lives"
sys.path.append(BASE_PATH)
os.environ['DJANGO_SETTINGS_MODULE'] = 'Agora.settings'

答案 1 :(得分:2)

虽然其他答案指出的sys.path问题可能是您当前的问题,但似乎对于您的用例(在应用程序上执行“某事”的脚本),Django custom command更适合。

设置自定义命令非常简单:

在API文件夹中创建路径management/commands。不要忘记在__init__.pymanagement个文件夹中添加空commands个文件。

然后在apiscript.py文件夹中创建一个名为management/commands的Python模块,其中包含以下内容:

from django.core.management.base import BaseCommand, CommandError
from Profile.models import Profile_User

class Command(BaseCommand):
    help = 'Describe the purpose of your script'

    def handle(self, *args, **options):
        # do something with Profile_User model
        p = Profile_User.objects.get(pk=1)

您已经设置了所有Django机器(无需调用django.setup()),您可以使用以下命令调用脚本:

./manage.py apiscript

答案 2 :(得分:1)

很可能情况是项目Agora不在python路径上。

根据您的具体情况,您可以通过两种方式将其添加到路径中。

首先:根据您的操作系统,您可以将Agora项目符号链接到python路径目录中。这很容易在linux和OSX上完成,在Windows上不那么容易。它将类似于:

ln -s /path/to/Agora /usr/local/lib/python2.7/site-packages/Agora

其次:在应用程序代码之前添加以下代码:

import sys
import os
agora_path = os.path.join('/path/to/library')
sys.path.append(agora_path)

# now add your code
# ...

答案 3 :(得分:0)

我已经使用了你的想法并使其不可知:

import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
print(BASE_DIR)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Agora.settings")

感谢