Используйте только некоторые части Django?

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

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

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

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

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

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

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

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

Ответ 1

Я сам использую Django для его сопоставления объектов /db, не используя его 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. Это позволит вам использовать сопоставления объектов /db Django без фактического проекта Django, поэтому вы можете использовать его для автономных скриптов или других веб-приложений или того, что вы хотите.

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

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

Ответ 2

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

В частности:

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

Ответ 3

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

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

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

Ответ 4

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

Для абстракции db SQLAlchemy приходит в голову.

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

С другой стороны, довольно просто реализовать собственное кэширование, например, используя pickles. Посмотрите этот рецепт для декоратора для идей и google для "memoize".

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

Ответ 5

Я предпочитаю использовать метод mix-and-match для использования Python для веб-программирования.: -)

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

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

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

Ответ 6

Я нашел ответ 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, settings_app и действует как django offical 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)

Ответ 7

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

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

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