Использование в Django точно такого же кода базы данных на питоне, уже работающего в PHP
У меня есть куча файлов, содержащих функции python, используемые в веб-сервисе apache2, все они вызываются из PHP как shell-скрипты просто с помощью "python3 'file' 'args'" (без -m, то есть) и возвращают данные в PHP через JSON-строки, все отлажены с давних пор, и работают хорошо.
Все они находятся в одном каталоге, и большинство из них импортируют другие файлы просто с помощью
from file_with_lower_level_functions import gimme_this_table
Многие импортируемые функции в свою очередь импортируют другие, и некоторые цепочки импорта могут быть длиной в 4 или 5 звеньев.
Попытка импортировать это в Django - кошмар. На все мои "from" отвечают "manage.py check" с сообщением "модуль не найден". Я добился частичного успеха, изменив верхний уровень froms на
from .file_with_lower_level_function import gimme_this_table
добавление ведущей точки. Но, во-первых, такое изменение "from" в каждом отдельном модуле сделает их неработоспособными в старой ситуации, и я не хочу делать это изменение.
Далее, это дает проблемы со 2-я ссылками, когда одна из моих функций импортирует другую: применение того же лекарства ко второй не работает: "Huh uh! module not found"
Возможен ли такой подход в Django? Есть ли общая форма, которая даст мне код, который можно использовать и в Django, и в PHP?
Я думал применить к Django тот же трюк, что и к PHP, то есть вызвать мой код как shell-скрипт, и это, возможно, сработало бы; но поскольку Django уже python, это меня не очень привлекает: Я буду потеть над работой и ничему не научусь.
Я пробовал вызывать из django views свои старые функции, и я ожидал, что это будет работать без (многих) проблем.
Да, комментарий, который я получил, дал мне подсказку. Если бы это был ответ, я бы его проголосовал.
Установка собственного python-кода для вызова в представлениях Django была (по крайней мере, в моем случае) простым делом:
, когда мои модули находятся в одной директории (забавный пустой файл init.py даже не понадобился)
указываем Django абсолютный путь к этой единственной директории, используя либо
export PYTHONPATH=/home/my_own_self/my_directory
если вы используете собственный runerver Django или вставляете его в конец здесь:
WSGIDaemonProcess youpi_server python-home=/(some path)/django_venv python-path=(...path to views...):/home/my_own_self/my_directory
если вы обслуживаете его в Apache, и
- вставляя в представления такие строки, как
from my_own_module import my_own_function
где my_own_module.py - файл в каталоге my_directory, а my_own_function это "def" в нем.
Спасибо Абдулу Азизу Баркату!