Использовать только некоторые части Django? - PullRequest
36 голосов
/ 19 ноября 2008

Мне нравится Django, но для конкретного приложения я хотел бы использовать только его части, но я недостаточно знаком с тем, как Django работает изнутри, поэтому, возможно, кто-то может указать мне правильное направление относительно того, что Я должен проверить.

В частности, я хочу использовать :

  • Модели и база данных абстракции
  • API-интерфейс кеширования , хотя я хочу избегать поиска в базе данных путем кэширования, а не генерации HTML, и поскольку инфраструктура кэширования в Django предназначена для последнего, я пока не уверен, действительно ли это подходит .

Я бы не использовал :

  • 1020 * Шаблонирование *
  • urlconfigs

Или, точнее, я не использую ни HTTP, ни HTML. В общем, у меня цепочка ввода / вывода отличается от обычной.

Может ли это работать?

Моя личная убийственная особенность в Django - это отображение объектов / баз данных, которое я могу сделать с моделями, поэтому, если есть другая технология (не обязательно должен быть Python, я нахожусь на стадии проектирования, и я довольно агностик о языках и платформах), который дает мне те же способности, что и было бы замечательно.

Ответы [ 8 ]

42 голосов
/ 19 ноября 2008

Я сам использую Django для отображения объекта / базы данных без использования его urlconfigs. Просто создайте файл с именем djangosettings.py и вставьте необходимую конфигурацию, например:

DATABASE_ENGINE   = 'oracle'
DATABASE_HOST     = 'localhost'
DATABASE_NAME     = 'ORCL'
DATABASE_USER     = 'scott' 
DATABASE_PASSWORD = 'tiger'

Затем в вашем обычном коде Python выполните

import os
os.environ["DJANGO_SETTINGS_MODULE"] = "djangosettings"

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

Что касается кеширования, если вы не хотите использовать Django, вам, вероятно, следует решить, что вы используете, и идти дальше. Я рекомендую использовать CherryPy, который не использует сопоставление URL-адресов в регулярном выражении в стиле Django, но вместо этого автоматически сопоставляет URL-адреса с функциями на основе имен функций. Пример вверху главной страницы CherryPy: http://cherrypy.org/

CherryPy имеет собственную систему кеширования, поэтому вы можете выполнить то же самое, что и Django, но без необходимости использовать систему urlconfig Django.

12 голосов
/ 20 ноября 2008

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

В частности:

Одна из основных проблем, с которой вы столкнетесь при использовании Django без веб-сервера, - это правильная настройка среды. ORM и кеш-систему все еще нужно настроить в settings.py. На есть документы с использованием django без модуля настроек , которые могут оказаться полезными.

9 голосов
/ 29 мая 2012

Я создал шаблон проекта Django, который позволяет вам сделать это.

https://github.com/dancaron/Django-ORM

Просто следуйте инструкциям, и вы можете писать автономные файлы Python, которые используют функциональные возможности базы данных Django, без необходимости использовать urlconf, views и т. Д.

2 голосов
/ 19 ноября 2008

Я предпочитаю смешивать и сочетать подходы к использованию Python для веб-программирования. : -)

У меня нет большого опыта работы с Django, но я бы порекомендовал дать sqlalchemy для поиска в базе данных. Он хорошо работает с другими и дает вам несколько потенциальных уровней абстракции (так что вы можете пойти с чем-то базовым или настроить его, если хотите). Кроме того, вы уже будете знакомы с ним, если вы когда-либо использовали hibernate / nhibernate.

Моя любимая часть заключается в том, что у него есть много вариантов подключения к базам данных (особенно SQL Server, который django не встроил в прошлый раз, когда я проверял).

С учетом сказанного, мне сказали, что с Django довольно легко отделить функциональность (но сам никогда этого не делал).

2 голосов
/ 19 ноября 2008

Конечно, есть и другие проекты, которые специально реализуют отдельные части django. TurboGears , например, представляет собой набор из нескольких проектов, которые могут работать самостоятельно и вместе формировать полную среду веб-разработки.

Для абстракции БД SQLAlchemy приходит на ум.

Относительно части кэширования: я не знаю ни одного автономного проекта, который реализует универсальные средства кэширования.

С другой стороны, реализовать собственное кэширование должно быть довольно легко, например, с помощью pickles . Взгляните на этот рецепт для декоратора для идей и Google для "запомнить".

Также имейте в виду, что в вашей базе данных есть собственный механизм кэширования, поэтому, возможно, вам даже не нужно заботиться о деталях.

1 голос
/ 27 марта 2018

Чтобы использовать модели Django и абстракцию базы данных , я объясняю простой способ их использования вне Django: https://stackoverflow.com/a/49515366/2682613

Django версия 2.0.2

1 голос
/ 09 сентября 2015

Я нашел KeyboardInterrupt ответ , но на него ответили в 2009 году, и я не смог запустить его в Django 1.8. За последние Django 1.8, вы можете взглянуть на это, в котором некоторые части происходят из KeyboardInterrupt ответить.

Структура папок:

.
├── myApp
│   ├── __init__.py
│   └── models.py
└── my_manage.py

myApp - это модуль, содержащий пустые __init__.py и models.py.

В models.py есть пример класса модели: из django.db импорт моделей

class MyModel(models.Model):
     field = models.CharField(max_length=255)

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

python my_manage.py sql myApp
python my_manage.py migrate
......

Коды в my_manage.py: из django.conf настройки импорта

db_conf = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_database_name',
        'USER': 'your_user_name',
        'PASSWORD': 'your_password',
        'HOST': 'your_mysql_server_host',
        'PORT': 'your_mysql_server_port',
    }
}

settings.configure(
    DATABASES = db_conf,
    INSTALLED_APPS     = ( "myApp", )
)

# Calling django.setup() is required for “standalone” Django u usage
# https://docs.djangoproject.com/en/1.8/topics/settings/#calling-django-setup-is-required-for-standalone-django-usage
import django
django.setup()

if __name__ == '__main__':
    import sys
    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
1 голос
/ 21 января 2013

Я поделился примером решения, которое предотвращает манипуляции Python Path внутри кода:

https://github.com/askalyuk/django-orm-standalone

Он содержит автономный пакет доступа к данным, отдельный простой сайт Django и модульный тест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...