Использование моделей и форм за пределами Django? - PullRequest
8 голосов
/ 27 апреля 2010

Можно ли запустить файл вида, используя модель и форму Django вне среды Django?

Ответы [ 3 ]

11 голосов
/ 01 мая 2010

Это возможно. Django довольно хорош в том, чтобы быть прямым питоном без особой магии, поэтому вы обычно можете отделить вещи. Представления - это просто функции, и их можно вызывать из любого другого кода Python.

Чтобы использовать ORM, вам нужно настроить среду django в своем скрипте. Просмотр файла manage.py показывает, как это сделать:

from django.core.management import setup_environ
import settings
setup_environ(settings)

Теперь вы можете вызывать любой вид, который хотите:

from myapp.views import some_view

some_view(...)

Имейте в виду, что соглашение заключается в том, чтобы функции представления принимали объект HttpRequest в качестве первого параметра и возвращали объект HttpResponse. Вы можете создать объект запроса самостоятельно:

from django.http import HttpRequest

result = some_view(HttpRequest(), ...)

Но если вы действительно не заинтересованы в использовании объектов HttpResponse или HttpRequest, возможно, вам просто не следует называть ваши методы «представлениями». Может быть, они "утилиты" или что-то еще. Django не применяет ничего из этого, но это хорошая форма следовать такому соглашению, чтобы другие программисты могли читать ваш код.

Редактировать: 2010-05-24: Исправлено «setup_environ» (ранее ошибочно использовался «execute_manager»). Ссылка .

1 голос
/ 18 января 2014

В Django 1.6 это можно сделать, поместив каталог проекта в путь, а затем установите переменную среды DJANGO_SETTINGS_MODULE, как показано ниже:

import sys
import os

sys.path.append(path_to_the_project_dir)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')

Затем вы можете начать импорт ваших моделей.

0 голосов
/ 25 июля 2014

В Django 1.7 вам также необходимо выполнить:

import sys
import os

sys.path.append(path_to_the_project_dir)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')

import django
django.setup()

В противном случае вы получите исключение AppRegistryNotReady.

...